changeset 0:d39e1d0d75b6 tip

initial add
author paulo@hit-nxdomain.opendns.com
date Sat, 20 Feb 2010 21:18:28 -0800
parents
children
files AUTHORS COPYING ChangeLog INSTALL Make.msvc Makefile.am Makefile.in Makefile.msvc NEWS README TODO aclocal.m4 autogen.sh config.guess config.h.in config.sub configure configure.ac data/Gnutella.conf data/Gnutella.conf.template data/Makefile.am data/Makefile.in data/gwebcaches data/hostiles.txt depcomp gnutella.spec gnutella.spec.in install-sh ltmain.sh m4/Makefile.am m4/Makefile.in m4/gift-pkgconfig.m4 m4/gift-prefix.m4 m4/libxml.m4 m4/openbsd.m4 m4/zlib.m4 missing mkinstalldirs src/Makefile.am src/Makefile.in src/Makefile.msvc src/dns.c src/dns.h src/encoding/Makefile.am src/encoding/Makefile.in src/encoding/base32.c src/encoding/base32.h src/encoding/url.c src/encoding/url.h src/file_cache.c src/file_cache.h src/gt_accept.c src/gt_accept.h src/gt_ban.c src/gt_ban.h src/gt_bind.c src/gt_bind.h src/gt_conf.c src/gt_conf.h src/gt_connect.c src/gt_connect.h src/gt_gnutella.c src/gt_gnutella.h src/gt_guid.c src/gt_guid.h src/gt_http_client.c src/gt_http_client.h src/gt_http_server.c src/gt_http_server.h src/gt_netorg.c src/gt_netorg.h src/gt_node.c src/gt_node.h src/gt_node_cache.c src/gt_node_cache.h src/gt_node_list.c src/gt_node_list.h src/gt_packet.c src/gt_packet.h src/gt_query_route.c src/gt_query_route.h src/gt_search.c src/gt_search.h src/gt_search_exec.c src/gt_search_exec.h src/gt_share.c src/gt_share.h src/gt_share_file.c src/gt_share_file.h src/gt_share_state.c src/gt_share_state.h src/gt_stats.c src/gt_stats.h src/gt_urn.c src/gt_urn.h src/gt_utils.c src/gt_utils.h src/gt_version.c src/gt_version.h src/gt_web_cache.c src/gt_web_cache.h src/gt_xfer.c src/gt_xfer.h src/gt_xfer_obj.c src/gt_xfer_obj.h src/http_request.c src/http_request.h src/io/Makefile.am src/io/Makefile.in src/io/io_buf.c src/io/io_buf.h src/io/rx_inflate.c src/io/rx_inflate.h src/io/rx_layer.c src/io/rx_layer.h src/io/rx_link.c src/io/rx_link.h src/io/rx_packet.c src/io/rx_packet.h src/io/rx_stack.c src/io/rx_stack.h src/io/tx_deflate.c src/io/tx_layer.c src/io/tx_layer.h src/io/tx_link.c src/io/tx_link.h src/io/tx_packet.c src/io/tx_stack.c src/io/tx_stack.h src/message/Makefile.am src/message/Makefile.in src/message/bye.c src/message/gt_message.c src/message/gt_message.h src/message/msg_handler.h src/message/ping.c src/message/ping_reply.c src/message/push.c src/message/query.c src/message/query_reply.c src/message/query_route.c src/message/vendor.c src/sha1.c src/sha1.h src/transfer/Makefile.am src/transfer/Makefile.in src/transfer/download.c src/transfer/download.h src/transfer/push_proxy.c src/transfer/push_proxy.h src/transfer/source.c src/transfer/source.h src/trie.c src/trie.h src/xml.c src/xml.h
diffstat 156 files changed, 87887 insertions(+), 0 deletions(-) [+]
line diff
     1.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     1.2 +++ b/AUTHORS	Sat Feb 20 21:18:28 2010 -0800
     1.3 @@ -0,0 +1,13 @@
     1.4 +Maintainers:
     1.5 +
     1.6 +  * Craig Barnes <hipnod@bellsouth.net>
     1.7 +
     1.8 +Contributors:
     1.9 +
    1.10 +  * Peter 'Luna' Runestig 		
    1.11 +    - Some important memory leak fixes
    1.12 +
    1.13 +  * Tom Hargreaves
    1.14 +    - First noticed file descriptor leak in 0.0.9 
    1.15 +
    1.16 +TODO: some other people have sent patches, should list them here
     2.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     2.2 +++ b/COPYING	Sat Feb 20 21:18:28 2010 -0800
     2.3 @@ -0,0 +1,340 @@
     2.4 +		    GNU GENERAL PUBLIC LICENSE
     2.5 +		       Version 2, June 1991
     2.6 +
     2.7 + Copyright (C) 1989, 1991 Free Software Foundation, Inc.
     2.8 +     59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
     2.9 + Everyone is permitted to copy and distribute verbatim copies
    2.10 + of this license document, but changing it is not allowed.
    2.11 +
    2.12 +			    Preamble
    2.13 +
    2.14 +  The licenses for most software are designed to take away your
    2.15 +freedom to share and change it.  By contrast, the GNU General Public
    2.16 +License is intended to guarantee your freedom to share and change free
    2.17 +software--to make sure the software is free for all its users.  This
    2.18 +General Public License applies to most of the Free Software
    2.19 +Foundation's software and to any other program whose authors commit to
    2.20 +using it.  (Some other Free Software Foundation software is covered by
    2.21 +the GNU Library General Public License instead.)  You can apply it to
    2.22 +your programs, too.
    2.23 +
    2.24 +  When we speak of free software, we are referring to freedom, not
    2.25 +price.  Our General Public Licenses are designed to make sure that you
    2.26 +have the freedom to distribute copies of free software (and charge for
    2.27 +this service if you wish), that you receive source code or can get it
    2.28 +if you want it, that you can change the software or use pieces of it
    2.29 +in new free programs; and that you know you can do these things.
    2.30 +
    2.31 +  To protect your rights, we need to make restrictions that forbid
    2.32 +anyone to deny you these rights or to ask you to surrender the rights.
    2.33 +These restrictions translate to certain responsibilities for you if you
    2.34 +distribute copies of the software, or if you modify it.
    2.35 +
    2.36 +  For example, if you distribute copies of such a program, whether
    2.37 +gratis or for a fee, you must give the recipients all the rights that
    2.38 +you have.  You must make sure that they, too, receive or can get the
    2.39 +source code.  And you must show them these terms so they know their
    2.40 +rights.
    2.41 +
    2.42 +  We protect your rights with two steps: (1) copyright the software, and
    2.43 +(2) offer you this license which gives you legal permission to copy,
    2.44 +distribute and/or modify the software.
    2.45 +
    2.46 +  Also, for each author's protection and ours, we want to make certain
    2.47 +that everyone understands that there is no warranty for this free
    2.48 +software.  If the software is modified by someone else and passed on, we
    2.49 +want its recipients to know that what they have is not the original, so
    2.50 +that any problems introduced by others will not reflect on the original
    2.51 +authors' reputations.
    2.52 +
    2.53 +  Finally, any free program is threatened constantly by software
    2.54 +patents.  We wish to avoid the danger that redistributors of a free
    2.55 +program will individually obtain patent licenses, in effect making the
    2.56 +program proprietary.  To prevent this, we have made it clear that any
    2.57 +patent must be licensed for everyone's free use or not licensed at all.
    2.58 +
    2.59 +  The precise terms and conditions for copying, distribution and
    2.60 +modification follow.
    2.61 +
    2.62 +		    GNU GENERAL PUBLIC LICENSE
    2.63 +   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
    2.64 +
    2.65 +  0. This License applies to any program or other work which contains
    2.66 +a notice placed by the copyright holder saying it may be distributed
    2.67 +under the terms of this General Public License.  The "Program", below,
    2.68 +refers to any such program or work, and a "work based on the Program"
    2.69 +means either the Program or any derivative work under copyright law:
    2.70 +that is to say, a work containing the Program or a portion of it,
    2.71 +either verbatim or with modifications and/or translated into another
    2.72 +language.  (Hereinafter, translation is included without limitation in
    2.73 +the term "modification".)  Each licensee is addressed as "you".
    2.74 +
    2.75 +Activities other than copying, distribution and modification are not
    2.76 +covered by this License; they are outside its scope.  The act of
    2.77 +running the Program is not restricted, and the output from the Program
    2.78 +is covered only if its contents constitute a work based on the
    2.79 +Program (independent of having been made by running the Program).
    2.80 +Whether that is true depends on what the Program does.
    2.81 +
    2.82 +  1. You may copy and distribute verbatim copies of the Program's
    2.83 +source code as you receive it, in any medium, provided that you
    2.84 +conspicuously and appropriately publish on each copy an appropriate
    2.85 +copyright notice and disclaimer of warranty; keep intact all the
    2.86 +notices that refer to this License and to the absence of any warranty;
    2.87 +and give any other recipients of the Program a copy of this License
    2.88 +along with the Program.
    2.89 +
    2.90 +You may charge a fee for the physical act of transferring a copy, and
    2.91 +you may at your option offer warranty protection in exchange for a fee.
    2.92 +
    2.93 +  2. You may modify your copy or copies of the Program or any portion
    2.94 +of it, thus forming a work based on the Program, and copy and
    2.95 +distribute such modifications or work under the terms of Section 1
    2.96 +above, provided that you also meet all of these conditions:
    2.97 +
    2.98 +    a) You must cause the modified files to carry prominent notices
    2.99 +    stating that you changed the files and the date of any change.
   2.100 +
   2.101 +    b) You must cause any work that you distribute or publish, that in
   2.102 +    whole or in part contains or is derived from the Program or any
   2.103 +    part thereof, to be licensed as a whole at no charge to all third
   2.104 +    parties under the terms of this License.
   2.105 +
   2.106 +    c) If the modified program normally reads commands interactively
   2.107 +    when run, you must cause it, when started running for such
   2.108 +    interactive use in the most ordinary way, to print or display an
   2.109 +    announcement including an appropriate copyright notice and a
   2.110 +    notice that there is no warranty (or else, saying that you provide
   2.111 +    a warranty) and that users may redistribute the program under
   2.112 +    these conditions, and telling the user how to view a copy of this
   2.113 +    License.  (Exception: if the Program itself is interactive but
   2.114 +    does not normally print such an announcement, your work based on
   2.115 +    the Program is not required to print an announcement.)
   2.116 +
   2.117 +These requirements apply to the modified work as a whole.  If
   2.118 +identifiable sections of that work are not derived from the Program,
   2.119 +and can be reasonably considered independent and separate works in
   2.120 +themselves, then this License, and its terms, do not apply to those
   2.121 +sections when you distribute them as separate works.  But when you
   2.122 +distribute the same sections as part of a whole which is a work based
   2.123 +on the Program, the distribution of the whole must be on the terms of
   2.124 +this License, whose permissions for other licensees extend to the
   2.125 +entire whole, and thus to each and every part regardless of who wrote it.
   2.126 +
   2.127 +Thus, it is not the intent of this section to claim rights or contest
   2.128 +your rights to work written entirely by you; rather, the intent is to
   2.129 +exercise the right to control the distribution of derivative or
   2.130 +collective works based on the Program.
   2.131 +
   2.132 +In addition, mere aggregation of another work not based on the Program
   2.133 +with the Program (or with a work based on the Program) on a volume of
   2.134 +a storage or distribution medium does not bring the other work under
   2.135 +the scope of this License.
   2.136 +
   2.137 +  3. You may copy and distribute the Program (or a work based on it,
   2.138 +under Section 2) in object code or executable form under the terms of
   2.139 +Sections 1 and 2 above provided that you also do one of the following:
   2.140 +
   2.141 +    a) Accompany it with the complete corresponding machine-readable
   2.142 +    source code, which must be distributed under the terms of Sections
   2.143 +    1 and 2 above on a medium customarily used for software interchange; or,
   2.144 +
   2.145 +    b) Accompany it with a written offer, valid for at least three
   2.146 +    years, to give any third party, for a charge no more than your
   2.147 +    cost of physically performing source distribution, a complete
   2.148 +    machine-readable copy of the corresponding source code, to be
   2.149 +    distributed under the terms of Sections 1 and 2 above on a medium
   2.150 +    customarily used for software interchange; or,
   2.151 +
   2.152 +    c) Accompany it with the information you received as to the offer
   2.153 +    to distribute corresponding source code.  (This alternative is
   2.154 +    allowed only for noncommercial distribution and only if you
   2.155 +    received the program in object code or executable form with such
   2.156 +    an offer, in accord with Subsection b above.)
   2.157 +
   2.158 +The source code for a work means the preferred form of the work for
   2.159 +making modifications to it.  For an executable work, complete source
   2.160 +code means all the source code for all modules it contains, plus any
   2.161 +associated interface definition files, plus the scripts used to
   2.162 +control compilation and installation of the executable.  However, as a
   2.163 +special exception, the source code distributed need not include
   2.164 +anything that is normally distributed (in either source or binary
   2.165 +form) with the major components (compiler, kernel, and so on) of the
   2.166 +operating system on which the executable runs, unless that component
   2.167 +itself accompanies the executable.
   2.168 +
   2.169 +If distribution of executable or object code is made by offering
   2.170 +access to copy from a designated place, then offering equivalent
   2.171 +access to copy the source code from the same place counts as
   2.172 +distribution of the source code, even though third parties are not
   2.173 +compelled to copy the source along with the object code.
   2.174 +
   2.175 +  4. You may not copy, modify, sublicense, or distribute the Program
   2.176 +except as expressly provided under this License.  Any attempt
   2.177 +otherwise to copy, modify, sublicense or distribute the Program is
   2.178 +void, and will automatically terminate your rights under this License.
   2.179 +However, parties who have received copies, or rights, from you under
   2.180 +this License will not have their licenses terminated so long as such
   2.181 +parties remain in full compliance.
   2.182 +
   2.183 +  5. You are not required to accept this License, since you have not
   2.184 +signed it.  However, nothing else grants you permission to modify or
   2.185 +distribute the Program or its derivative works.  These actions are
   2.186 +prohibited by law if you do not accept this License.  Therefore, by
   2.187 +modifying or distributing the Program (or any work based on the
   2.188 +Program), you indicate your acceptance of this License to do so, and
   2.189 +all its terms and conditions for copying, distributing or modifying
   2.190 +the Program or works based on it.
   2.191 +
   2.192 +  6. Each time you redistribute the Program (or any work based on the
   2.193 +Program), the recipient automatically receives a license from the
   2.194 +original licensor to copy, distribute or modify the Program subject to
   2.195 +these terms and conditions.  You may not impose any further
   2.196 +restrictions on the recipients' exercise of the rights granted herein.
   2.197 +You are not responsible for enforcing compliance by third parties to
   2.198 +this License.
   2.199 +
   2.200 +  7. If, as a consequence of a court judgment or allegation of patent
   2.201 +infringement or for any other reason (not limited to patent issues),
   2.202 +conditions are imposed on you (whether by court order, agreement or
   2.203 +otherwise) that contradict the conditions of this License, they do not
   2.204 +excuse you from the conditions of this License.  If you cannot
   2.205 +distribute so as to satisfy simultaneously your obligations under this
   2.206 +License and any other pertinent obligations, then as a consequence you
   2.207 +may not distribute the Program at all.  For example, if a patent
   2.208 +license would not permit royalty-free redistribution of the Program by
   2.209 +all those who receive copies directly or indirectly through you, then
   2.210 +the only way you could satisfy both it and this License would be to
   2.211 +refrain entirely from distribution of the Program.
   2.212 +
   2.213 +If any portion of this section is held invalid or unenforceable under
   2.214 +any particular circumstance, the balance of the section is intended to
   2.215 +apply and the section as a whole is intended to apply in other
   2.216 +circumstances.
   2.217 +
   2.218 +It is not the purpose of this section to induce you to infringe any
   2.219 +patents or other property right claims or to contest validity of any
   2.220 +such claims; this section has the sole purpose of protecting the
   2.221 +integrity of the free software distribution system, which is
   2.222 +implemented by public license practices.  Many people have made
   2.223 +generous contributions to the wide range of software distributed
   2.224 +through that system in reliance on consistent application of that
   2.225 +system; it is up to the author/donor to decide if he or she is willing
   2.226 +to distribute software through any other system and a licensee cannot
   2.227 +impose that choice.
   2.228 +
   2.229 +This section is intended to make thoroughly clear what is believed to
   2.230 +be a consequence of the rest of this License.
   2.231 +
   2.232 +  8. If the distribution and/or use of the Program is restricted in
   2.233 +certain countries either by patents or by copyrighted interfaces, the
   2.234 +original copyright holder who places the Program under this License
   2.235 +may add an explicit geographical distribution limitation excluding
   2.236 +those countries, so that distribution is permitted only in or among
   2.237 +countries not thus excluded.  In such case, this License incorporates
   2.238 +the limitation as if written in the body of this License.
   2.239 +
   2.240 +  9. The Free Software Foundation may publish revised and/or new versions
   2.241 +of the General Public License from time to time.  Such new versions will
   2.242 +be similar in spirit to the present version, but may differ in detail to
   2.243 +address new problems or concerns.
   2.244 +
   2.245 +Each version is given a distinguishing version number.  If the Program
   2.246 +specifies a version number of this License which applies to it and "any
   2.247 +later version", you have the option of following the terms and conditions
   2.248 +either of that version or of any later version published by the Free
   2.249 +Software Foundation.  If the Program does not specify a version number of
   2.250 +this License, you may choose any version ever published by the Free Software
   2.251 +Foundation.
   2.252 +
   2.253 +  10. If you wish to incorporate parts of the Program into other free
   2.254 +programs whose distribution conditions are different, write to the author
   2.255 +to ask for permission.  For software which is copyrighted by the Free
   2.256 +Software Foundation, write to the Free Software Foundation; we sometimes
   2.257 +make exceptions for this.  Our decision will be guided by the two goals
   2.258 +of preserving the free status of all derivatives of our free software and
   2.259 +of promoting the sharing and reuse of software generally.
   2.260 +
   2.261 +			    NO WARRANTY
   2.262 +
   2.263 +  11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
   2.264 +FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW.  EXCEPT WHEN
   2.265 +OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
   2.266 +PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
   2.267 +OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
   2.268 +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.  THE ENTIRE RISK AS
   2.269 +TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.  SHOULD THE
   2.270 +PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
   2.271 +REPAIR OR CORRECTION.
   2.272 +
   2.273 +  12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
   2.274 +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
   2.275 +REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
   2.276 +INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
   2.277 +OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
   2.278 +TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
   2.279 +YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
   2.280 +PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
   2.281 +POSSIBILITY OF SUCH DAMAGES.
   2.282 +
   2.283 +		     END OF TERMS AND CONDITIONS
   2.284 +
   2.285 +	    How to Apply These Terms to Your New Programs
   2.286 +
   2.287 +  If you develop a new program, and you want it to be of the greatest
   2.288 +possible use to the public, the best way to achieve this is to make it
   2.289 +free software which everyone can redistribute and change under these terms.
   2.290 +
   2.291 +  To do so, attach the following notices to the program.  It is safest
   2.292 +to attach them to the start of each source file to most effectively
   2.293 +convey the exclusion of warranty; and each file should have at least
   2.294 +the "copyright" line and a pointer to where the full notice is found.
   2.295 +
   2.296 +    <one line to give the program's name and a brief idea of what it does.>
   2.297 +    Copyright (C) <year>  <name of author>
   2.298 +
   2.299 +    This program is free software; you can redistribute it and/or modify
   2.300 +    it under the terms of the GNU General Public License as published by
   2.301 +    the Free Software Foundation; either version 2 of the License, or
   2.302 +    (at your option) any later version.
   2.303 +
   2.304 +    This program is distributed in the hope that it will be useful,
   2.305 +    but WITHOUT ANY WARRANTY; without even the implied warranty of
   2.306 +    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
   2.307 +    GNU General Public License for more details.
   2.308 +
   2.309 +    You should have received a copy of the GNU General Public License
   2.310 +    along with this program; if not, write to the Free Software
   2.311 +    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
   2.312 +
   2.313 +
   2.314 +Also add information on how to contact you by electronic and paper mail.
   2.315 +
   2.316 +If the program is interactive, make it output a short notice like this
   2.317 +when it starts in an interactive mode:
   2.318 +
   2.319 +    Gnomovision version 69, Copyright (C) year  name of author
   2.320 +    Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
   2.321 +    This is free software, and you are welcome to redistribute it
   2.322 +    under certain conditions; type `show c' for details.
   2.323 +
   2.324 +The hypothetical commands `show w' and `show c' should show the appropriate
   2.325 +parts of the General Public License.  Of course, the commands you use may
   2.326 +be called something other than `show w' and `show c'; they could even be
   2.327 +mouse-clicks or menu items--whatever suits your program.
   2.328 +
   2.329 +You should also get your employer (if you work as a programmer) or your
   2.330 +school, if any, to sign a "copyright disclaimer" for the program, if
   2.331 +necessary.  Here is a sample; alter the names:
   2.332 +
   2.333 +  Yoyodyne, Inc., hereby disclaims all copyright interest in the program
   2.334 +  `Gnomovision' (which makes passes at compilers) written by James Hacker.
   2.335 +
   2.336 +  <signature of Ty Coon>, 1 April 1989
   2.337 +  Ty Coon, President of Vice
   2.338 +
   2.339 +This General Public License does not permit incorporating your program into
   2.340 +proprietary programs.  If your program is a subroutine library, you may
   2.341 +consider it more useful to permit linking proprietary applications with the
   2.342 +library.  If this is what you want to do, use the GNU Library General
   2.343 +Public License instead of this License.
     3.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     3.2 +++ b/ChangeLog	Sat Feb 20 21:18:28 2010 -0800
     3.3 @@ -0,0 +1,244 @@
     3.4 +$Id: ChangeLog,v 1.33 2006/08/06 17:26:39 hexwab Exp $
     3.5 +
     3.6 +Gnutella 0.0.11:
     3.7 +
     3.8 +	* Made SHA1 implementation work correctly on 64 bit machines.
     3.9 +
    3.10 +	* Create new client GUID on each startup to prevent stupid packagers
    3.11 +	  from hurting the network.
    3.12 +
    3.13 +	* Disable the timebomb once and for all.
    3.14 +	
    3.15 +Gnutella 0.0.10.1:
    3.16 +
    3.17 +    * Added additional revision digit to version number so we can release
    3.18 +      packages with updated GT_RELEASE_DATE if nothing else has changed.
    3.19 +
    3.20 +    * Increased web cache disabling to 365 days after built and complete
    3.21 +      shutdown to 1.5 years.
    3.22 +
    3.23 +Gnutella 0.0.10:
    3.24 +
    3.25 +    * Disconnect idle nodes that don't reply to pings.
    3.26 +
    3.27 +    * Support Vendor Messages.
    3.28 +
    3.29 +    * Support ConnectBack vendor message for better firewalled status
    3.30 +      detection.
    3.31 +
    3.32 +    * Slightly improved the random number seed.
    3.33 +
    3.34 +    * Send an empty error page when the remote side supports queueing.
    3.35 +
    3.36 +    * All searches now timeout after at most 10 minutes.
    3.37 +
    3.38 +    * Only use the full http:// URL in GWebcache requests when using a proxy
    3.39 +      (see RFC 2616 (HTTP/1.1) for further information).
    3.40 +
    3.41 +    * Support outgoing compression of message streams.
    3.42 +
    3.43 +    * Drop "urn:" trailer from queries sent.
    3.44 +
    3.45 +    * Send full filename in PUSH uploads; seems LimeWire requires it.
    3.46 +
    3.47 +    * Support p->share_hide/show for hiding shares from other nodes with
    3.48 +      a HopsFlow message, allowing them to be efficiently un/re-shared.
    3.49 +
    3.50 +    * Basic support for sending GGEP blocks.
    3.51 +
    3.52 +    * Change "really-old" auto-deactivation to silent failure to avoid
    3.53 +      creating surprises for people who don't care.
    3.54 +
    3.55 +    * Support push proxies:  put a GGEP block containing the IP address of
    3.56 +      some servers we're connected to in order to improve upload performance
    3.57 +      of firewalled nodes.
    3.58 +
    3.59 +    * Ban webcaches that resolve to local IP addresses.
    3.60 +
    3.61 +Gnutella 0.0.9.2:
    3.62 +
    3.63 +    * Fix file descriptor leak in file_cache.c that's been around for a while
    3.64 +      but was made worse by syncing the nodes files every so often.
    3.65 +
    3.66 +    * Don't potentially poll the CPU if the remote zlib stream is called with
    3.67 +      Z_FINISH.
    3.68 +
    3.69 +Gnutella 0.0.9.1:
    3.70 +
    3.71 +    * Remove checking for -lresolv in configure.
    3.72 +
    3.73 +Gnutella 0.0.9:
    3.74 +
    3.75 +    * Fix compile problem with 0.0.8 on big-endian platforms.
    3.76 +
    3.77 +    * Deactivate the plugin if it's more than one year old.
    3.78 +
    3.79 +    * Close all searches when plugin is unloaded.
    3.80 +
    3.81 +Gnutella 0.0.8:
    3.82 +
    3.83 +    * Trim the node list every so often to prevent it from growing unbounded.
    3.84 +
    3.85 +    * Fix leak of GtNode on incoming connects.
    3.86 +
    3.87 +    * No longer reply to queries marked with the same GUID.
    3.88 +
    3.89 +    * Fix bug in GWebCache code where replies got discarded, as well as
    3.90 +      some miscellaneous bugs in GWebCache code, and ban caches that
    3.91 +      fail DNS lookups.
    3.92 +
    3.93 +    * Updated list of GWebCaches.
    3.94 +
    3.95 +    * Fix metadata parsing bugs where the metadata was discarded.
    3.96 +
    3.97 +    * Removed questionably-bad hosts from ban-list.
    3.98 +
    3.99 +    * Support new Source URL format: Gnutella:?ip=..&port=...
   3.100 +
   3.101 +    * Timeout push requests to monopolize Chunks less so that Chunks
   3.102 +      will get trapped on inactive Sources less often.
   3.103 +
   3.104 +    * Shorter connection timeout to monopolize Chunks less.
   3.105 +
   3.106 +Gnutella 0.0.7:
   3.107 +
   3.108 +    * Fix a compile error caused by bad prototype in a header file.
   3.109 +
   3.110 +    * Use a different method for calculating the number of files/total
   3.111 +      bytes shared. Some samples around the median of many pongs are taken
   3.112 +      instead of just using the average of many pongs.
   3.113 +
   3.114 +    * Ban downloaders for IP addresses in hostiles.txt and incorporate
   3.115 +      ban list from peer guardian.
   3.116 +
   3.117 +Gnutella 0.0.6:
   3.118 +
   3.119 +    * Support receive-side decompression of node streams (transmit-side
   3.120 +      compression still unimplemented).
   3.121 +
   3.122 +    * Source searching re-enabled.
   3.123 +
   3.124 +    * Preliminary support for parsing XML metadata from packets that
   3.125 +      have them (usually from LimeWire or Shareaza) using libxml. Support
   3.126 +      is disabled by default and needs --with-libxml passed to configure
   3.127 +      to enable.
   3.128 +
   3.129 +    * Keep track of file sizes/file count statistics from pongs, and
   3.130 +      approximate the number on the network (very haphazardly, I
   3.131 +      might add).
   3.132 +
   3.133 +    * Fix a potential assert failure when shares are removed.
   3.134 +
   3.135 +    * Fix bug where malformed incoming connection requests would
   3.136 +      cause CPU polling.
   3.137 +
   3.138 +    * Incrementally build a larger query-routing table until the fill
   3.139 +      ratio is 1%. Reduces bandwidth used a bit.
   3.140 +
   3.141 +    * Support active-queueing.
   3.142 +
   3.143 +    * Fix parsing of bitprint urns.
   3.144 +
   3.145 +Gnutella 0.0.5:
   3.146 +
   3.147 +    * Don't reply to our own search requests.
   3.148 +
   3.149 +    * Fix display of the time to retry when the peer we
   3.150 +      download from supplies Retry-After:
   3.151 +
   3.152 +    * Fix severe mistake in request parsing that caused almost
   3.153 +      all uploads to fail.
   3.154 +
   3.155 +    * Remove access.log support, as it has a tendency to consume
   3.156 +      too much disk space when small chunks get requested.
   3.157 +
   3.158 +Gnutella 0.0.4:
   3.159 +
   3.160 +    * Download unpausing would crash giftd. Fix it.
   3.161 +
   3.162 +    * Support requests by hpath (/audio/blah/) as well since its
   3.163 +      not too much extra code to support and useful sometimes.
   3.164 +
   3.165 +    * Compression was not enabled in configure script, enabled it.
   3.166 +
   3.167 +    * Firewalled nodes that did searches would accept results from
   3.168 +      nodes with private IPs. Fixed.
   3.169 +
   3.170 +    * Maintain a banlist of gwebcaches and add any gwebcaches
   3.171 +      that return anything but 200-series responses.
   3.172 +
   3.173 +    * Fixed Retry-After.
   3.174 +
   3.175 +Gnutella 0.0.3:
   3.176 +
   3.177 +    * Add a node cache to store nodes learned from pongs and X-Try-Ultrapeer:
   3.178 +      With this, connecting to the network should be much less ad-hoc. Also,
   3.179 +      returns such nodes in X-Try-Ultrapeer: header for other nodes.
   3.180 +
   3.181 +    * Access the gwebcaches on demand, rather then when the
   3.182 +      number of nodes is arbitrarily low.
   3.183 +
   3.184 +    * Use 4-bit QRP patches. Still needs to do incremental updates, though.
   3.185 +
   3.186 +    * Send "206 Partial Content" replies to partial requests instead of
   3.187 +      "200 OK".
   3.188 +
   3.189 +    * Support Retry-After: header.
   3.190 +
   3.191 +    * Basic static stats that assumes the network has no cycles.
   3.192 +
   3.193 +    * Only send requests by file index, rather than uri-res requests,
   3.194 +      if the previous uri-res request failed or the connection closed
   3.195 +      abruptly. Previously, they were sent randomly. Also, send these
   3.196 +      requests without url encoding, as that is more compatible.
   3.197 +
   3.198 +    * Update HTTP transfer size after we receive a GIV response, as
   3.199 +      giFT could change the size of a download request while we wait
   3.200 +      for a response from the firewalled servent.
   3.201 +
   3.202 +Gnutella 0.0.2:
   3.203 +
   3.204 +    * 0.0.1 would access the gwebcaches excessively due to an oversight
   3.205 +      that the nodes retrieved from them aren't stored because they
   3.206 +      have a vitality of 0. So, this increase in the release number should
   3.207 +      help identifying problem behaviour between releases.
   3.208 +
   3.209 +      Unfortunately, this adds a new problem in that a completely stale nodes
   3.210 +      file will keep us from connecting. This needs a redesign to access the
   3.211 +      caches if we've exhausted all other options.
   3.212 +
   3.213 +    * Much improved search timeout system that will detect when
   3.214 +      no more results for a search are likely to come back. Still need to
   3.215 +      check if any results are dropped, though.
   3.216 +
   3.217 +    * Fix leak of TCPC objects for persistent connections.
   3.218 +
   3.219 +    * Temporarily disabled locate requests because they need some kind
   3.220 +      of global queue to limit the rate at which they are produced.
   3.221 +
   3.222 +Gnutella 0.0.1:
   3.223 +
   3.224 +    * Persistent HTTP support.
   3.225 +
   3.226 +    * Eliminated most races between download_stop and push downloads.
   3.227 +      There is still the possiblity of the remote end aborting the connection
   3.228 +      before we giFT reissues a download_start request, but that can't be
   3.229 +      fixed without protocol-initiated downloads.
   3.230 +
   3.231 +    * Submit query-routing table of local shares to ultrapeers.
   3.232 +
   3.233 +    * Support for using an http proxy to access the gwebcaches (set
   3.234 +      "http/proxy" key in ~/.giFT/Gnutella/Gnutella.conf).
   3.235 +
   3.236 +    * Testable, but unstable Ultrapeer mode.
   3.237 +
   3.238 +    * Forgot to report 'Connecting' status when initiating a download.
   3.239 +
   3.240 +    * Added ChangeLog.
   3.241 +
   3.242 +    * Use a trie for storing the local shares database to improve
   3.243 +      lookup time. Memory usage still needs investigation.
   3.244 +
   3.245 +Gnutella 0.0.0:
   3.246 +
   3.247 +    * Basic support for searching, downloading, and uploading.
     4.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     4.2 +++ b/INSTALL	Sat Feb 20 21:18:28 2010 -0800
     4.3 @@ -0,0 +1,229 @@
     4.4 +Copyright (C) 1994, 1995, 1996, 1999, 2000, 2001, 2002 Free Software
     4.5 +Foundation, Inc.
     4.6 +
     4.7 +   This file is free documentation; the Free Software Foundation gives
     4.8 +unlimited permission to copy, distribute and modify it.
     4.9 +
    4.10 +Basic Installation
    4.11 +==================
    4.12 +
    4.13 +   These are generic installation instructions.
    4.14 +
    4.15 +   The `configure' shell script attempts to guess correct values for
    4.16 +various system-dependent variables used during compilation.  It uses
    4.17 +those values to create a `Makefile' in each directory of the package.
    4.18 +It may also create one or more `.h' files containing system-dependent
    4.19 +definitions.  Finally, it creates a shell script `config.status' that
    4.20 +you can run in the future to recreate the current configuration, and a
    4.21 +file `config.log' containing compiler output (useful mainly for
    4.22 +debugging `configure').
    4.23 +
    4.24 +   It can also use an optional file (typically called `config.cache'
    4.25 +and enabled with `--cache-file=config.cache' or simply `-C') that saves
    4.26 +the results of its tests to speed up reconfiguring.  (Caching is
    4.27 +disabled by default to prevent problems with accidental use of stale
    4.28 +cache files.)
    4.29 +
    4.30 +   If you need to do unusual things to compile the package, please try
    4.31 +to figure out how `configure' could check whether to do them, and mail
    4.32 +diffs or instructions to the address given in the `README' so they can
    4.33 +be considered for the next release.  If you are using the cache, and at
    4.34 +some point `config.cache' contains results you don't want to keep, you
    4.35 +may remove or edit it.
    4.36 +
    4.37 +   The file `configure.ac' (or `configure.in') is used to create
    4.38 +`configure' by a program called `autoconf'.  You only need
    4.39 +`configure.ac' if you want to change it or regenerate `configure' using
    4.40 +a newer version of `autoconf'.
    4.41 +
    4.42 +The simplest way to compile this package is:
    4.43 +
    4.44 +  1. `cd' to the directory containing the package's source code and type
    4.45 +     `./configure' to configure the package for your system.  If you're
    4.46 +     using `csh' on an old version of System V, you might need to type
    4.47 +     `sh ./configure' instead to prevent `csh' from trying to execute
    4.48 +     `configure' itself.
    4.49 +
    4.50 +     Running `configure' takes awhile.  While running, it prints some
    4.51 +     messages telling which features it is checking for.
    4.52 +
    4.53 +  2. Type `make' to compile the package.
    4.54 +
    4.55 +  3. Optionally, type `make check' to run any self-tests that come with
    4.56 +     the package.
    4.57 +
    4.58 +  4. Type `make install' to install the programs and any data files and
    4.59 +     documentation.
    4.60 +
    4.61 +  5. You can remove the program binaries and object files from the
    4.62 +     source code directory by typing `make clean'.  To also remove the
    4.63 +     files that `configure' created (so you can compile the package for
    4.64 +     a different kind of computer), type `make distclean'.  There is
    4.65 +     also a `make maintainer-clean' target, but that is intended mainly
    4.66 +     for the package's developers.  If you use it, you may have to get
    4.67 +     all sorts of other programs in order to regenerate files that came
    4.68 +     with the distribution.
    4.69 +
    4.70 +Compilers and Options
    4.71 +=====================
    4.72 +
    4.73 +   Some systems require unusual options for compilation or linking that
    4.74 +the `configure' script does not know about.  Run `./configure --help'
    4.75 +for details on some of the pertinent environment variables.
    4.76 +
    4.77 +   You can give `configure' initial values for configuration parameters
    4.78 +by setting variables in the command line or in the environment.  Here
    4.79 +is an example:
    4.80 +
    4.81 +     ./configure CC=c89 CFLAGS=-O2 LIBS=-lposix
    4.82 +
    4.83 +   *Note Defining Variables::, for more details.
    4.84 +
    4.85 +Compiling For Multiple Architectures
    4.86 +====================================
    4.87 +
    4.88 +   You can compile the package for more than one kind of computer at the
    4.89 +same time, by placing the object files for each architecture in their
    4.90 +own directory.  To do this, you must use a version of `make' that
    4.91 +supports the `VPATH' variable, such as GNU `make'.  `cd' to the
    4.92 +directory where you want the object files and executables to go and run
    4.93 +the `configure' script.  `configure' automatically checks for the
    4.94 +source code in the directory that `configure' is in and in `..'.
    4.95 +
    4.96 +   If you have to use a `make' that does not support the `VPATH'
    4.97 +variable, you have to compile the package for one architecture at a
    4.98 +time in the source code directory.  After you have installed the
    4.99 +package for one architecture, use `make distclean' before reconfiguring
   4.100 +for another architecture.
   4.101 +
   4.102 +Installation Names
   4.103 +==================
   4.104 +
   4.105 +   By default, `make install' will install the package's files in
   4.106 +`/usr/local/bin', `/usr/local/man', etc.  You can specify an
   4.107 +installation prefix other than `/usr/local' by giving `configure' the
   4.108 +option `--prefix=PATH'.
   4.109 +
   4.110 +   You can specify separate installation prefixes for
   4.111 +architecture-specific files and architecture-independent files.  If you
   4.112 +give `configure' the option `--exec-prefix=PATH', the package will use
   4.113 +PATH as the prefix for installing programs and libraries.
   4.114 +Documentation and other data files will still use the regular prefix.
   4.115 +
   4.116 +   In addition, if you use an unusual directory layout you can give
   4.117 +options like `--bindir=PATH' to specify different values for particular
   4.118 +kinds of files.  Run `configure --help' for a list of the directories
   4.119 +you can set and what kinds of files go in them.
   4.120 +
   4.121 +   If the package supports it, you can cause programs to be installed
   4.122 +with an extra prefix or suffix on their names by giving `configure' the
   4.123 +option `--program-prefix=PREFIX' or `--program-suffix=SUFFIX'.
   4.124 +
   4.125 +Optional Features
   4.126 +=================
   4.127 +
   4.128 +   Some packages pay attention to `--enable-FEATURE' options to
   4.129 +`configure', where FEATURE indicates an optional part of the package.
   4.130 +They may also pay attention to `--with-PACKAGE' options, where PACKAGE
   4.131 +is something like `gnu-as' or `x' (for the X Window System).  The
   4.132 +`README' should mention any `--enable-' and `--with-' options that the
   4.133 +package recognizes.
   4.134 +
   4.135 +   For packages that use the X Window System, `configure' can usually
   4.136 +find the X include and library files automatically, but if it doesn't,
   4.137 +you can use the `configure' options `--x-includes=DIR' and
   4.138 +`--x-libraries=DIR' to specify their locations.
   4.139 +
   4.140 +Specifying the System Type
   4.141 +==========================
   4.142 +
   4.143 +   There may be some features `configure' cannot figure out
   4.144 +automatically, but needs to determine by the type of machine the package
   4.145 +will run on.  Usually, assuming the package is built to be run on the
   4.146 +_same_ architectures, `configure' can figure that out, but if it prints
   4.147 +a message saying it cannot guess the machine type, give it the
   4.148 +`--build=TYPE' option.  TYPE can either be a short name for the system
   4.149 +type, such as `sun4', or a canonical name which has the form:
   4.150 +
   4.151 +     CPU-COMPANY-SYSTEM
   4.152 +
   4.153 +where SYSTEM can have one of these forms:
   4.154 +
   4.155 +     OS KERNEL-OS
   4.156 +
   4.157 +   See the file `config.sub' for the possible values of each field.  If
   4.158 +`config.sub' isn't included in this package, then this package doesn't
   4.159 +need to know the machine type.
   4.160 +
   4.161 +   If you are _building_ compiler tools for cross-compiling, you should
   4.162 +use the `--target=TYPE' option to select the type of system they will
   4.163 +produce code for.
   4.164 +
   4.165 +   If you want to _use_ a cross compiler, that generates code for a
   4.166 +platform different from the build platform, you should specify the
   4.167 +"host" platform (i.e., that on which the generated programs will
   4.168 +eventually be run) with `--host=TYPE'.
   4.169 +
   4.170 +Sharing Defaults
   4.171 +================
   4.172 +
   4.173 +   If you want to set default values for `configure' scripts to share,
   4.174 +you can create a site shell script called `config.site' that gives
   4.175 +default values for variables like `CC', `cache_file', and `prefix'.
   4.176 +`configure' looks for `PREFIX/share/config.site' if it exists, then
   4.177 +`PREFIX/etc/config.site' if it exists.  Or, you can set the
   4.178 +`CONFIG_SITE' environment variable to the location of the site script.
   4.179 +A warning: not all `configure' scripts look for a site script.
   4.180 +
   4.181 +Defining Variables
   4.182 +==================
   4.183 +
   4.184 +   Variables not defined in a site shell script can be set in the
   4.185 +environment passed to `configure'.  However, some packages may run
   4.186 +configure again during the build, and the customized values of these
   4.187 +variables may be lost.  In order to avoid this problem, you should set
   4.188 +them in the `configure' command line, using `VAR=value'.  For example:
   4.189 +
   4.190 +     ./configure CC=/usr/local2/bin/gcc
   4.191 +
   4.192 +will cause the specified gcc to be used as the C compiler (unless it is
   4.193 +overridden in the site shell script).
   4.194 +
   4.195 +`configure' Invocation
   4.196 +======================
   4.197 +
   4.198 +   `configure' recognizes the following options to control how it
   4.199 +operates.
   4.200 +
   4.201 +`--help'
   4.202 +`-h'
   4.203 +     Print a summary of the options to `configure', and exit.
   4.204 +
   4.205 +`--version'
   4.206 +`-V'
   4.207 +     Print the version of Autoconf used to generate the `configure'
   4.208 +     script, and exit.
   4.209 +
   4.210 +`--cache-file=FILE'
   4.211 +     Enable the cache: use and save the results of the tests in FILE,
   4.212 +     traditionally `config.cache'.  FILE defaults to `/dev/null' to
   4.213 +     disable caching.
   4.214 +
   4.215 +`--config-cache'
   4.216 +`-C'
   4.217 +     Alias for `--cache-file=config.cache'.
   4.218 +
   4.219 +`--quiet'
   4.220 +`--silent'
   4.221 +`-q'
   4.222 +     Do not print messages saying which checks are being made.  To
   4.223 +     suppress all normal output, redirect it to `/dev/null' (any error
   4.224 +     messages will still be shown).
   4.225 +
   4.226 +`--srcdir=DIR'
   4.227 +     Look for the package's source code in directory DIR.  Usually
   4.228 +     `configure' can determine that directory automatically.
   4.229 +
   4.230 +`configure' also accepts some other, not widely useful, options.  Run
   4.231 +`configure --help' for more details.
   4.232 +
     5.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     5.2 +++ b/Make.msvc	Sat Feb 20 21:18:28 2010 -0800
     5.3 @@ -0,0 +1,191 @@
     5.4 +# $Id: Make.msvc,v 1.11 2006/08/06 17:31:22 mkern Exp $
     5.5 +
     5.6 +GT_MAJOR_VERSION = 0
     5.7 +GT_MINOR_VERSION = 0
     5.8 +GT_MICRO_VERSION = 11
     5.9 +GT_EXTRA_VERSION = 
    5.10 +VERSION = $(GT_MAJOR_VERSION).$(GT_MINOR_VERSION).$(GT_MICRO_VERSION)
    5.11 +
    5.12 +
    5.13 +O = .obj
    5.14 +
    5.15 +
    5.16 +# dynamic by default
    5.17 +!if !defined(static) && !defined(STATIC)
    5.18 +DYNAMIC=1
    5.19 +!endif
    5.20 +
    5.21 +
    5.22 +##########################
    5.23 +# release / debug
    5.24 +##########################
    5.25 +
    5.26 +
    5.27 +!if defined(release) || defined(RELEASE)
    5.28 +
    5.29 +
    5.30 +D=
    5.31 +DEXT=
    5.32 +
    5.33 +
    5.34 +CFLAGS  = $(CFLAGS)  -Ox -G6
    5.35 +LDFLAGS = $(LDFLAGS) -release -FORCE:UNRESOLVED
    5.36 +
    5.37 +#DEFS    = $(DEFS)    -DNDEBUG -UDEBUG -U_DEBUG
    5.38 +DEFS    = $(DEFS)    -D_DEBUG -DDEBUG -UNDEBUG -D_WALL
    5.39 +
    5.40 +
    5.41 +!else # !defined(release) && !defined(RELEASE)
    5.42 +
    5.43 +
    5.44 +D=d
    5.45 +DEXT=d
    5.46 +
    5.47 +
    5.48 +CFLAGS  = $(CFLAGS)  -Od -Gm -GZ -W3 -Zi
    5.49 +DEFS    = $(DEFS)    -D_DEBUG -DDEBUG -UNDEBUG -D_WALL
    5.50 +LDFLAGS = $(LDFLAGS) -debug
    5.51 +
    5.52 +
    5.53 +!endif # defined(release) || defined(RELEASE)
    5.54 +
    5.55 +
    5.56 +##########################
    5.57 +# static / dynamic linking
    5.58 +##########################
    5.59 +
    5.60 +
    5.61 +!if defined(dynamic) || defined(DYNAMIC)
    5.62 +
    5.63 +CFLAGS	= $(CFLAGS) -MD$(D) -DUSE_LTDL
    5.64 +
    5.65 +!else # !(defined(dynamic) || defined(DYNAMIC))
    5.66 +
    5.67 +CFLAGS   = $(CFLAGS) -MT$(D) -UUSE_LTDL
    5.68 +
    5.69 +!endif # defined(dynamic) || defined(DYNAMIC)
    5.70 +
    5.71 +
    5.72 +##########################
    5.73 +# libxml2 support
    5.74 +##########################
    5.75 +
    5.76 +!if defined(libxml2) || defined(LIBXML2) || defined(xml) || defined(XML)
    5.77 +
    5.78 +
    5.79 +!if "$(LIBXML2_ROOT)" == ""
    5.80 +
    5.81 +LIBXML2_ROOT=$(BUILD_ROOT)\libxml2
    5.82 +
    5.83 +!endif # "$(LIBXML2_ROOT)" == ""
    5.84 +
    5.85 +!if !exists($(LIBXML2_ROOT))
    5.86 +
    5.87 +!error Directory $(LIBXML2_ROOT) not found!
    5.88 +
    5.89 +!endif # !exists($(LIBXML2_ROOT))
    5.90 +
    5.91 +
    5.92 +INCLUDES = $(INCLUDES) -I$(LIBXML2_ROOT)\include
    5.93 +DEFS     = $(DEFS)     -DUSE_LIBXML2
    5.94 +LDFLAGS  = $(LDFLAGS)  -libpath:"$(LIBXML2_ROOT)\win32\bin.msvc"
    5.95 +LIBS     = $(LIBS)      libxml2.lib
    5.96 +
    5.97 +
    5.98 +!if defined(dynamic) || defined(DYNAMIC)
    5.99 +
   5.100 +DIST_DLLS = $(DIST_DLLS) $(LIBXML2_ROOT)\win32\bin.msvc\libxml2.dll
   5.101 +
   5.102 +!endif #  defined(dynamic) || defined(DYNAMIC)
   5.103 +
   5.104 +
   5.105 +!endif # defined(libxml2) || defined(LIBXML2) || defined(xml) || defined(XML)
   5.106 +
   5.107 +
   5.108 +##########################
   5.109 +# zlib support
   5.110 +##########################
   5.111 +
   5.112 +
   5.113 +!if defined(zlib) || defined(ZLIB)
   5.114 +
   5.115 +
   5.116 +!if "$(ZLIB_ROOT)" == ""
   5.117 +
   5.118 +
   5.119 +ZLIB_ROOT=$(BUILD_ROOT)\zlib
   5.120 +
   5.121 +
   5.122 +!endif # "$(ZLIB_ROOT)" == ""
   5.123 +
   5.124 +
   5.125 +!if !exists($(ZLIB_ROOT))
   5.126 +
   5.127 +
   5.128 +!error Directory $(ZLIB_ROOT) not found!
   5.129 +
   5.130 +
   5.131 +!endif # !exists($(ZLIB_ROOT))
   5.132 +
   5.133 +
   5.134 +INCLUDES = $(INCLUDES) -I$(ZLIB_ROOT)
   5.135 +DEFS     = $(DEFS)     -DUSE_ZLIB
   5.136 +LDFLAGS  = $(LDFLAGS)  -libpath:"$(ZLIB_ROOT)"
   5.137 +LIBS     = $(LIBS)     zlib.lib
   5.138 +
   5.139 +
   5.140 +!endif # defined(zlib) || defined(ZLIB)
   5.141 +
   5.142 +
   5.143 +##########################
   5.144 +# general
   5.145 +##########################
   5.146 +
   5.147 +
   5.148 +# temporary till Gnutella doesn't require giFT symbols anymore
   5.149 +GIFT_LIB      		= giFT$(DEXT).lib
   5.150 +GIFT_DLL      		= giFT$(DEXT).dll
   5.151 +GIFT_EXE   			= giFT$(DEXT).exe
   5.152 +
   5.153 +
   5.154 +LIBGIFT_LIB      	= libgiFT$(DEXT).lib
   5.155 +LIBGIFT_DLL      	= libgiFT$(DEXT).dll
   5.156 +LIBGIFT_STATIC   	= libgiFTstatic$(DEXT).lib
   5.157 +LIBGIFTPROTO_LIB	= libgiFTproto$(DEXT).lib
   5.158 +LIBGIFTPROTO_DLL	= libgiFTproto$(DEXT).dll
   5.159 +LIBGIFTPROTO_STATIC	= libgiFTprotostatic$(DEXT).lib
   5.160 +GNUTELLA_LIB         	= Gnutella$(DEXT).lib
   5.161 +GNUTELLA_DLL         	= Gnutella.dll
   5.162 +GNUTELLA_STATIC       	= Gnutellastatic$(DEXT).lib
   5.163 +
   5.164 +
   5.165 +CFLAGS   = $(CFLAGS) -nologo
   5.166 +DEFS     = $(DEFS) -DHAVE_CONFIG_H -DWIN32 -DNO_STRICT
   5.167 +DEFS     = $(DEFS) -DGT_MAJOR_VERSION=\"$(GT_MAJOR_VERSION)\" \
   5.168 +                   -DGT_MINOR_VERSION=\"$(GT_MINOR_VERSION)\" \
   5.169 +                   -DGT_MICRO_VERSION=\"$(GT_MICRO_VERSION)\" \
   5.170 +                   -DGT_EXTRA_VERSION=\"$(GT_EXTRA_VERSION)\"
   5.171 +
   5.172 +
   5.173 +INCLUDES = -I$(BUILD_ROOT) -I$(BUILD_ROOT)\libgift\win32 $(INCLUDES)
   5.174 +
   5.175 +
   5.176 +LDFLAGS  = $(LDFLAGS) -nologo -version:$(VERSION)
   5.177 +LDFLAGS  = $(LDFLAGS) -libpath:"$(BUILD_ROOT)\libgift" -libpath:"$(BUILD_ROOT)\libgift\proto"
   5.178 +
   5.179 +
   5.180 +LIBS     = $(LIBS) wsock32.lib
   5.181 +
   5.182 +
   5.183 +DEFS     = $(DEFS) -D_WINDOWS -U_CONSOLE
   5.184 +LDFLAGS  = $(LDFLAGS) /subsystem:windows
   5.185 +
   5.186 +
   5.187 +##########################
   5.188 +# tools
   5.189 +##########################
   5.190 +
   5.191 +
   5.192 +CC = cl
   5.193 +LD = link
   5.194 +LT = lib
     6.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     6.2 +++ b/Makefile.am	Sat Feb 20 21:18:28 2010 -0800
     6.3 @@ -0,0 +1,21 @@
     6.4 +# $Id: Makefile.am,v 1.19 2005/01/04 14:35:11 mkern Exp $
     6.5 +###############################################################################
     6.6 +
     6.7 +# Flags to pass to aclocal when it is run automatically by make
     6.8 +ACLOCAL_AMFLAGS = -I m4
     6.9 +
    6.10 +SUBDIRS = \
    6.11 +	m4 \
    6.12 +	data \
    6.13 +	src
    6.14 +
    6.15 +EXTRA_DIST = \
    6.16 +	gnutella.spec \
    6.17 +	autogen.sh \
    6.18 +	Makefile.msvc \
    6.19 +	Make.msvc
    6.20 +
    6.21 +###############################################################################
    6.22 +
    6.23 +rpm: dist
    6.24 +	rpmbuild -ta $(PACKAGE)-$(VERSION).tar.gz
     7.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     7.2 +++ b/Makefile.in	Sat Feb 20 21:18:28 2010 -0800
     7.3 @@ -0,0 +1,589 @@
     7.4 +# Makefile.in generated by automake 1.7.9 from Makefile.am.
     7.5 +# @configure_input@
     7.6 +
     7.7 +# Copyright 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003
     7.8 +# Free Software Foundation, Inc.
     7.9 +# This Makefile.in is free software; the Free Software Foundation
    7.10 +# gives unlimited permission to copy and/or distribute it,
    7.11 +# with or without modifications, as long as this notice is preserved.
    7.12 +
    7.13 +# This program is distributed in the hope that it will be useful,
    7.14 +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
    7.15 +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
    7.16 +# PARTICULAR PURPOSE.
    7.17 +
    7.18 +@SET_MAKE@
    7.19 +
    7.20 +# $Id: Makefile.am,v 1.19 2005/01/04 14:35:11 mkern Exp $
    7.21 +###############################################################################
    7.22 +
    7.23 +srcdir = @srcdir@
    7.24 +top_srcdir = @top_srcdir@
    7.25 +VPATH = @srcdir@
    7.26 +pkgdatadir = $(datadir)/@PACKAGE@
    7.27 +pkglibdir = $(libdir)/@PACKAGE@
    7.28 +pkgincludedir = $(includedir)/@PACKAGE@
    7.29 +top_builddir = .
    7.30 +
    7.31 +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
    7.32 +INSTALL = @INSTALL@
    7.33 +install_sh_DATA = $(install_sh) -c -m 644
    7.34 +install_sh_PROGRAM = $(install_sh) -c
    7.35 +install_sh_SCRIPT = $(install_sh) -c
    7.36 +INSTALL_HEADER = $(INSTALL_DATA)
    7.37 +transform = $(program_transform_name)
    7.38 +NORMAL_INSTALL = :
    7.39 +PRE_INSTALL = :
    7.40 +POST_INSTALL = :
    7.41 +NORMAL_UNINSTALL = :
    7.42 +PRE_UNINSTALL = :
    7.43 +POST_UNINSTALL = :
    7.44 +host_triplet = @host@
    7.45 +ACLOCAL = @ACLOCAL@
    7.46 +AMDEP_FALSE = @AMDEP_FALSE@
    7.47 +AMDEP_TRUE = @AMDEP_TRUE@
    7.48 +AMTAR = @AMTAR@
    7.49 +AR = @AR@
    7.50 +AUTOCONF = @AUTOCONF@
    7.51 +AUTOHEADER = @AUTOHEADER@
    7.52 +AUTOMAKE = @AUTOMAKE@
    7.53 +AWK = @AWK@
    7.54 +CC = @CC@
    7.55 +CCDEPMODE = @CCDEPMODE@
    7.56 +CFLAGS = @CFLAGS@
    7.57 +CPP = @CPP@
    7.58 +CPPFLAGS = @CPPFLAGS@
    7.59 +CXX = @CXX@
    7.60 +CXXCPP = @CXXCPP@
    7.61 +CXXDEPMODE = @CXXDEPMODE@
    7.62 +CXXFLAGS = @CXXFLAGS@
    7.63 +CYGPATH_W = @CYGPATH_W@
    7.64 +DEFS = @DEFS@
    7.65 +DEPDIR = @DEPDIR@
    7.66 +ECHO = @ECHO@
    7.67 +ECHO_C = @ECHO_C@
    7.68 +ECHO_N = @ECHO_N@
    7.69 +ECHO_T = @ECHO_T@
    7.70 +EGREP = @EGREP@
    7.71 +EXEEXT = @EXEEXT@
    7.72 +F77 = @F77@
    7.73 +FFLAGS = @FFLAGS@
    7.74 +GNUTELLA_CFLAGS = @GNUTELLA_CFLAGS@
    7.75 +GNUTELLA_LIBS = @GNUTELLA_LIBS@
    7.76 +INSTALL_DATA = @INSTALL_DATA@
    7.77 +INSTALL_PROGRAM = @INSTALL_PROGRAM@
    7.78 +INSTALL_SCRIPT = @INSTALL_SCRIPT@
    7.79 +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
    7.80 +LDFLAGS = @LDFLAGS@
    7.81 +LIBOBJS = @LIBOBJS@
    7.82 +LIBS = @LIBS@
    7.83 +LIBTOOL = @LIBTOOL@
    7.84 +LIBXML2_CFLAGS = @LIBXML2_CFLAGS@
    7.85 +LIBXML2_LIBS = @LIBXML2_LIBS@
    7.86 +LN_S = @LN_S@
    7.87 +LTLIBOBJS = @LTLIBOBJS@
    7.88 +MAINT = @MAINT@
    7.89 +MAINTAINER_MODE_FALSE = @MAINTAINER_MODE_FALSE@
    7.90 +MAINTAINER_MODE_TRUE = @MAINTAINER_MODE_TRUE@
    7.91 +MAKEINFO = @MAKEINFO@
    7.92 +OBJEXT = @OBJEXT@
    7.93 +PACKAGE = @PACKAGE@
    7.94 +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
    7.95 +PACKAGE_NAME = @PACKAGE_NAME@
    7.96 +PACKAGE_STRING = @PACKAGE_STRING@
    7.97 +PACKAGE_TARNAME = @PACKAGE_TARNAME@
    7.98 +PACKAGE_VERSION = @PACKAGE_VERSION@
    7.99 +PATH_SEPARATOR = @PATH_SEPARATOR@
   7.100 +PKG_CONFIG = @PKG_CONFIG@
   7.101 +PLUGIN_LDFLAGS = @PLUGIN_LDFLAGS@
   7.102 +RANLIB = @RANLIB@
   7.103 +SET_MAKE = @SET_MAKE@
   7.104 +SHELL = @SHELL@
   7.105 +STRIP = @STRIP@
   7.106 +USE_ZLIB = @USE_ZLIB@
   7.107 +VERSION = @VERSION@
   7.108 +XML2_CONFIG = @XML2_CONFIG@
   7.109 +ac_ct_AR = @ac_ct_AR@
   7.110 +ac_ct_CC = @ac_ct_CC@
   7.111 +ac_ct_CXX = @ac_ct_CXX@
   7.112 +ac_ct_F77 = @ac_ct_F77@
   7.113 +ac_ct_RANLIB = @ac_ct_RANLIB@
   7.114 +ac_ct_STRIP = @ac_ct_STRIP@
   7.115 +am__fastdepCC_FALSE = @am__fastdepCC_FALSE@
   7.116 +am__fastdepCC_TRUE = @am__fastdepCC_TRUE@
   7.117 +am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@
   7.118 +am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@
   7.119 +am__include = @am__include@
   7.120 +am__leading_dot = @am__leading_dot@
   7.121 +am__quote = @am__quote@
   7.122 +bindir = @bindir@
   7.123 +build = @build@
   7.124 +build_alias = @build_alias@
   7.125 +build_cpu = @build_cpu@
   7.126 +build_os = @build_os@
   7.127 +build_vendor = @build_vendor@
   7.128 +datadir = @datadir@
   7.129 +exec_prefix = @exec_prefix@
   7.130 +host = @host@
   7.131 +host_alias = @host_alias@
   7.132 +host_cpu = @host_cpu@
   7.133 +host_os = @host_os@
   7.134 +host_vendor = @host_vendor@
   7.135 +includedir = @includedir@
   7.136 +infodir = @infodir@
   7.137 +install_sh = @install_sh@
   7.138 +libdir = @libdir@
   7.139 +libexecdir = @libexecdir@
   7.140 +localstatedir = @localstatedir@
   7.141 +mandir = @mandir@
   7.142 +oldincludedir = @oldincludedir@
   7.143 +prefix = @prefix@
   7.144 +program_transform_name = @program_transform_name@
   7.145 +sbindir = @sbindir@
   7.146 +sharedstatedir = @sharedstatedir@
   7.147 +sysconfdir = @sysconfdir@
   7.148 +target_alias = @target_alias@
   7.149 +
   7.150 +# Flags to pass to aclocal when it is run automatically by make
   7.151 +ACLOCAL_AMFLAGS = -I m4
   7.152 +
   7.153 +SUBDIRS = \
   7.154 +	m4 \
   7.155 +	data \
   7.156 +	src
   7.157 +
   7.158 +
   7.159 +EXTRA_DIST = \
   7.160 +	gnutella.spec \
   7.161 +	autogen.sh \
   7.162 +	Makefile.msvc \
   7.163 +	Make.msvc
   7.164 +
   7.165 +subdir = .
   7.166 +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
   7.167 +mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
   7.168 +CONFIG_HEADER = config.h
   7.169 +CONFIG_CLEAN_FILES = gnutella.spec
   7.170 +DIST_SOURCES =
   7.171 +
   7.172 +RECURSIVE_TARGETS = info-recursive dvi-recursive pdf-recursive \
   7.173 +	ps-recursive install-info-recursive uninstall-info-recursive \
   7.174 +	all-recursive install-data-recursive install-exec-recursive \
   7.175 +	installdirs-recursive install-recursive uninstall-recursive \
   7.176 +	check-recursive installcheck-recursive
   7.177 +DIST_COMMON = README $(srcdir)/Makefile.in $(srcdir)/configure AUTHORS \
   7.178 +	COPYING ChangeLog INSTALL Makefile.am NEWS TODO aclocal.m4 \
   7.179 +	config.guess config.h.in config.sub configure configure.ac \
   7.180 +	depcomp gnutella.spec.in install-sh ltmain.sh missing \
   7.181 +	mkinstalldirs
   7.182 +DIST_SUBDIRS = $(SUBDIRS)
   7.183 +all: config.h
   7.184 +	$(MAKE) $(AM_MAKEFLAGS) all-recursive
   7.185 +
   7.186 +.SUFFIXES:
   7.187 +
   7.188 +am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \
   7.189 + configure.lineno
   7.190 +$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ Makefile.am  $(top_srcdir)/configure.ac $(ACLOCAL_M4)
   7.191 +	cd $(top_srcdir) && \
   7.192 +	  $(AUTOMAKE) --gnu  Makefile
   7.193 +Makefile: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.in  $(top_builddir)/config.status
   7.194 +	cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe)
   7.195 +
   7.196 +$(top_builddir)/config.status: $(srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
   7.197 +	$(SHELL) ./config.status --recheck
   7.198 +$(srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(srcdir)/configure.ac $(ACLOCAL_M4) $(CONFIGURE_DEPENDENCIES)
   7.199 +	cd $(srcdir) && $(AUTOCONF)
   7.200 +
   7.201 +$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ configure.ac m4/gift-pkgconfig.m4 m4/gift-prefix.m4 m4/libxml.m4 m4/openbsd.m4 m4/zlib.m4
   7.202 +	cd $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS)
   7.203 +
   7.204 +config.h: stamp-h1
   7.205 +	@if test ! -f $@; then \
   7.206 +	  rm -f stamp-h1; \
   7.207 +	  $(MAKE) stamp-h1; \
   7.208 +	else :; fi
   7.209 +
   7.210 +stamp-h1: $(srcdir)/config.h.in $(top_builddir)/config.status
   7.211 +	@rm -f stamp-h1
   7.212 +	cd $(top_builddir) && $(SHELL) ./config.status config.h
   7.213 +
   7.214 +$(srcdir)/config.h.in: @MAINTAINER_MODE_TRUE@ $(top_srcdir)/configure.ac $(ACLOCAL_M4) 
   7.215 +	cd $(top_srcdir) && $(AUTOHEADER)
   7.216 +	touch $(srcdir)/config.h.in
   7.217 +
   7.218 +distclean-hdr:
   7.219 +	-rm -f config.h stamp-h1
   7.220 +gnutella.spec: $(top_builddir)/config.status gnutella.spec.in
   7.221 +	cd $(top_builddir) && $(SHELL) ./config.status $@
   7.222 +
   7.223 +mostlyclean-libtool:
   7.224 +	-rm -f *.lo
   7.225 +
   7.226 +clean-libtool:
   7.227 +	-rm -rf .libs _libs
   7.228 +
   7.229 +distclean-libtool:
   7.230 +	-rm -f libtool
   7.231 +uninstall-info-am:
   7.232 +
   7.233 +# This directory's subdirectories are mostly independent; you can cd
   7.234 +# into them and run `make' without going through this Makefile.
   7.235 +# To change the values of `make' variables: instead of editing Makefiles,
   7.236 +# (1) if the variable is set in `config.status', edit `config.status'
   7.237 +#     (which will cause the Makefiles to be regenerated when you run `make');
   7.238 +# (2) otherwise, pass the desired values on the `make' command line.
   7.239 +$(RECURSIVE_TARGETS):
   7.240 +	@set fnord $$MAKEFLAGS; amf=$$2; \
   7.241 +	dot_seen=no; \
   7.242 +	target=`echo $@ | sed s/-recursive//`; \
   7.243 +	list='$(SUBDIRS)'; for subdir in $$list; do \
   7.244 +	  echo "Making $$target in $$subdir"; \
   7.245 +	  if test "$$subdir" = "."; then \
   7.246 +	    dot_seen=yes; \
   7.247 +	    local_target="$$target-am"; \
   7.248 +	  else \
   7.249 +	    local_target="$$target"; \
   7.250 +	  fi; \
   7.251 +	  (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
   7.252 +	   || case "$$amf" in *=*) exit 1;; *k*) fail=yes;; *) exit 1;; esac; \
   7.253 +	done; \
   7.254 +	if test "$$dot_seen" = "no"; then \
   7.255 +	  $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \
   7.256 +	fi; test -z "$$fail"
   7.257 +
   7.258 +mostlyclean-recursive clean-recursive distclean-recursive \
   7.259 +maintainer-clean-recursive:
   7.260 +	@set fnord $$MAKEFLAGS; amf=$$2; \
   7.261 +	dot_seen=no; \
   7.262 +	case "$@" in \
   7.263 +	  distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
   7.264 +	  *) list='$(SUBDIRS)' ;; \
   7.265 +	esac; \
   7.266 +	rev=''; for subdir in $$list; do \
   7.267 +	  if test "$$subdir" = "."; then :; else \
   7.268 +	    rev="$$subdir $$rev"; \
   7.269 +	  fi; \
   7.270 +	done; \
   7.271 +	rev="$$rev ."; \
   7.272 +	target=`echo $@ | sed s/-recursive//`; \
   7.273 +	for subdir in $$rev; do \
   7.274 +	  echo "Making $$target in $$subdir"; \
   7.275 +	  if test "$$subdir" = "."; then \
   7.276 +	    local_target="$$target-am"; \
   7.277 +	  else \
   7.278 +	    local_target="$$target"; \
   7.279 +	  fi; \
   7.280 +	  (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
   7.281 +	   || case "$$amf" in *=*) exit 1;; *k*) fail=yes;; *) exit 1;; esac; \
   7.282 +	done && test -z "$$fail"
   7.283 +tags-recursive:
   7.284 +	list='$(SUBDIRS)'; for subdir in $$list; do \
   7.285 +	  test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \
   7.286 +	done
   7.287 +ctags-recursive:
   7.288 +	list='$(SUBDIRS)'; for subdir in $$list; do \
   7.289 +	  test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \
   7.290 +	done
   7.291 +
   7.292 +ETAGS = etags
   7.293 +ETAGSFLAGS =
   7.294 +
   7.295 +CTAGS = ctags
   7.296 +CTAGSFLAGS =
   7.297 +
   7.298 +tags: TAGS
   7.299 +
   7.300 +ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
   7.301 +	list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
   7.302 +	unique=`for i in $$list; do \
   7.303 +	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
   7.304 +	  done | \
   7.305 +	  $(AWK) '    { files[$$0] = 1; } \
   7.306 +	       END { for (i in files) print i; }'`; \
   7.307 +	mkid -fID $$unique
   7.308 +
   7.309 +TAGS: tags-recursive $(HEADERS) $(SOURCES) config.h.in $(TAGS_DEPENDENCIES) \
   7.310 +		$(TAGS_FILES) $(LISP)
   7.311 +	tags=; \
   7.312 +	here=`pwd`; \
   7.313 +	if (etags --etags-include --version) >/dev/null 2>&1; then \
   7.314 +	  include_option=--etags-include; \
   7.315 +	else \
   7.316 +	  include_option=--include; \
   7.317 +	fi; \
   7.318 +	list='$(SUBDIRS)'; for subdir in $$list; do \
   7.319 +	  if test "$$subdir" = .; then :; else \
   7.320 +	    test -f $$subdir/TAGS && \
   7.321 +	      tags="$$tags $$include_option=$$here/$$subdir/TAGS"; \
   7.322 +	  fi; \
   7.323 +	done; \
   7.324 +	list='$(SOURCES) $(HEADERS) config.h.in $(LISP) $(TAGS_FILES)'; \
   7.325 +	unique=`for i in $$list; do \
   7.326 +	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
   7.327 +	  done | \
   7.328 +	  $(AWK) '    { files[$$0] = 1; } \
   7.329 +	       END { for (i in files) print i; }'`; \
   7.330 +	test -z "$(ETAGS_ARGS)$$tags$$unique" \
   7.331 +	  || $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
   7.332 +	     $$tags $$unique
   7.333 +
   7.334 +ctags: CTAGS
   7.335 +CTAGS: ctags-recursive $(HEADERS) $(SOURCES) config.h.in $(TAGS_DEPENDENCIES) \
   7.336 +		$(TAGS_FILES) $(LISP)
   7.337 +	tags=; \
   7.338 +	here=`pwd`; \
   7.339 +	list='$(SOURCES) $(HEADERS) config.h.in $(LISP) $(TAGS_FILES)'; \
   7.340 +	unique=`for i in $$list; do \
   7.341 +	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
   7.342 +	  done | \
   7.343 +	  $(AWK) '    { files[$$0] = 1; } \
   7.344 +	       END { for (i in files) print i; }'`; \
   7.345 +	test -z "$(CTAGS_ARGS)$$tags$$unique" \
   7.346 +	  || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
   7.347 +	     $$tags $$unique
   7.348 +
   7.349 +GTAGS:
   7.350 +	here=`$(am__cd) $(top_builddir) && pwd` \
   7.351 +	  && cd $(top_srcdir) \
   7.352 +	  && gtags -i $(GTAGS_ARGS) $$here
   7.353 +
   7.354 +distclean-tags:
   7.355 +	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
   7.356 +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
   7.357 +
   7.358 +top_distdir = .
   7.359 +distdir = $(PACKAGE)-$(VERSION)
   7.360 +
   7.361 +am__remove_distdir = \
   7.362 +  { test ! -d $(distdir) \
   7.363 +    || { find $(distdir) -type d ! -perm -200 -exec chmod u+w {} ';' \
   7.364 +         && rm -fr $(distdir); }; }
   7.365 +
   7.366 +GZIP_ENV = --best
   7.367 +distuninstallcheck_listfiles = find . -type f -print
   7.368 +distcleancheck_listfiles = find . -type f -print
   7.369 +
   7.370 +distdir: $(DISTFILES)
   7.371 +	$(am__remove_distdir)
   7.372 +	mkdir $(distdir)
   7.373 +	$(mkinstalldirs) $(distdir)/.
   7.374 +	@srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \
   7.375 +	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \
   7.376 +	list='$(DISTFILES)'; for file in $$list; do \
   7.377 +	  case $$file in \
   7.378 +	    $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \
   7.379 +	    $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \
   7.380 +	  esac; \
   7.381 +	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
   7.382 +	  dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \
   7.383 +	  if test "$$dir" != "$$file" && test "$$dir" != "."; then \
   7.384 +	    dir="/$$dir"; \
   7.385 +	    $(mkinstalldirs) "$(distdir)$$dir"; \
   7.386 +	  else \
   7.387 +	    dir=''; \
   7.388 +	  fi; \
   7.389 +	  if test -d $$d/$$file; then \
   7.390 +	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
   7.391 +	      cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
   7.392 +	    fi; \
   7.393 +	    cp -pR $$d/$$file $(distdir)$$dir || exit 1; \
   7.394 +	  else \
   7.395 +	    test -f $(distdir)/$$file \
   7.396 +	    || cp -p $$d/$$file $(distdir)/$$file \
   7.397 +	    || exit 1; \
   7.398 +	  fi; \
   7.399 +	done
   7.400 +	list='$(SUBDIRS)'; for subdir in $$list; do \
   7.401 +	  if test "$$subdir" = .; then :; else \
   7.402 +	    test -d $(distdir)/$$subdir \
   7.403 +	    || mkdir $(distdir)/$$subdir \
   7.404 +	    || exit 1; \
   7.405 +	    (cd $$subdir && \
   7.406 +	      $(MAKE) $(AM_MAKEFLAGS) \
   7.407 +	        top_distdir="$(top_distdir)" \
   7.408 +	        distdir=../$(distdir)/$$subdir \
   7.409 +	        distdir) \
   7.410 +	      || exit 1; \
   7.411 +	  fi; \
   7.412 +	done
   7.413 +	-find $(distdir) -type d ! -perm -777 -exec chmod a+rwx {} \; -o \
   7.414 +	  ! -type d ! -perm -444 -links 1 -exec chmod a+r {} \; -o \
   7.415 +	  ! -type d ! -perm -400 -exec chmod a+r {} \; -o \
   7.416 +	  ! -type d ! -perm -444 -exec $(SHELL) $(install_sh) -c -m a+r {} {} \; \
   7.417 +	|| chmod -R a+r $(distdir)
   7.418 +dist-gzip: distdir
   7.419 +	$(AMTAR) chof - $(distdir) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz
   7.420 +	$(am__remove_distdir)
   7.421 +
   7.422 +dist-bzip2: distdir
   7.423 +	$(AMTAR) chof - $(distdir) | bzip2 -9 -c >$(distdir).tar.bz2
   7.424 +	$(am__remove_distdir)
   7.425 +
   7.426 +dist dist-all: distdir
   7.427 +	$(AMTAR) chof - $(distdir) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz
   7.428 +	$(AMTAR) chof - $(distdir) | bzip2 -9 -c >$(distdir).tar.bz2
   7.429 +	$(am__remove_distdir)
   7.430 +
   7.431 +# This target untars the dist file and tries a VPATH configuration.  Then
   7.432 +# it guarantees that the distribution is self-contained by making another
   7.433 +# tarfile.
   7.434 +distcheck: dist
   7.435 +	$(am__remove_distdir)
   7.436 +	GZIP=$(GZIP_ENV) gunzip -c $(distdir).tar.gz | $(AMTAR) xf -
   7.437 +	chmod -R a-w $(distdir); chmod a+w $(distdir)
   7.438 +	mkdir $(distdir)/_build
   7.439 +	mkdir $(distdir)/_inst
   7.440 +	chmod a-w $(distdir)
   7.441 +	dc_install_base=`$(am__cd) $(distdir)/_inst && pwd | sed -e 's,^[^:\\/]:[\\/],/,'` \
   7.442 +	  && dc_destdir="$${TMPDIR-/tmp}/am-dc-$$$$/" \
   7.443 +	  && cd $(distdir)/_build \
   7.444 +	  && ../configure --srcdir=.. --prefix="$$dc_install_base" \
   7.445 +	    $(DISTCHECK_CONFIGURE_FLAGS) \
   7.446 +	  && $(MAKE) $(AM_MAKEFLAGS) \
   7.447 +	  && $(MAKE) $(AM_MAKEFLAGS) dvi \
   7.448 +	  && $(MAKE) $(AM_MAKEFLAGS) check \
   7.449 +	  && $(MAKE) $(AM_MAKEFLAGS) install \
   7.450 +	  && $(MAKE) $(AM_MAKEFLAGS) installcheck \
   7.451 +	  && $(MAKE) $(AM_MAKEFLAGS) uninstall \
   7.452 +	  && $(MAKE) $(AM_MAKEFLAGS) distuninstallcheck_dir="$$dc_install_base" \
   7.453 +	        distuninstallcheck \
   7.454 +	  && chmod -R a-w "$$dc_install_base" \
   7.455 +	  && ({ \
   7.456 +	       (cd ../.. && $(mkinstalldirs) "$$dc_destdir") \
   7.457 +	       && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" install \
   7.458 +	       && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" uninstall \
   7.459 +	       && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" \
   7.460 +	            distuninstallcheck_dir="$$dc_destdir" distuninstallcheck; \
   7.461 +	      } || { rm -rf "$$dc_destdir"; exit 1; }) \
   7.462 +	  && rm -rf "$$dc_destdir" \
   7.463 +	  && $(MAKE) $(AM_MAKEFLAGS) dist-gzip \
   7.464 +	  && rm -f $(distdir).tar.gz \
   7.465 +	  && $(MAKE) $(AM_MAKEFLAGS) distcleancheck
   7.466 +	$(am__remove_distdir)
   7.467 +	@echo "$(distdir).tar.gz is ready for distribution" | \
   7.468 +	  sed 'h;s/./=/g;p;x;p;x'
   7.469 +distuninstallcheck:
   7.470 +	@cd $(distuninstallcheck_dir) \
   7.471 +	&& test `$(distuninstallcheck_listfiles) | wc -l` -le 1 \
   7.472 +	   || { echo "ERROR: files left after uninstall:" ; \
   7.473 +	        if test -n "$(DESTDIR)"; then \
   7.474 +	          echo "  (check DESTDIR support)"; \
   7.475 +	        fi ; \
   7.476 +	        $(distuninstallcheck_listfiles) ; \
   7.477 +	        exit 1; } >&2
   7.478 +distcleancheck: distclean
   7.479 +	@if test '$(srcdir)' = . ; then \
   7.480 +	  echo "ERROR: distcleancheck can only run from a VPATH build" ; \
   7.481 +	  exit 1 ; \
   7.482 +	fi
   7.483 +	@test `$(distcleancheck_listfiles) | wc -l` -eq 0 \
   7.484 +	  || { echo "ERROR: files left in build directory after distclean:" ; \
   7.485 +	       $(distcleancheck_listfiles) ; \
   7.486 +	       exit 1; } >&2
   7.487 +check-am: all-am
   7.488 +check: check-recursive
   7.489 +all-am: Makefile config.h
   7.490 +installdirs: installdirs-recursive
   7.491 +installdirs-am:
   7.492 +
   7.493 +install: install-recursive
   7.494 +install-exec: install-exec-recursive
   7.495 +install-data: install-data-recursive
   7.496 +uninstall: uninstall-recursive
   7.497 +
   7.498 +install-am: all-am
   7.499 +	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
   7.500 +
   7.501 +installcheck: installcheck-recursive
   7.502 +install-strip:
   7.503 +	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
   7.504 +	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
   7.505 +	  `test -z '$(STRIP)' || \
   7.506 +	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
   7.507 +mostlyclean-generic:
   7.508 +
   7.509 +clean-generic:
   7.510 +
   7.511 +distclean-generic:
   7.512 +	-rm -f $(CONFIG_CLEAN_FILES)
   7.513 +
   7.514 +maintainer-clean-generic:
   7.515 +	@echo "This command is intended for maintainers to use"
   7.516 +	@echo "it deletes files that may require special tools to rebuild."
   7.517 +clean: clean-recursive
   7.518 +
   7.519 +clean-am: clean-generic clean-libtool mostlyclean-am
   7.520 +
   7.521 +distclean: distclean-recursive
   7.522 +	-rm -f $(am__CONFIG_DISTCLEAN_FILES)
   7.523 +	-rm -f Makefile
   7.524 +distclean-am: clean-am distclean-generic distclean-hdr distclean-libtool \
   7.525 +	distclean-tags
   7.526 +
   7.527 +dvi: dvi-recursive
   7.528 +
   7.529 +dvi-am:
   7.530 +
   7.531 +info: info-recursive
   7.532 +
   7.533 +info-am:
   7.534 +
   7.535 +install-data-am:
   7.536 +
   7.537 +install-exec-am:
   7.538 +
   7.539 +install-info: install-info-recursive
   7.540 +
   7.541 +install-man:
   7.542 +
   7.543 +installcheck-am:
   7.544 +
   7.545 +maintainer-clean: maintainer-clean-recursive
   7.546 +	-rm -f $(am__CONFIG_DISTCLEAN_FILES)
   7.547 +	-rm -rf $(top_srcdir)/autom4te.cache
   7.548 +	-rm -f Makefile
   7.549 +maintainer-clean-am: distclean-am maintainer-clean-generic
   7.550 +
   7.551 +mostlyclean: mostlyclean-recursive
   7.552 +
   7.553 +mostlyclean-am: mostlyclean-generic mostlyclean-libtool
   7.554 +
   7.555 +pdf: pdf-recursive
   7.556 +
   7.557 +pdf-am:
   7.558 +
   7.559 +ps: ps-recursive
   7.560 +
   7.561 +ps-am:
   7.562 +
   7.563 +uninstall-am: uninstall-info-am
   7.564 +
   7.565 +uninstall-info: uninstall-info-recursive
   7.566 +
   7.567 +.PHONY: $(RECURSIVE_TARGETS) CTAGS GTAGS all all-am check check-am clean \
   7.568 +	clean-generic clean-libtool clean-recursive ctags \
   7.569 +	ctags-recursive dist dist-all dist-bzip2 dist-gzip distcheck \
   7.570 +	distclean distclean-generic distclean-hdr distclean-libtool \
   7.571 +	distclean-recursive distclean-tags distcleancheck distdir \
   7.572 +	distuninstallcheck dvi dvi-am dvi-recursive info info-am \
   7.573 +	info-recursive install install-am install-data install-data-am \
   7.574 +	install-data-recursive install-exec install-exec-am \
   7.575 +	install-exec-recursive install-info install-info-am \
   7.576 +	install-info-recursive install-man install-recursive \
   7.577 +	install-strip installcheck installcheck-am installdirs \
   7.578 +	installdirs-am installdirs-recursive maintainer-clean \
   7.579 +	maintainer-clean-generic maintainer-clean-recursive mostlyclean \
   7.580 +	mostlyclean-generic mostlyclean-libtool mostlyclean-recursive \
   7.581 +	pdf pdf-am pdf-recursive ps ps-am ps-recursive tags \
   7.582 +	tags-recursive uninstall uninstall-am uninstall-info-am \
   7.583 +	uninstall-info-recursive uninstall-recursive
   7.584 +
   7.585 +
   7.586 +###############################################################################
   7.587 +
   7.588 +rpm: dist
   7.589 +	rpmbuild -ta $(PACKAGE)-$(VERSION).tar.gz
   7.590 +# Tell versions [3.59,3.63) of GNU make to not export all variables.
   7.591 +# Otherwise a system limit (for SysV at least) may be exceeded.
   7.592 +.NOEXPORT:
     8.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     8.2 +++ b/Makefile.msvc	Sat Feb 20 21:18:28 2010 -0800
     8.3 @@ -0,0 +1,40 @@
     8.4 +# $Id: Makefile.msvc,v 1.12 2004/11/11 17:56:04 mkern Exp $
     8.5 +# Microsoft Visual C++ 6.0 makefile
     8.6 +# see README.msvc for usage
     8.7 +
     8.8 +!if !defined(BUILD_ROOT)
     8.9 +BUILD_ROOT=$(MAKEDIR)\..
    8.10 +!endif
    8.11 +
    8.12 +!include Make.msvc
    8.13 +
    8.14 +MAKEOPTS=-nologo -C BUILD_ROOT=$(BUILD_ROOT)
    8.15 +
    8.16 +
    8.17 +all:
    8.18 +	cd src
    8.19 +	@$(MAKE) $(MAKEOPTS) -f Makefile.msvc
    8.20 +	cd ..
    8.21 +
    8.22 +
    8.23 +clean:
    8.24 +	cd src
    8.25 +	@$(MAKE) $(MAKEOPTS) -f Makefile.msvc clean
    8.26 +	cd ..
    8.27 +
    8.28 +
    8.29 +win32-dist: all
    8.30 +	@-md $(BUILD_ROOT)\win32-dist\data\Gnutella
    8.31 +	@for %f in ($(DIST_DLLS)) DO copy %f $(BUILD_ROOT)\win32-dist
    8.32 +	@copy data\Gnutella.conf $(BUILD_ROOT)\win32-dist\data\Gnutella\Gnutella.conf
    8.33 +	@copy data\gwebcaches    $(BUILD_ROOT)\win32-dist\data\Gnutella\gwebcaches
    8.34 +	@copy data\hostiles.txt  $(BUILD_ROOT)\win32-dist\data\Gnutella\hostiles.txt
    8.35 +!if defined(dynamic) || defined(DYNAMIC)
    8.36 +# remove traling 'd' for debug builds in distro
    8.37 +	@copy src\$(GNUTELLA_DLL) $(BUILD_ROOT)\win32-dist\Gnutella.dll
    8.38 +!endif
    8.39 +
    8.40 +
    8.41 +clean-dist:
    8.42 +	@-rmdir /S $(BUILD_ROOT)\win32-dist\Gnutella
    8.43 +	@-rmdir /S $(BUILD_ROOT)\win32-dist\data\Gnutella
     9.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     9.2 +++ b/NEWS	Sat Feb 20 21:18:28 2010 -0800
     9.3 @@ -0,0 +1,1 @@
     9.4 +See ChangeLog.
    10.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    10.2 +++ b/README	Sat Feb 20 21:18:28 2010 -0800
    10.3 @@ -0,0 +1,85 @@
    10.4 +$Id: README,v 1.13 2004/02/06 02:49:09 hipnod Exp $
    10.5 +
    10.6 +Compilation & Installation
    10.7 +--------------------------
    10.8 +
    10.9 +You must install giFT before installing this plugin.
   10.10 +
   10.11 +The configure script uses pkg-config to search for giFT. If you have
   10.12 +installed giFT somewhere besides the default pkg-config lookup path, you
   10.13 +need to change the PKG_CONFIG_PATH environment variable so configure can
   10.14 +find libgift.pc.
   10.15 +
   10.16 +After installing, you should run the gift-setup script. If you want, you can
   10.17 +setup the plugin manually by adding "Gnutella" to the /main/plugins line in
   10.18 +~/.giFT/giftd.conf, like so:
   10.19 +
   10.20 +	[main]
   10.21 +	plugins = OpenFT:Gnutella
   10.22 +
   10.23 +You may also use a fully qualified path to the plugin filename:
   10.24 +
   10.25 +	[main]
   10.26 +	plugins = OpenFT:/usr/local/lib/giFT/libGnutella.la
   10.27 +
   10.28 +You can also specify the plugin on the command line:
   10.29 +
   10.30 +	$ giftd -d -p Gnutella -p OpenFT
   10.31 +
   10.32 +
   10.33 +Bootstrapping
   10.34 +-------------
   10.35 +
   10.36 +On initial startup, the plugin has to find some Gnutella nodes to connect to.
   10.37 +No default nodes are hardcoded.  Instead, there is a list of websites called
   10.38 +"GWebCaches", and a GWebCache is randomly selected and contacted to retrieve a
   10.39 +list of currently active nodes.  If these nodes are busy, they can still
   10.40 +bootstrap the plugin by informing it of more nodes to connect to, so this
   10.41 +process continues until the plugin finds some available nodes.
   10.42 +
   10.43 +This process tends to be somewhat fragile, because a GWebCache is usually only
   10.44 +contacted once for this purpose, so the GWebCache handling code in the plugin
   10.45 +runs infrequently and tends to have bugs.  If you experience problems
   10.46 +connecting, it would help to view the log file when reporting problems.
   10.47 +
   10.48 +If you're interested in running a GWebCache, see "More GWebCache Info" below
   10.49 +for more information.
   10.50 +
   10.51 +
   10.52 +Configuration
   10.53 +-------------
   10.54 +
   10.55 +The configuration file is in $HOME/.giFT/Gnutella/Gnutella.conf, and is created
   10.56 +if it doesn't exist.  The syntax of the config file is the same as other giFT
   10.57 +files.
   10.58 +
   10.59 +gift-setup will set the default port to something random. You can change it by
   10.60 +editing the plugin's config file.  If this port isn't reachable, you will
   10.61 +receive less search results because you cannot download from firewalled users.
   10.62 +You may have to do some other configuration (forward the port on your firewall,
   10.63 +etc) to make the port reachable.
   10.64 +
   10.65 +
   10.66 +
   10.67 +More GWebCache info
   10.68 +-------------------
   10.69 +
   10.70 +If you're interested in running a GWebCache, more information can be found at
   10.71 +http://www.gnucleus.com/gwebcache/.  Note that while running one doesn't
   10.72 +require a lot of bandwidth for each request, there are quite a lot of nodes
   10.73 +making many requests to a dwindling number of GWebCaches (there used to be
   10.74 +200+, not there are only about 60 left due to abusive nodes hammering them).
   10.75 +
   10.76 +It helps to put the cache on a separate domain (for example, gwc.foo.com) so
   10.77 +that the name can be removed from the DNS if the load on it becomes too high.
   10.78 +Note that this name probably shouldn't contain the word "cache" in it, because
   10.79 +that may be treated specially by HTTP proxies.
   10.80 +
   10.81 +
   10.82 +Contact
   10.83 +-------
   10.84 +
   10.85 +Email:  hipnod@bellsouth.net  [Original author]
   10.86 +
   10.87 +IRC:    #giFT-gnutella on irc.freenode.net
   10.88 +
    11.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    11.2 +++ b/TODO	Sat Feb 20 21:18:28 2010 -0800
    11.3 @@ -0,0 +1,138 @@
    11.4 +$Id: TODO,v 1.11 2004/06/04 16:31:08 hipnod Exp $
    11.5 +
    11.6 +0.0.11
    11.7 +------
    11.8 +	o test short-writing of packets and make sure it works
    11.9 +	o rename gt_conn_ -> gt_node_list_
   11.10 +	o limit outgoing push upload rate
   11.11 +	o use GtTransfer by splitting up gt_transfer_new instead of
   11.12 +	  http_incoming thing
   11.13 +	o insert incoming HTTP server connections into server connection list,
   11.14 +	  to ensure the connection will get closed if there are too many
   11.15 +	o optimize away extra packet allocations
   11.16 +	o support basic packet routing
   11.17 +	o implement simple flow-control
   11.18 +	o make QRP implementation more complete
   11.19 +	o support QRP for reducing queries to nodes
   11.20 +	o implement GGEP properly
   11.21 +	o make generic 3-way handshake for features that have a version
   11.22 +	  number (Vendor-Message, X-Query-Routing, GGEP)
   11.23 +	o make sure all global symbols are prefixed with gt_, GT_, or gnutella_
   11.24 +	o move handshake code into handshake/
   11.25 +	o rename gnutella_* handshake functions to gt_handshake_*
   11.26 +	o maybe rewrite the handshaking code completely
   11.27 +	o fix packet parsing when string is at the end; need to fix 
   11.28 +	  io_buf_resize to terminate
   11.29 +	o merge dev-intset-search branch
   11.30 +	o make web cache index requests once in a while
   11.31 +	o keep queue of outgoing pushed connects, retry
   11.32 +	o rename gt_search_exec gt_share_db
   11.33 +	o implement an abstract GtHttpHeader type
   11.34 +	o eliminate extra list len calc in gt_node_list_foreach()
   11.35 +	o test and possibly incorporate SHA1 code from Linux
   11.36 +	o do tests on new searching code in dev-intset-search branch
   11.37 +	o fix node->share_state being NULL if handshaking hasn't completed
   11.38 +	o use callback system for running code when connection has completed
   11.39 +	o fix gt_share_state.c for ultrapeer mode
   11.40 +
   11.41 +0.0.12
   11.42 +------
   11.43 +	o support downloading from push proxies
   11.44 +	o refactor HTTP code and merge gt_http_client.c and http_request.c
   11.45 +	o maybe do browsing
   11.46 +	o break transfer code into transfer/
   11.47 +	o break http code into http/
   11.48 +	o break sharing code into share/
   11.49 +	o break searching code into search/
   11.50 +	o chop off gt_ prefixes in move
   11.51 +
   11.52 +0.0.13
   11.53 +------
   11.54 +	o implement basic download mesh
   11.55 +	o limit outgoing push uploads
   11.56 +
   11.57 +0.1.0
   11.58 +-----
   11.59 +	o support dynamic querying
   11.60 +	o send out XML metadata
   11.61 +
   11.62 +{******************************************************************************}
   11.63 +
   11.64 +HTTP
   11.65 +----
   11.66 +
   11.67 +	o probably rename GtTransfer to GtHttpTransfer
   11.68 +	o use a new type GtHttpHeader instead of Dataset for xfer->header
   11.69 +	o generalize http handling and separate transfer code into callbacks
   11.70 +	o make GtHttpConnection type to cleanup gt_transfer_cancel()
   11.71 +	o make GtHttpConnectionCache for unifying pushed and non-pushed caches
   11.72 +	o maybe separate GtHttpTransfer into GtHttpRequest/Response
   11.73 +
   11.74 +
   11.75 +TRANSFER
   11.76 +--------
   11.77 +
   11.78 +	o slap push proxies in source url; have to remove them too
   11.79 +
   11.80 +{******************************************************************************}
   11.81 +
   11.82 +THINGS NEEDED FROM THE DAEMON
   11.83 +-----------------------------
   11.84 +	
   11.85 +	* make search object persistent in front-end space, and require
   11.86 +	  explicit free from front-end, or front-end disconnect
   11.87 +	  
   11.88 +	  Would be better if searches were a handle existing in front-end
   11.89 +	  space, that stuck around after search completion, and had to be
   11.90 +	  explicitly cleaned up by a front-end.  This way we could still send
   11.91 +	  results that come in after a search has timed out to the front-end,
   11.92 +	  and let it decide what to do with them after a search has
   11.93 +	  entered the "completed" (but still allocated) state. 
   11.94 +	  
   11.95 +	  Haven't seen those post-completion results actually happen in a
   11.96 +	  while, though..I would like to think this means the search timeout
   11.97 +	  logic is good, but since there is no tracking I've no precise idea
   11.98 +	  how often it happens, except i don't usually see them on the debug
   11.99 +	  console. Should really add something to check for them...
  11.100 +
  11.101 +	* interactive searches need hash-type
  11.102 +	
  11.103 +	  Interactive locate searches always assume sha1, because hash-type is
  11.104 +	  null. The interface protocol should support a way to enumerate the
  11.105 +	  supported hashes and pass a hash-type parameter from the user to
  11.106 +	  locate.
  11.107 +
  11.108 +	* protocol callback for adding new sources, that doesn't cancel
  11.109 +	  existing transfers
  11.110 +
  11.111 +	  This is needed for download mesh support. download_add_source will
  11.112 +	  cancel existing transfers, which is not good because one source may
  11.113 +	  end up cancelling an ongoing transfer if it sends another source in
  11.114 +	  the alternate location that is currently actively transfering. So, a
  11.115 +	  new function is needed for use in the callback to skip ongoing
  11.116 +	  transfers.
  11.117 +
  11.118 +	* queueing w/ MAX_DOWNLOADS_PERUSER == 1 doesn't always work
  11.119 +	
  11.120 +	  Because transfer_length() operates on chunks rather than sources,
  11.121 +	  sometimes more than one download per source gets started if the
  11.122 +	  Chunk isn't active. Need to assess the impact of changing
  11.123 +	  transfer_length() to use Sources instead of Chunks.
  11.124 +
  11.125 +	* need some way to enforce MAX_DOWNLOADS_PERUSER on per-source basis
  11.126 +
  11.127 +	  Active-queueing depends on MAX_DOWNLOADS_PERUSER == 1. If
  11.128 +	  MAX_DOWNLOADS_PERUSER changes, active-queueing breaks and downloads
  11.129 +	  will fail all the time. Should enforce MAX_DOWNLOADS_PERUSER on 
  11.130 +	  a per-source basis at runtime.
  11.131 +
  11.132 +	  Hmm, this may require a User abstraction. There was something else I
  11.133 +	  was thinking would require that too, perhaps related to upload
  11.134 +	  queueing and how doing p->user_cmp there is bad...
  11.135 +
  11.136 +	* push downloads need a way to initiate transfer when no Chunk is
  11.137 +	  allocated
  11.138 +
  11.139 +	* some way to enforce a minimum retry wait on sources
  11.140 +
  11.141 +	* configurable source timeouts to protect push downloads
    12.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    12.2 +++ b/aclocal.m4	Sat Feb 20 21:18:28 2010 -0800
    12.3 @@ -0,0 +1,7624 @@
    12.4 +# generated automatically by aclocal 1.7.9 -*- Autoconf -*-
    12.5 +
    12.6 +# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002
    12.7 +# Free Software Foundation, Inc.
    12.8 +# This file is free software; the Free Software Foundation
    12.9 +# gives unlimited permission to copy and/or distribute it,
   12.10 +# with or without modifications, as long as this notice is preserved.
   12.11 +
   12.12 +# This program is distributed in the hope that it will be useful,
   12.13 +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
   12.14 +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
   12.15 +# PARTICULAR PURPOSE.
   12.16 +
   12.17 +# Do all the work for Automake.                            -*- Autoconf -*-
   12.18 +
   12.19 +# This macro actually does too much some checks are only needed if
   12.20 +# your package does certain things.  But this isn't really a big deal.
   12.21 +
   12.22 +# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003
   12.23 +# Free Software Foundation, Inc.
   12.24 +
   12.25 +# This program is free software; you can redistribute it and/or modify
   12.26 +# it under the terms of the GNU General Public License as published by
   12.27 +# the Free Software Foundation; either version 2, or (at your option)
   12.28 +# any later version.
   12.29 +
   12.30 +# This program is distributed in the hope that it will be useful,
   12.31 +# but WITHOUT ANY WARRANTY; without even the implied warranty of
   12.32 +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
   12.33 +# GNU General Public License for more details.
   12.34 +
   12.35 +# You should have received a copy of the GNU General Public License
   12.36 +# along with this program; if not, write to the Free Software
   12.37 +# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
   12.38 +# 02111-1307, USA.
   12.39 +
   12.40 +# serial 10
   12.41 +
   12.42 +AC_PREREQ([2.54])
   12.43 +
   12.44 +# Autoconf 2.50 wants to disallow AM_ names.  We explicitly allow
   12.45 +# the ones we care about.
   12.46 +m4_pattern_allow([^AM_[A-Z]+FLAGS$])dnl
   12.47 +
   12.48 +# AM_INIT_AUTOMAKE(PACKAGE, VERSION, [NO-DEFINE])
   12.49 +# AM_INIT_AUTOMAKE([OPTIONS])
   12.50 +# -----------------------------------------------
   12.51 +# The call with PACKAGE and VERSION arguments is the old style
   12.52 +# call (pre autoconf-2.50), which is being phased out.  PACKAGE
   12.53 +# and VERSION should now be passed to AC_INIT and removed from
   12.54 +# the call to AM_INIT_AUTOMAKE.
   12.55 +# We support both call styles for the transition.  After
   12.56 +# the next Automake release, Autoconf can make the AC_INIT
   12.57 +# arguments mandatory, and then we can depend on a new Autoconf
   12.58 +# release and drop the old call support.
   12.59 +AC_DEFUN([AM_INIT_AUTOMAKE],
   12.60 +[AC_REQUIRE([AM_SET_CURRENT_AUTOMAKE_VERSION])dnl
   12.61 + AC_REQUIRE([AC_PROG_INSTALL])dnl
   12.62 +# test to see if srcdir already configured
   12.63 +if test "`cd $srcdir && pwd`" != "`pwd`" &&
   12.64 +   test -f $srcdir/config.status; then
   12.65 +  AC_MSG_ERROR([source directory already configured; run "make distclean" there first])
   12.66 +fi
   12.67 +
   12.68 +# test whether we have cygpath
   12.69 +if test -z "$CYGPATH_W"; then
   12.70 +  if (cygpath --version) >/dev/null 2>/dev/null; then
   12.71 +    CYGPATH_W='cygpath -w'
   12.72 +  else
   12.73 +    CYGPATH_W=echo
   12.74 +  fi
   12.75 +fi
   12.76 +AC_SUBST([CYGPATH_W])
   12.77 +
   12.78 +# Define the identity of the package.
   12.79 +dnl Distinguish between old-style and new-style calls.
   12.80 +m4_ifval([$2],
   12.81 +[m4_ifval([$3], [_AM_SET_OPTION([no-define])])dnl
   12.82 + AC_SUBST([PACKAGE], [$1])dnl
   12.83 + AC_SUBST([VERSION], [$2])],
   12.84 +[_AM_SET_OPTIONS([$1])dnl
   12.85 + AC_SUBST([PACKAGE], ['AC_PACKAGE_TARNAME'])dnl
   12.86 + AC_SUBST([VERSION], ['AC_PACKAGE_VERSION'])])dnl
   12.87 +
   12.88 +_AM_IF_OPTION([no-define],,
   12.89 +[AC_DEFINE_UNQUOTED(PACKAGE, "$PACKAGE", [Name of package])
   12.90 + AC_DEFINE_UNQUOTED(VERSION, "$VERSION", [Version number of package])])dnl
   12.91 +
   12.92 +# Some tools Automake needs.
   12.93 +AC_REQUIRE([AM_SANITY_CHECK])dnl
   12.94 +AC_REQUIRE([AC_ARG_PROGRAM])dnl
   12.95 +AM_MISSING_PROG(ACLOCAL, aclocal-${am__api_version})
   12.96 +AM_MISSING_PROG(AUTOCONF, autoconf)
   12.97 +AM_MISSING_PROG(AUTOMAKE, automake-${am__api_version})
   12.98 +AM_MISSING_PROG(AUTOHEADER, autoheader)
   12.99 +AM_MISSING_PROG(MAKEINFO, makeinfo)
  12.100 +AM_MISSING_PROG(AMTAR, tar)
  12.101 +AM_PROG_INSTALL_SH
  12.102 +AM_PROG_INSTALL_STRIP
  12.103 +# We need awk for the "check" target.  The system "awk" is bad on
  12.104 +# some platforms.
  12.105 +AC_REQUIRE([AC_PROG_AWK])dnl
  12.106 +AC_REQUIRE([AC_PROG_MAKE_SET])dnl
  12.107 +AC_REQUIRE([AM_SET_LEADING_DOT])dnl
  12.108 +
  12.109 +_AM_IF_OPTION([no-dependencies],,
  12.110 +[AC_PROVIDE_IFELSE([AC_PROG_CC],
  12.111 +                  [_AM_DEPENDENCIES(CC)],
  12.112 +                  [define([AC_PROG_CC],
  12.113 +                          defn([AC_PROG_CC])[_AM_DEPENDENCIES(CC)])])dnl
  12.114 +AC_PROVIDE_IFELSE([AC_PROG_CXX],
  12.115 +                  [_AM_DEPENDENCIES(CXX)],
  12.116 +                  [define([AC_PROG_CXX],
  12.117 +                          defn([AC_PROG_CXX])[_AM_DEPENDENCIES(CXX)])])dnl
  12.118 +])
  12.119 +])
  12.120 +
  12.121 +
  12.122 +# When config.status generates a header, we must update the stamp-h file.
  12.123 +# This file resides in the same directory as the config header
  12.124 +# that is generated.  The stamp files are numbered to have different names.
  12.125 +
  12.126 +# Autoconf calls _AC_AM_CONFIG_HEADER_HOOK (when defined) in the
  12.127 +# loop where config.status creates the headers, so we can generate
  12.128 +# our stamp files there.
  12.129 +AC_DEFUN([_AC_AM_CONFIG_HEADER_HOOK],
  12.130 +[# Compute $1's index in $config_headers.
  12.131 +_am_stamp_count=1
  12.132 +for _am_header in $config_headers :; do
  12.133 +  case $_am_header in
  12.134 +    $1 | $1:* )
  12.135 +      break ;;
  12.136 +    * )
  12.137 +      _am_stamp_count=`expr $_am_stamp_count + 1` ;;
  12.138 +  esac
  12.139 +done
  12.140 +echo "timestamp for $1" >`AS_DIRNAME([$1])`/stamp-h[]$_am_stamp_count])
  12.141 +
  12.142 +# Copyright 2002  Free Software Foundation, Inc.
  12.143 +
  12.144 +# This program is free software; you can redistribute it and/or modify
  12.145 +# it under the terms of the GNU General Public License as published by
  12.146 +# the Free Software Foundation; either version 2, or (at your option)
  12.147 +# any later version.
  12.148 +
  12.149 +# This program is distributed in the hope that it will be useful,
  12.150 +# but WITHOUT ANY WARRANTY; without even the implied warranty of
  12.151 +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  12.152 +# GNU General Public License for more details.
  12.153 +
  12.154 +# You should have received a copy of the GNU General Public License
  12.155 +# along with this program; if not, write to the Free Software
  12.156 +# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
  12.157 +
  12.158 +# AM_AUTOMAKE_VERSION(VERSION)
  12.159 +# ----------------------------
  12.160 +# Automake X.Y traces this macro to ensure aclocal.m4 has been
  12.161 +# generated from the m4 files accompanying Automake X.Y.
  12.162 +AC_DEFUN([AM_AUTOMAKE_VERSION],[am__api_version="1.7"])
  12.163 +
  12.164 +# AM_SET_CURRENT_AUTOMAKE_VERSION
  12.165 +# -------------------------------
  12.166 +# Call AM_AUTOMAKE_VERSION so it can be traced.
  12.167 +# This function is AC_REQUIREd by AC_INIT_AUTOMAKE.
  12.168 +AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION],
  12.169 +	 [AM_AUTOMAKE_VERSION([1.7.9])])
  12.170 +
  12.171 +# Helper functions for option handling.                    -*- Autoconf -*-
  12.172 +
  12.173 +# Copyright 2001, 2002  Free Software Foundation, Inc.
  12.174 +
  12.175 +# This program is free software; you can redistribute it and/or modify
  12.176 +# it under the terms of the GNU General Public License as published by
  12.177 +# the Free Software Foundation; either version 2, or (at your option)
  12.178 +# any later version.
  12.179 +
  12.180 +# This program is distributed in the hope that it will be useful,
  12.181 +# but WITHOUT ANY WARRANTY; without even the implied warranty of
  12.182 +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  12.183 +# GNU General Public License for more details.
  12.184 +
  12.185 +# You should have received a copy of the GNU General Public License
  12.186 +# along with this program; if not, write to the Free Software
  12.187 +# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
  12.188 +# 02111-1307, USA.
  12.189 +
  12.190 +# serial 2
  12.191 +
  12.192 +# _AM_MANGLE_OPTION(NAME)
  12.193 +# -----------------------
  12.194 +AC_DEFUN([_AM_MANGLE_OPTION],
  12.195 +[[_AM_OPTION_]m4_bpatsubst($1, [[^a-zA-Z0-9_]], [_])])
  12.196 +
  12.197 +# _AM_SET_OPTION(NAME)
  12.198 +# ------------------------------
  12.199 +# Set option NAME.  Presently that only means defining a flag for this option.
  12.200 +AC_DEFUN([_AM_SET_OPTION],
  12.201 +[m4_define(_AM_MANGLE_OPTION([$1]), 1)])
  12.202 +
  12.203 +# _AM_SET_OPTIONS(OPTIONS)
  12.204 +# ----------------------------------
  12.205 +# OPTIONS is a space-separated list of Automake options.
  12.206 +AC_DEFUN([_AM_SET_OPTIONS],
  12.207 +[AC_FOREACH([_AM_Option], [$1], [_AM_SET_OPTION(_AM_Option)])])
  12.208 +
  12.209 +# _AM_IF_OPTION(OPTION, IF-SET, [IF-NOT-SET])
  12.210 +# -------------------------------------------
  12.211 +# Execute IF-SET if OPTION is set, IF-NOT-SET otherwise.
  12.212 +AC_DEFUN([_AM_IF_OPTION],
  12.213 +[m4_ifset(_AM_MANGLE_OPTION([$1]), [$2], [$3])])
  12.214 +
  12.215 +#
  12.216 +# Check to make sure that the build environment is sane.
  12.217 +#
  12.218 +
  12.219 +# Copyright 1996, 1997, 2000, 2001 Free Software Foundation, Inc.
  12.220 +
  12.221 +# This program is free software; you can redistribute it and/or modify
  12.222 +# it under the terms of the GNU General Public License as published by
  12.223 +# the Free Software Foundation; either version 2, or (at your option)
  12.224 +# any later version.
  12.225 +
  12.226 +# This program is distributed in the hope that it will be useful,
  12.227 +# but WITHOUT ANY WARRANTY; without even the implied warranty of
  12.228 +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  12.229 +# GNU General Public License for more details.
  12.230 +
  12.231 +# You should have received a copy of the GNU General Public License
  12.232 +# along with this program; if not, write to the Free Software
  12.233 +# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
  12.234 +# 02111-1307, USA.
  12.235 +
  12.236 +# serial 3
  12.237 +
  12.238 +# AM_SANITY_CHECK
  12.239 +# ---------------
  12.240 +AC_DEFUN([AM_SANITY_CHECK],
  12.241 +[AC_MSG_CHECKING([whether build environment is sane])
  12.242 +# Just in case
  12.243 +sleep 1
  12.244 +echo timestamp > conftest.file
  12.245 +# Do `set' in a subshell so we don't clobber the current shell's
  12.246 +# arguments.  Must try -L first in case configure is actually a
  12.247 +# symlink; some systems play weird games with the mod time of symlinks
  12.248 +# (eg FreeBSD returns the mod time of the symlink's containing
  12.249 +# directory).
  12.250 +if (
  12.251 +   set X `ls -Lt $srcdir/configure conftest.file 2> /dev/null`
  12.252 +   if test "$[*]" = "X"; then
  12.253 +      # -L didn't work.
  12.254 +      set X `ls -t $srcdir/configure conftest.file`
  12.255 +   fi
  12.256 +   rm -f conftest.file
  12.257 +   if test "$[*]" != "X $srcdir/configure conftest.file" \
  12.258 +      && test "$[*]" != "X conftest.file $srcdir/configure"; then
  12.259 +
  12.260 +      # If neither matched, then we have a broken ls.  This can happen
  12.261 +      # if, for instance, CONFIG_SHELL is bash and it inherits a
  12.262 +      # broken ls alias from the environment.  This has actually
  12.263 +      # happened.  Such a system could not be considered "sane".
  12.264 +      AC_MSG_ERROR([ls -t appears to fail.  Make sure there is not a broken
  12.265 +alias in your environment])
  12.266 +   fi
  12.267 +
  12.268 +   test "$[2]" = conftest.file
  12.269 +   )
  12.270 +then
  12.271 +   # Ok.
  12.272 +   :
  12.273 +else
  12.274 +   AC_MSG_ERROR([newly created file is older than distributed files!
  12.275 +Check your system clock])
  12.276 +fi
  12.277 +AC_MSG_RESULT(yes)])
  12.278 +
  12.279 +#  -*- Autoconf -*-
  12.280 +
  12.281 +
  12.282 +# Copyright 1997, 1999, 2000, 2001 Free Software Foundation, Inc.
  12.283 +
  12.284 +# This program is free software; you can redistribute it and/or modify
  12.285 +# it under the terms of the GNU General Public License as published by
  12.286 +# the Free Software Foundation; either version 2, or (at your option)
  12.287 +# any later version.
  12.288 +
  12.289 +# This program is distributed in the hope that it will be useful,
  12.290 +# but WITHOUT ANY WARRANTY; without even the implied warranty of
  12.291 +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  12.292 +# GNU General Public License for more details.
  12.293 +
  12.294 +# You should have received a copy of the GNU General Public License
  12.295 +# along with this program; if not, write to the Free Software
  12.296 +# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
  12.297 +# 02111-1307, USA.
  12.298 +
  12.299 +# serial 3
  12.300 +
  12.301 +# AM_MISSING_PROG(NAME, PROGRAM)
  12.302 +# ------------------------------
  12.303 +AC_DEFUN([AM_MISSING_PROG],
  12.304 +[AC_REQUIRE([AM_MISSING_HAS_RUN])
  12.305 +$1=${$1-"${am_missing_run}$2"}
  12.306 +AC_SUBST($1)])
  12.307 +
  12.308 +
  12.309 +# AM_MISSING_HAS_RUN
  12.310 +# ------------------
  12.311 +# Define MISSING if not defined so far and test if it supports --run.
  12.312 +# If it does, set am_missing_run to use it, otherwise, to nothing.
  12.313 +AC_DEFUN([AM_MISSING_HAS_RUN],
  12.314 +[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl
  12.315 +test x"${MISSING+set}" = xset || MISSING="\${SHELL} $am_aux_dir/missing"
  12.316 +# Use eval to expand $SHELL
  12.317 +if eval "$MISSING --run true"; then
  12.318 +  am_missing_run="$MISSING --run "
  12.319 +else
  12.320 +  am_missing_run=
  12.321 +  AC_MSG_WARN([`missing' script is too old or missing])
  12.322 +fi
  12.323 +])
  12.324 +
  12.325 +# AM_AUX_DIR_EXPAND
  12.326 +
  12.327 +# Copyright 2001 Free Software Foundation, Inc.
  12.328 +
  12.329 +# This program is free software; you can redistribute it and/or modify
  12.330 +# it under the terms of the GNU General Public License as published by
  12.331 +# the Free Software Foundation; either version 2, or (at your option)
  12.332 +# any later version.
  12.333 +
  12.334 +# This program is distributed in the hope that it will be useful,
  12.335 +# but WITHOUT ANY WARRANTY; without even the implied warranty of
  12.336 +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  12.337 +# GNU General Public License for more details.
  12.338 +
  12.339 +# You should have received a copy of the GNU General Public License
  12.340 +# along with this program; if not, write to the Free Software
  12.341 +# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
  12.342 +# 02111-1307, USA.
  12.343 +
  12.344 +# For projects using AC_CONFIG_AUX_DIR([foo]), Autoconf sets
  12.345 +# $ac_aux_dir to `$srcdir/foo'.  In other projects, it is set to
  12.346 +# `$srcdir', `$srcdir/..', or `$srcdir/../..'.
  12.347 +#
  12.348 +# Of course, Automake must honor this variable whenever it calls a
  12.349 +# tool from the auxiliary directory.  The problem is that $srcdir (and
  12.350 +# therefore $ac_aux_dir as well) can be either absolute or relative,
  12.351 +# depending on how configure is run.  This is pretty annoying, since
  12.352 +# it makes $ac_aux_dir quite unusable in subdirectories: in the top
  12.353 +# source directory, any form will work fine, but in subdirectories a
  12.354 +# relative path needs to be adjusted first.
  12.355 +#
  12.356 +# $ac_aux_dir/missing
  12.357 +#    fails when called from a subdirectory if $ac_aux_dir is relative
  12.358 +# $top_srcdir/$ac_aux_dir/missing
  12.359 +#    fails if $ac_aux_dir is absolute,
  12.360 +#    fails when called from a subdirectory in a VPATH build with
  12.361 +#          a relative $ac_aux_dir
  12.362 +#
  12.363 +# The reason of the latter failure is that $top_srcdir and $ac_aux_dir
  12.364 +# are both prefixed by $srcdir.  In an in-source build this is usually
  12.365 +# harmless because $srcdir is `.', but things will broke when you
  12.366 +# start a VPATH build or use an absolute $srcdir.
  12.367 +#
  12.368 +# So we could use something similar to $top_srcdir/$ac_aux_dir/missing,
  12.369 +# iff we strip the leading $srcdir from $ac_aux_dir.  That would be:
  12.370 +#   am_aux_dir='\$(top_srcdir)/'`expr "$ac_aux_dir" : "$srcdir//*\(.*\)"`
  12.371 +# and then we would define $MISSING as
  12.372 +#   MISSING="\${SHELL} $am_aux_dir/missing"
  12.373 +# This will work as long as MISSING is not called from configure, because
  12.374 +# unfortunately $(top_srcdir) has no meaning in configure.
  12.375 +# However there are other variables, like CC, which are often used in
  12.376 +# configure, and could therefore not use this "fixed" $ac_aux_dir.
  12.377 +#
  12.378 +# Another solution, used here, is to always expand $ac_aux_dir to an
  12.379 +# absolute PATH.  The drawback is that using absolute paths prevent a
  12.380 +# configured tree to be moved without reconfiguration.
  12.381 +
  12.382 +# Rely on autoconf to set up CDPATH properly.
  12.383 +AC_PREREQ([2.50])
  12.384 +
  12.385 +AC_DEFUN([AM_AUX_DIR_EXPAND], [
  12.386 +# expand $ac_aux_dir to an absolute path
  12.387 +am_aux_dir=`cd $ac_aux_dir && pwd`
  12.388 +])
  12.389 +
  12.390 +# AM_PROG_INSTALL_SH
  12.391 +# ------------------
  12.392 +# Define $install_sh.
  12.393 +
  12.394 +# Copyright 2001 Free Software Foundation, Inc.
  12.395 +
  12.396 +# This program is free software; you can redistribute it and/or modify
  12.397 +# it under the terms of the GNU General Public License as published by
  12.398 +# the Free Software Foundation; either version 2, or (at your option)
  12.399 +# any later version.
  12.400 +
  12.401 +# This program is distributed in the hope that it will be useful,
  12.402 +# but WITHOUT ANY WARRANTY; without even the implied warranty of
  12.403 +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  12.404 +# GNU General Public License for more details.
  12.405 +
  12.406 +# You should have received a copy of the GNU General Public License
  12.407 +# along with this program; if not, write to the Free Software
  12.408 +# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
  12.409 +# 02111-1307, USA.
  12.410 +
  12.411 +AC_DEFUN([AM_PROG_INSTALL_SH],
  12.412 +[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl
  12.413 +install_sh=${install_sh-"$am_aux_dir/install-sh"}
  12.414 +AC_SUBST(install_sh)])
  12.415 +
  12.416 +# AM_PROG_INSTALL_STRIP
  12.417 +
  12.418 +# Copyright 2001 Free Software Foundation, Inc.
  12.419 +
  12.420 +# This program is free software; you can redistribute it and/or modify
  12.421 +# it under the terms of the GNU General Public License as published by
  12.422 +# the Free Software Foundation; either version 2, or (at your option)
  12.423 +# any later version.
  12.424 +
  12.425 +# This program is distributed in the hope that it will be useful,
  12.426 +# but WITHOUT ANY WARRANTY; without even the implied warranty of
  12.427 +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  12.428 +# GNU General Public License for more details.
  12.429 +
  12.430 +# You should have received a copy of the GNU General Public License
  12.431 +# along with this program; if not, write to the Free Software
  12.432 +# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
  12.433 +# 02111-1307, USA.
  12.434 +
  12.435 +# One issue with vendor `install' (even GNU) is that you can't
  12.436 +# specify the program used to strip binaries.  This is especially
  12.437 +# annoying in cross-compiling environments, where the build's strip
  12.438 +# is unlikely to handle the host's binaries.
  12.439 +# Fortunately install-sh will honor a STRIPPROG variable, so we
  12.440 +# always use install-sh in `make install-strip', and initialize
  12.441 +# STRIPPROG with the value of the STRIP variable (set by the user).
  12.442 +AC_DEFUN([AM_PROG_INSTALL_STRIP],
  12.443 +[AC_REQUIRE([AM_PROG_INSTALL_SH])dnl
  12.444 +# Installed binaries are usually stripped using `strip' when the user
  12.445 +# run `make install-strip'.  However `strip' might not be the right
  12.446 +# tool to use in cross-compilation environments, therefore Automake
  12.447 +# will honor the `STRIP' environment variable to overrule this program.
  12.448 +dnl Don't test for $cross_compiling = yes, because it might be `maybe'.
  12.449 +if test "$cross_compiling" != no; then
  12.450 +  AC_CHECK_TOOL([STRIP], [strip], :)
  12.451 +fi
  12.452 +INSTALL_STRIP_PROGRAM="\${SHELL} \$(install_sh) -c -s"
  12.453 +AC_SUBST([INSTALL_STRIP_PROGRAM])])
  12.454 +
  12.455 +#                                                          -*- Autoconf -*-
  12.456 +# Copyright (C) 2003  Free Software Foundation, Inc.
  12.457 +
  12.458 +# This program is free software; you can redistribute it and/or modify
  12.459 +# it under the terms of the GNU General Public License as published by
  12.460 +# the Free Software Foundation; either version 2, or (at your option)
  12.461 +# any later version.
  12.462 +
  12.463 +# This program is distributed in the hope that it will be useful,
  12.464 +# but WITHOUT ANY WARRANTY; without even the implied warranty of
  12.465 +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  12.466 +# GNU General Public License for more details.
  12.467 +
  12.468 +# You should have received a copy of the GNU General Public License
  12.469 +# along with this program; if not, write to the Free Software
  12.470 +# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
  12.471 +# 02111-1307, USA.
  12.472 +
  12.473 +# serial 1
  12.474 +
  12.475 +# Check whether the underlying file-system supports filenames
  12.476 +# with a leading dot.  For instance MS-DOS doesn't.
  12.477 +AC_DEFUN([AM_SET_LEADING_DOT],
  12.478 +[rm -rf .tst 2>/dev/null
  12.479 +mkdir .tst 2>/dev/null
  12.480 +if test -d .tst; then
  12.481 +  am__leading_dot=.
  12.482 +else
  12.483 +  am__leading_dot=_
  12.484 +fi
  12.485 +rmdir .tst 2>/dev/null
  12.486 +AC_SUBST([am__leading_dot])])
  12.487 +
  12.488 +# serial 5						-*- Autoconf -*-
  12.489 +
  12.490 +# Copyright (C) 1999, 2000, 2001, 2002, 2003  Free Software Foundation, Inc.
  12.491 +
  12.492 +# This program is free software; you can redistribute it and/or modify
  12.493 +# it under the terms of the GNU General Public License as published by
  12.494 +# the Free Software Foundation; either version 2, or (at your option)
  12.495 +# any later version.
  12.496 +
  12.497 +# This program is distributed in the hope that it will be useful,
  12.498 +# but WITHOUT ANY WARRANTY; without even the implied warranty of
  12.499 +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  12.500 +# GNU General Public License for more details.
  12.501 +
  12.502 +# You should have received a copy of the GNU General Public License
  12.503 +# along with this program; if not, write to the Free Software
  12.504 +# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
  12.505 +# 02111-1307, USA.
  12.506 +
  12.507 +
  12.508 +# There are a few dirty hacks below to avoid letting `AC_PROG_CC' be
  12.509 +# written in clear, in which case automake, when reading aclocal.m4,
  12.510 +# will think it sees a *use*, and therefore will trigger all it's
  12.511 +# C support machinery.  Also note that it means that autoscan, seeing
  12.512 +# CC etc. in the Makefile, will ask for an AC_PROG_CC use...
  12.513 +
  12.514 +
  12.515 +
  12.516 +# _AM_DEPENDENCIES(NAME)
  12.517 +# ----------------------
  12.518 +# See how the compiler implements dependency checking.
  12.519 +# NAME is "CC", "CXX", "GCJ", or "OBJC".
  12.520 +# We try a few techniques and use that to set a single cache variable.
  12.521 +#
  12.522 +# We don't AC_REQUIRE the corresponding AC_PROG_CC since the latter was
  12.523 +# modified to invoke _AM_DEPENDENCIES(CC); we would have a circular
  12.524 +# dependency, and given that the user is not expected to run this macro,
  12.525 +# just rely on AC_PROG_CC.
  12.526 +AC_DEFUN([_AM_DEPENDENCIES],
  12.527 +[AC_REQUIRE([AM_SET_DEPDIR])dnl
  12.528 +AC_REQUIRE([AM_OUTPUT_DEPENDENCY_COMMANDS])dnl
  12.529 +AC_REQUIRE([AM_MAKE_INCLUDE])dnl
  12.530 +AC_REQUIRE([AM_DEP_TRACK])dnl
  12.531 +
  12.532 +ifelse([$1], CC,   [depcc="$CC"   am_compiler_list=],
  12.533 +       [$1], CXX,  [depcc="$CXX"  am_compiler_list=],
  12.534 +       [$1], OBJC, [depcc="$OBJC" am_compiler_list='gcc3 gcc'],
  12.535 +       [$1], GCJ,  [depcc="$GCJ"  am_compiler_list='gcc3 gcc'],
  12.536 +                   [depcc="$$1"   am_compiler_list=])
  12.537 +
  12.538 +AC_CACHE_CHECK([dependency style of $depcc],
  12.539 +               [am_cv_$1_dependencies_compiler_type],
  12.540 +[if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then
  12.541 +  # We make a subdir and do the tests there.  Otherwise we can end up
  12.542 +  # making bogus files that we don't know about and never remove.  For
  12.543 +  # instance it was reported that on HP-UX the gcc test will end up
  12.544 +  # making a dummy file named `D' -- because `-MD' means `put the output
  12.545 +  # in D'.
  12.546 +  mkdir conftest.dir
  12.547 +  # Copy depcomp to subdir because otherwise we won't find it if we're
  12.548 +  # using a relative directory.
  12.549 +  cp "$am_depcomp" conftest.dir
  12.550 +  cd conftest.dir
  12.551 +  # We will build objects and dependencies in a subdirectory because
  12.552 +  # it helps to detect inapplicable dependency modes.  For instance
  12.553 +  # both Tru64's cc and ICC support -MD to output dependencies as a
  12.554 +  # side effect of compilation, but ICC will put the dependencies in
  12.555 +  # the current directory while Tru64 will put them in the object
  12.556 +  # directory.
  12.557 +  mkdir sub
  12.558 +
  12.559 +  am_cv_$1_dependencies_compiler_type=none
  12.560 +  if test "$am_compiler_list" = ""; then
  12.561 +     am_compiler_list=`sed -n ['s/^#*\([a-zA-Z0-9]*\))$/\1/p'] < ./depcomp`
  12.562 +  fi
  12.563 +  for depmode in $am_compiler_list; do
  12.564 +    # Setup a source with many dependencies, because some compilers
  12.565 +    # like to wrap large dependency lists on column 80 (with \), and
  12.566 +    # we should not choose a depcomp mode which is confused by this.
  12.567 +    #
  12.568 +    # We need to recreate these files for each test, as the compiler may
  12.569 +    # overwrite some of them when testing with obscure command lines.
  12.570 +    # This happens at least with the AIX C compiler.
  12.571 +    : > sub/conftest.c
  12.572 +    for i in 1 2 3 4 5 6; do
  12.573 +      echo '#include "conftst'$i'.h"' >> sub/conftest.c
  12.574 +      : > sub/conftst$i.h
  12.575 +    done
  12.576 +    echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf
  12.577 +
  12.578 +    case $depmode in
  12.579 +    nosideeffect)
  12.580 +      # after this tag, mechanisms are not by side-effect, so they'll
  12.581 +      # only be used when explicitly requested
  12.582 +      if test "x$enable_dependency_tracking" = xyes; then
  12.583 +	continue
  12.584 +      else
  12.585 +	break
  12.586 +      fi
  12.587 +      ;;
  12.588 +    none) break ;;
  12.589 +    esac
  12.590 +    # We check with `-c' and `-o' for the sake of the "dashmstdout"
  12.591 +    # mode.  It turns out that the SunPro C++ compiler does not properly
  12.592 +    # handle `-M -o', and we need to detect this.
  12.593 +    if depmode=$depmode \
  12.594 +       source=sub/conftest.c object=sub/conftest.${OBJEXT-o} \
  12.595 +       depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \
  12.596 +       $SHELL ./depcomp $depcc -c -o sub/conftest.${OBJEXT-o} sub/conftest.c \
  12.597 +         >/dev/null 2>conftest.err &&
  12.598 +       grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 &&
  12.599 +       grep sub/conftest.${OBJEXT-o} sub/conftest.Po > /dev/null 2>&1 &&
  12.600 +       ${MAKE-make} -s -f confmf > /dev/null 2>&1; then
  12.601 +      # icc doesn't choke on unknown options, it will just issue warnings
  12.602 +      # (even with -Werror).  So we grep stderr for any message
  12.603 +      # that says an option was ignored.
  12.604 +      if grep 'ignoring option' conftest.err >/dev/null 2>&1; then :; else
  12.605 +        am_cv_$1_dependencies_compiler_type=$depmode
  12.606 +        break
  12.607 +      fi
  12.608 +    fi
  12.609 +  done
  12.610 +
  12.611 +  cd ..
  12.612 +  rm -rf conftest.dir
  12.613 +else
  12.614 +  am_cv_$1_dependencies_compiler_type=none
  12.615 +fi
  12.616 +])
  12.617 +AC_SUBST([$1DEPMODE], [depmode=$am_cv_$1_dependencies_compiler_type])
  12.618 +AM_CONDITIONAL([am__fastdep$1], [
  12.619 +  test "x$enable_dependency_tracking" != xno \
  12.620 +  && test "$am_cv_$1_dependencies_compiler_type" = gcc3])
  12.621 +])
  12.622 +
  12.623 +
  12.624 +# AM_SET_DEPDIR
  12.625 +# -------------
  12.626 +# Choose a directory name for dependency files.
  12.627 +# This macro is AC_REQUIREd in _AM_DEPENDENCIES
  12.628 +AC_DEFUN([AM_SET_DEPDIR],
  12.629 +[AC_REQUIRE([AM_SET_LEADING_DOT])dnl
  12.630 +AC_SUBST([DEPDIR], ["${am__leading_dot}deps"])dnl
  12.631 +])
  12.632 +
  12.633 +
  12.634 +# AM_DEP_TRACK
  12.635 +# ------------
  12.636 +AC_DEFUN([AM_DEP_TRACK],
  12.637 +[AC_ARG_ENABLE(dependency-tracking,
  12.638 +[  --disable-dependency-tracking Speeds up one-time builds
  12.639 +  --enable-dependency-tracking  Do not reject slow dependency extractors])
  12.640 +if test "x$enable_dependency_tracking" != xno; then
  12.641 +  am_depcomp="$ac_aux_dir/depcomp"
  12.642 +  AMDEPBACKSLASH='\'
  12.643 +fi
  12.644 +AM_CONDITIONAL([AMDEP], [test "x$enable_dependency_tracking" != xno])
  12.645 +AC_SUBST([AMDEPBACKSLASH])
  12.646 +])
  12.647 +
  12.648 +# Generate code to set up dependency tracking.   -*- Autoconf -*-
  12.649 +
  12.650 +# Copyright 1999, 2000, 2001, 2002 Free Software Foundation, Inc.
  12.651 +
  12.652 +# This program is free software; you can redistribute it and/or modify
  12.653 +# it under the terms of the GNU General Public License as published by
  12.654 +# the Free Software Foundation; either version 2, or (at your option)
  12.655 +# any later version.
  12.656 +
  12.657 +# This program is distributed in the hope that it will be useful,
  12.658 +# but WITHOUT ANY WARRANTY; without even the implied warranty of
  12.659 +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  12.660 +# GNU General Public License for more details.
  12.661 +
  12.662 +# You should have received a copy of the GNU General Public License
  12.663 +# along with this program; if not, write to the Free Software
  12.664 +# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
  12.665 +# 02111-1307, USA.
  12.666 +
  12.667 +#serial 2
  12.668 +
  12.669 +# _AM_OUTPUT_DEPENDENCY_COMMANDS
  12.670 +# ------------------------------
  12.671 +AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS],
  12.672 +[for mf in $CONFIG_FILES; do
  12.673 +  # Strip MF so we end up with the name of the file.
  12.674 +  mf=`echo "$mf" | sed -e 's/:.*$//'`
  12.675 +  # Check whether this is an Automake generated Makefile or not.
  12.676 +  # We used to match only the files named `Makefile.in', but
  12.677 +  # some people rename them; so instead we look at the file content.
  12.678 +  # Grep'ing the first line is not enough: some people post-process
  12.679 +  # each Makefile.in and add a new line on top of each file to say so.
  12.680 +  # So let's grep whole file.
  12.681 +  if grep '^#.*generated by automake' $mf > /dev/null 2>&1; then
  12.682 +    dirpart=`AS_DIRNAME("$mf")`
  12.683 +  else
  12.684 +    continue
  12.685 +  fi
  12.686 +  grep '^DEP_FILES *= *[[^ @%:@]]' < "$mf" > /dev/null || continue
  12.687 +  # Extract the definition of DEP_FILES from the Makefile without
  12.688 +  # running `make'.
  12.689 +  DEPDIR=`sed -n -e '/^DEPDIR = / s///p' < "$mf"`
  12.690 +  test -z "$DEPDIR" && continue
  12.691 +  # When using ansi2knr, U may be empty or an underscore; expand it
  12.692 +  U=`sed -n -e '/^U = / s///p' < "$mf"`
  12.693 +  test -d "$dirpart/$DEPDIR" || mkdir "$dirpart/$DEPDIR"
  12.694 +  # We invoke sed twice because it is the simplest approach to
  12.695 +  # changing $(DEPDIR) to its actual value in the expansion.
  12.696 +  for file in `sed -n -e '
  12.697 +    /^DEP_FILES = .*\\\\$/ {
  12.698 +      s/^DEP_FILES = //
  12.699 +      :loop
  12.700 +	s/\\\\$//
  12.701 +	p
  12.702 +	n
  12.703 +	/\\\\$/ b loop
  12.704 +      p
  12.705 +    }
  12.706 +    /^DEP_FILES = / s/^DEP_FILES = //p' < "$mf" | \
  12.707 +       sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do
  12.708 +    # Make sure the directory exists.
  12.709 +    test -f "$dirpart/$file" && continue
  12.710 +    fdir=`AS_DIRNAME(["$file"])`
  12.711 +    AS_MKDIR_P([$dirpart/$fdir])
  12.712 +    # echo "creating $dirpart/$file"
  12.713 +    echo '# dummy' > "$dirpart/$file"
  12.714 +  done
  12.715 +done
  12.716 +])# _AM_OUTPUT_DEPENDENCY_COMMANDS
  12.717 +
  12.718 +
  12.719 +# AM_OUTPUT_DEPENDENCY_COMMANDS
  12.720 +# -----------------------------
  12.721 +# This macro should only be invoked once -- use via AC_REQUIRE.
  12.722 +#
  12.723 +# This code is only required when automatic dependency tracking
  12.724 +# is enabled.  FIXME.  This creates each `.P' file that we will
  12.725 +# need in order to bootstrap the dependency handling code.
  12.726 +AC_DEFUN([AM_OUTPUT_DEPENDENCY_COMMANDS],
  12.727 +[AC_CONFIG_COMMANDS([depfiles],
  12.728 +     [test x"$AMDEP_TRUE" != x"" || _AM_OUTPUT_DEPENDENCY_COMMANDS],
  12.729 +     [AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir"])
  12.730 +])
  12.731 +
  12.732 +# Check to see how 'make' treats includes.	-*- Autoconf -*-
  12.733 +
  12.734 +# Copyright (C) 2001, 2002, 2003 Free Software Foundation, Inc.
  12.735 +
  12.736 +# This program is free software; you can redistribute it and/or modify
  12.737 +# it under the terms of the GNU General Public License as published by
  12.738 +# the Free Software Foundation; either version 2, or (at your option)
  12.739 +# any later version.
  12.740 +
  12.741 +# This program is distributed in the hope that it will be useful,
  12.742 +# but WITHOUT ANY WARRANTY; without even the implied warranty of
  12.743 +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  12.744 +# GNU General Public License for more details.
  12.745 +
  12.746 +# You should have received a copy of the GNU General Public License
  12.747 +# along with this program; if not, write to the Free Software
  12.748 +# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
  12.749 +# 02111-1307, USA.
  12.750 +
  12.751 +# serial 2
  12.752 +
  12.753 +# AM_MAKE_INCLUDE()
  12.754 +# -----------------
  12.755 +# Check to see how make treats includes.
  12.756 +AC_DEFUN([AM_MAKE_INCLUDE],
  12.757 +[am_make=${MAKE-make}
  12.758 +cat > confinc << 'END'
  12.759 +am__doit:
  12.760 +	@echo done
  12.761 +.PHONY: am__doit
  12.762 +END
  12.763 +# If we don't find an include directive, just comment out the code.
  12.764 +AC_MSG_CHECKING([for style of include used by $am_make])
  12.765 +am__include="#"
  12.766 +am__quote=
  12.767 +_am_result=none
  12.768 +# First try GNU make style include.
  12.769 +echo "include confinc" > confmf
  12.770 +# We grep out `Entering directory' and `Leaving directory'
  12.771 +# messages which can occur if `w' ends up in MAKEFLAGS.
  12.772 +# In particular we don't look at `^make:' because GNU make might
  12.773 +# be invoked under some other name (usually "gmake"), in which
  12.774 +# case it prints its new name instead of `make'.
  12.775 +if test "`$am_make -s -f confmf 2> /dev/null | grep -v 'ing directory'`" = "done"; then
  12.776 +   am__include=include
  12.777 +   am__quote=
  12.778 +   _am_result=GNU
  12.779 +fi
  12.780 +# Now try BSD make style include.
  12.781 +if test "$am__include" = "#"; then
  12.782 +   echo '.include "confinc"' > confmf
  12.783 +   if test "`$am_make -s -f confmf 2> /dev/null`" = "done"; then
  12.784 +      am__include=.include
  12.785 +      am__quote="\""
  12.786 +      _am_result=BSD
  12.787 +   fi
  12.788 +fi
  12.789 +AC_SUBST([am__include])
  12.790 +AC_SUBST([am__quote])
  12.791 +AC_MSG_RESULT([$_am_result])
  12.792 +rm -f confinc confmf
  12.793 +])
  12.794 +
  12.795 +# AM_CONDITIONAL                                              -*- Autoconf -*-
  12.796 +
  12.797 +# Copyright 1997, 2000, 2001 Free Software Foundation, Inc.
  12.798 +
  12.799 +# This program is free software; you can redistribute it and/or modify
  12.800 +# it under the terms of the GNU General Public License as published by
  12.801 +# the Free Software Foundation; either version 2, or (at your option)
  12.802 +# any later version.
  12.803 +
  12.804 +# This program is distributed in the hope that it will be useful,
  12.805 +# but WITHOUT ANY WARRANTY; without even the implied warranty of
  12.806 +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  12.807 +# GNU General Public License for more details.
  12.808 +
  12.809 +# You should have received a copy of the GNU General Public License
  12.810 +# along with this program; if not, write to the Free Software
  12.811 +# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
  12.812 +# 02111-1307, USA.
  12.813 +
  12.814 +# serial 5
  12.815 +
  12.816 +AC_PREREQ(2.52)
  12.817 +
  12.818 +# AM_CONDITIONAL(NAME, SHELL-CONDITION)
  12.819 +# -------------------------------------
  12.820 +# Define a conditional.
  12.821 +AC_DEFUN([AM_CONDITIONAL],
  12.822 +[ifelse([$1], [TRUE],  [AC_FATAL([$0: invalid condition: $1])],
  12.823 +        [$1], [FALSE], [AC_FATAL([$0: invalid condition: $1])])dnl
  12.824 +AC_SUBST([$1_TRUE])
  12.825 +AC_SUBST([$1_FALSE])
  12.826 +if $2; then
  12.827 +  $1_TRUE=
  12.828 +  $1_FALSE='#'
  12.829 +else
  12.830 +  $1_TRUE='#'
  12.831 +  $1_FALSE=
  12.832 +fi
  12.833 +AC_CONFIG_COMMANDS_PRE(
  12.834 +[if test -z "${$1_TRUE}" && test -z "${$1_FALSE}"; then
  12.835 +  AC_MSG_ERROR([conditional "$1" was never defined.
  12.836 +Usually this means the macro was only invoked conditionally.])
  12.837 +fi])])
  12.838 +
  12.839 +# Like AC_CONFIG_HEADER, but automatically create stamp file. -*- Autoconf -*-
  12.840 +
  12.841 +# Copyright 1996, 1997, 2000, 2001 Free Software Foundation, Inc.
  12.842 +
  12.843 +# This program is free software; you can redistribute it and/or modify
  12.844 +# it under the terms of the GNU General Public License as published by
  12.845 +# the Free Software Foundation; either version 2, or (at your option)
  12.846 +# any later version.
  12.847 +
  12.848 +# This program is distributed in the hope that it will be useful,
  12.849 +# but WITHOUT ANY WARRANTY; without even the implied warranty of
  12.850 +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  12.851 +# GNU General Public License for more details.
  12.852 +
  12.853 +# You should have received a copy of the GNU General Public License
  12.854 +# along with this program; if not, write to the Free Software
  12.855 +# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
  12.856 +# 02111-1307, USA.
  12.857 +
  12.858 +AC_PREREQ([2.52])
  12.859 +
  12.860 +# serial 6
  12.861 +
  12.862 +# AM_CONFIG_HEADER is obsolete.  It has been replaced by AC_CONFIG_HEADERS.
  12.863 +AU_DEFUN([AM_CONFIG_HEADER], [AC_CONFIG_HEADERS($@)])
  12.864 +
  12.865 +# Add --enable-maintainer-mode option to configure.
  12.866 +# From Jim Meyering
  12.867 +
  12.868 +# Copyright 1996, 1998, 2000, 2001, 2002  Free Software Foundation, Inc.
  12.869 +
  12.870 +# This program is free software; you can redistribute it and/or modify
  12.871 +# it under the terms of the GNU General Public License as published by
  12.872 +# the Free Software Foundation; either version 2, or (at your option)
  12.873 +# any later version.
  12.874 +
  12.875 +# This program is distributed in the hope that it will be useful,
  12.876 +# but WITHOUT ANY WARRANTY; without even the implied warranty of
  12.877 +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  12.878 +# GNU General Public License for more details.
  12.879 +
  12.880 +# You should have received a copy of the GNU General Public License
  12.881 +# along with this program; if not, write to the Free Software
  12.882 +# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
  12.883 +# 02111-1307, USA.
  12.884 +
  12.885 +# serial 2
  12.886 +
  12.887 +AC_DEFUN([AM_MAINTAINER_MODE],
  12.888 +[AC_MSG_CHECKING([whether to enable maintainer-specific portions of Makefiles])
  12.889 +  dnl maintainer-mode is disabled by default
  12.890 +  AC_ARG_ENABLE(maintainer-mode,
  12.891 +[  --enable-maintainer-mode enable make rules and dependencies not useful
  12.892 +                          (and sometimes confusing) to the casual installer],
  12.893 +      USE_MAINTAINER_MODE=$enableval,
  12.894 +      USE_MAINTAINER_MODE=no)
  12.895 +  AC_MSG_RESULT([$USE_MAINTAINER_MODE])
  12.896 +  AM_CONDITIONAL(MAINTAINER_MODE, [test $USE_MAINTAINER_MODE = yes])
  12.897 +  MAINT=$MAINTAINER_MODE_TRUE
  12.898 +  AC_SUBST(MAINT)dnl
  12.899 +]
  12.900 +)
  12.901 +
  12.902 +AU_DEFUN([jm_MAINTAINER_MODE], [AM_MAINTAINER_MODE])
  12.903 +
  12.904 +
  12.905 +# Copyright 1996, 1997, 1999, 2000, 2001, 2002  Free Software Foundation, Inc.
  12.906 +
  12.907 +# This program is free software; you can redistribute it and/or modify
  12.908 +# it under the terms of the GNU General Public License as published by
  12.909 +# the Free Software Foundation; either version 2, or (at your option)
  12.910 +# any later version.
  12.911 +
  12.912 +# This program is distributed in the hope that it will be useful,
  12.913 +# but WITHOUT ANY WARRANTY; without even the implied warranty of
  12.914 +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  12.915 +# GNU General Public License for more details.
  12.916 +
  12.917 +# You should have received a copy of the GNU General Public License
  12.918 +# along with this program; if not, write to the Free Software
  12.919 +# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
  12.920 +# 02111-1307, USA.
  12.921 +
  12.922 +# serial 2
  12.923 +
  12.924 +# @defmac AC_PROG_CC_STDC
  12.925 +# @maindex PROG_CC_STDC
  12.926 +# @ovindex CC
  12.927 +# If the C compiler in not in ANSI C mode by default, try to add an option
  12.928 +# to output variable @code{CC} to make it so.  This macro tries various
  12.929 +# options that select ANSI C on some system or another.  It considers the
  12.930 +# compiler to be in ANSI C mode if it handles function prototypes correctly.
  12.931 +#
  12.932 +# If you use this macro, you should check after calling it whether the C
  12.933 +# compiler has been set to accept ANSI C; if not, the shell variable
  12.934 +# @code{am_cv_prog_cc_stdc} is set to @samp{no}.  If you wrote your source
  12.935 +# code in ANSI C, you can make an un-ANSIfied copy of it by using the
  12.936 +# program @code{ansi2knr}, which comes with Ghostscript.
  12.937 +# @end defmac
  12.938 +
  12.939 +AC_DEFUN([AM_PROG_CC_STDC],
  12.940 +[AC_REQUIRE([AC_PROG_CC])
  12.941 +AC_BEFORE([$0], [AC_C_INLINE])
  12.942 +AC_BEFORE([$0], [AC_C_CONST])
  12.943 +dnl Force this before AC_PROG_CPP.  Some cpp's, eg on HPUX, require
  12.944 +dnl a magic option to avoid problems with ANSI preprocessor commands
  12.945 +dnl like #elif.
  12.946 +dnl FIXME: can't do this because then AC_AIX won't work due to a
  12.947 +dnl circular dependency.
  12.948 +dnl AC_BEFORE([$0], [AC_PROG_CPP])
  12.949 +AC_MSG_CHECKING([for ${CC-cc} option to accept ANSI C])
  12.950 +AC_CACHE_VAL(am_cv_prog_cc_stdc,
  12.951 +[am_cv_prog_cc_stdc=no
  12.952 +ac_save_CC="$CC"
  12.953 +# Don't try gcc -ansi; that turns off useful extensions and
  12.954 +# breaks some systems' header files.
  12.955 +# AIX			-qlanglvl=ansi
  12.956 +# Ultrix and OSF/1	-std1
  12.957 +# HP-UX 10.20 and later	-Ae
  12.958 +# HP-UX older versions	-Aa -D_HPUX_SOURCE
  12.959 +# SVR4			-Xc -D__EXTENSIONS__
  12.960 +for ac_arg in "" -qlanglvl=ansi -std1 -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__"
  12.961 +do
  12.962 +  CC="$ac_save_CC $ac_arg"
  12.963 +  AC_TRY_COMPILE(
  12.964 +[#include <stdarg.h>
  12.965 +#include <stdio.h>
  12.966 +#include <sys/types.h>
  12.967 +#include <sys/stat.h>
  12.968 +/* Most of the following tests are stolen from RCS 5.7's src/conf.sh.  */
  12.969 +struct buf { int x; };
  12.970 +FILE * (*rcsopen) (struct buf *, struct stat *, int);
  12.971 +static char *e (p, i)
  12.972 +     char **p;
  12.973 +     int i;
  12.974 +{
  12.975 +  return p[i];
  12.976 +}
  12.977 +static char *f (char * (*g) (char **, int), char **p, ...)
  12.978 +{
  12.979 +  char *s;
  12.980 +  va_list v;
  12.981 +  va_start (v,p);
  12.982 +  s = g (p, va_arg (v,int));
  12.983 +  va_end (v);
  12.984 +  return s;
  12.985 +}
  12.986 +int test (int i, double x);
  12.987 +struct s1 {int (*f) (int a);};
  12.988 +struct s2 {int (*f) (double a);};
  12.989 +int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int);
  12.990 +int argc;
  12.991 +char **argv;
  12.992 +], [
  12.993 +return f (e, argv, 0) != argv[0]  ||  f (e, argv, 1) != argv[1];
  12.994 +],
  12.995 +[am_cv_prog_cc_stdc="$ac_arg"; break])
  12.996 +done
  12.997 +CC="$ac_save_CC"
  12.998 +])
  12.999 +if test -z "$am_cv_prog_cc_stdc"; then
 12.1000 +  AC_MSG_RESULT([none needed])
 12.1001 +else
 12.1002 +  AC_MSG_RESULT([$am_cv_prog_cc_stdc])
 12.1003 +fi
 12.1004 +case "x$am_cv_prog_cc_stdc" in
 12.1005 +  x|xno) ;;
 12.1006 +  *) CC="$CC $am_cv_prog_cc_stdc" ;;
 12.1007 +esac
 12.1008 +])
 12.1009 +
 12.1010 +AU_DEFUN([fp_PROG_CC_STDC], [AM_PROG_CC_STDC])
 12.1011 +
 12.1012 +# libtool.m4 - Configure libtool for the host system. -*-Autoconf-*-
 12.1013 +
 12.1014 +# serial 48 Debian 1.5.22-2 AC_PROG_LIBTOOL
 12.1015 +
 12.1016 +
 12.1017 +# AC_PROVIDE_IFELSE(MACRO-NAME, IF-PROVIDED, IF-NOT-PROVIDED)
 12.1018 +# -----------------------------------------------------------
 12.1019 +# If this macro is not defined by Autoconf, define it here.
 12.1020 +m4_ifdef([AC_PROVIDE_IFELSE],
 12.1021 +         [],
 12.1022 +         [m4_define([AC_PROVIDE_IFELSE],
 12.1023 +	         [m4_ifdef([AC_PROVIDE_$1],
 12.1024 +		           [$2], [$3])])])
 12.1025 +
 12.1026 +
 12.1027 +# AC_PROG_LIBTOOL
 12.1028 +# ---------------
 12.1029 +AC_DEFUN([AC_PROG_LIBTOOL],
 12.1030 +[AC_REQUIRE([_AC_PROG_LIBTOOL])dnl
 12.1031 +dnl If AC_PROG_CXX has already been expanded, run AC_LIBTOOL_CXX
 12.1032 +dnl immediately, otherwise, hook it in at the end of AC_PROG_CXX.
 12.1033 +  AC_PROVIDE_IFELSE([AC_PROG_CXX],
 12.1034 +    [AC_LIBTOOL_CXX],
 12.1035 +    [define([AC_PROG_CXX], defn([AC_PROG_CXX])[AC_LIBTOOL_CXX
 12.1036 +  ])])
 12.1037 +dnl And a similar setup for Fortran 77 support
 12.1038 +  AC_PROVIDE_IFELSE([AC_PROG_F77],
 12.1039 +    [AC_LIBTOOL_F77],
 12.1040 +    [define([AC_PROG_F77], defn([AC_PROG_F77])[AC_LIBTOOL_F77
 12.1041 +])])
 12.1042 +
 12.1043 +dnl Quote A][M_PROG_GCJ so that aclocal doesn't bring it in needlessly.
 12.1044 +dnl If either AC_PROG_GCJ or A][M_PROG_GCJ have already been expanded, run
 12.1045 +dnl AC_LIBTOOL_GCJ immediately, otherwise, hook it in at the end of both.
 12.1046 +  AC_PROVIDE_IFELSE([AC_PROG_GCJ],
 12.1047 +    [AC_LIBTOOL_GCJ],
 12.1048 +    [AC_PROVIDE_IFELSE([A][M_PROG_GCJ],
 12.1049 +      [AC_LIBTOOL_GCJ],
 12.1050 +      [AC_PROVIDE_IFELSE([LT_AC_PROG_GCJ],
 12.1051 +	[AC_LIBTOOL_GCJ],
 12.1052 +      [ifdef([AC_PROG_GCJ],
 12.1053 +	     [define([AC_PROG_GCJ], defn([AC_PROG_GCJ])[AC_LIBTOOL_GCJ])])
 12.1054 +       ifdef([A][M_PROG_GCJ],
 12.1055 +	     [define([A][M_PROG_GCJ], defn([A][M_PROG_GCJ])[AC_LIBTOOL_GCJ])])
 12.1056 +       ifdef([LT_AC_PROG_GCJ],
 12.1057 +	     [define([LT_AC_PROG_GCJ],
 12.1058 +		defn([LT_AC_PROG_GCJ])[AC_LIBTOOL_GCJ])])])])
 12.1059 +])])# AC_PROG_LIBTOOL
 12.1060 +
 12.1061 +
 12.1062 +# _AC_PROG_LIBTOOL
 12.1063 +# ----------------
 12.1064 +AC_DEFUN([_AC_PROG_LIBTOOL],
 12.1065 +[AC_REQUIRE([AC_LIBTOOL_SETUP])dnl
 12.1066 +AC_BEFORE([$0],[AC_LIBTOOL_CXX])dnl
 12.1067 +AC_BEFORE([$0],[AC_LIBTOOL_F77])dnl
 12.1068 +AC_BEFORE([$0],[AC_LIBTOOL_GCJ])dnl
 12.1069 +
 12.1070 +# This can be used to rebuild libtool when needed
 12.1071 +LIBTOOL_DEPS="$ac_aux_dir/ltmain.sh"
 12.1072 +
 12.1073 +# Always use our own libtool.
 12.1074 +LIBTOOL='$(SHELL) $(top_builddir)/libtool'
 12.1075 +AC_SUBST(LIBTOOL)dnl
 12.1076 +
 12.1077 +# Prevent multiple expansion
 12.1078 +define([AC_PROG_LIBTOOL], [])
 12.1079 +])# _AC_PROG_LIBTOOL
 12.1080 +
 12.1081 +
 12.1082 +# AC_LIBTOOL_SETUP
 12.1083 +# ----------------
 12.1084 +AC_DEFUN([AC_LIBTOOL_SETUP],
 12.1085 +[AC_PREREQ(2.50)dnl
 12.1086 +AC_REQUIRE([AC_ENABLE_SHARED])dnl
 12.1087 +AC_REQUIRE([AC_ENABLE_STATIC])dnl
 12.1088 +AC_REQUIRE([AC_ENABLE_FAST_INSTALL])dnl
 12.1089 +AC_REQUIRE([AC_CANONICAL_HOST])dnl
 12.1090 +AC_REQUIRE([AC_CANONICAL_BUILD])dnl
 12.1091 +AC_REQUIRE([AC_PROG_CC])dnl
 12.1092 +AC_REQUIRE([AC_PROG_LD])dnl
 12.1093 +AC_REQUIRE([AC_PROG_LD_RELOAD_FLAG])dnl
 12.1094 +AC_REQUIRE([AC_PROG_NM])dnl
 12.1095 +
 12.1096 +AC_REQUIRE([AC_PROG_LN_S])dnl
 12.1097 +AC_REQUIRE([AC_DEPLIBS_CHECK_METHOD])dnl
 12.1098 +# Autoconf 2.13's AC_OBJEXT and AC_EXEEXT macros only works for C compilers!
 12.1099 +AC_REQUIRE([AC_OBJEXT])dnl
 12.1100 +AC_REQUIRE([AC_EXEEXT])dnl
 12.1101 +dnl
 12.1102 +
 12.1103 +AC_LIBTOOL_SYS_MAX_CMD_LEN
 12.1104 +AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE
 12.1105 +AC_LIBTOOL_OBJDIR
 12.1106 +
 12.1107 +AC_REQUIRE([_LT_AC_SYS_COMPILER])dnl
 12.1108 +_LT_AC_PROG_ECHO_BACKSLASH
 12.1109 +
 12.1110 +case $host_os in
 12.1111 +aix3*)
 12.1112 +  # AIX sometimes has problems with the GCC collect2 program.  For some
 12.1113 +  # reason, if we set the COLLECT_NAMES environment variable, the problems
 12.1114 +  # vanish in a puff of smoke.
 12.1115 +  if test "X${COLLECT_NAMES+set}" != Xset; then
 12.1116 +    COLLECT_NAMES=
 12.1117 +    export COLLECT_NAMES
 12.1118 +  fi
 12.1119 +  ;;
 12.1120 +esac
 12.1121 +
 12.1122 +# Sed substitution that helps us do robust quoting.  It backslashifies
 12.1123 +# metacharacters that are still active within double-quoted strings.
 12.1124 +Xsed='sed -e 1s/^X//'
 12.1125 +[sed_quote_subst='s/\([\\"\\`$\\\\]\)/\\\1/g']
 12.1126 +
 12.1127 +# Same as above, but do not quote variable references.
 12.1128 +[double_quote_subst='s/\([\\"\\`\\\\]\)/\\\1/g']
 12.1129 +
 12.1130 +# Sed substitution to delay expansion of an escaped shell variable in a
 12.1131 +# double_quote_subst'ed string.
 12.1132 +delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g'
 12.1133 +
 12.1134 +# Sed substitution to avoid accidental globbing in evaled expressions
 12.1135 +no_glob_subst='s/\*/\\\*/g'
 12.1136 +
 12.1137 +# Constants:
 12.1138 +rm="rm -f"
 12.1139 +
 12.1140 +# Global variables:
 12.1141 +default_ofile=libtool
 12.1142 +can_build_shared=yes
 12.1143 +
 12.1144 +# All known linkers require a `.a' archive for static linking (except MSVC,
 12.1145 +# which needs '.lib').
 12.1146 +libext=a
 12.1147 +ltmain="$ac_aux_dir/ltmain.sh"
 12.1148 +ofile="$default_ofile"
 12.1149 +with_gnu_ld="$lt_cv_prog_gnu_ld"
 12.1150 +
 12.1151 +AC_CHECK_TOOL(AR, ar, false)
 12.1152 +AC_CHECK_TOOL(RANLIB, ranlib, :)
 12.1153 +AC_CHECK_TOOL(STRIP, strip, :)
 12.1154 +
 12.1155 +old_CC="$CC"
 12.1156 +old_CFLAGS="$CFLAGS"
 12.1157 +
 12.1158 +# Set sane defaults for various variables
 12.1159 +test -z "$AR" && AR=ar
 12.1160 +test -z "$AR_FLAGS" && AR_FLAGS=cru
 12.1161 +test -z "$AS" && AS=as
 12.1162 +test -z "$CC" && CC=cc
 12.1163 +test -z "$LTCC" && LTCC=$CC
 12.1164 +test -z "$LTCFLAGS" && LTCFLAGS=$CFLAGS
 12.1165 +test -z "$DLLTOOL" && DLLTOOL=dlltool
 12.1166 +test -z "$LD" && LD=ld
 12.1167 +test -z "$LN_S" && LN_S="ln -s"
 12.1168 +test -z "$MAGIC_CMD" && MAGIC_CMD=file
 12.1169 +test -z "$NM" && NM=nm
 12.1170 +test -z "$SED" && SED=sed
 12.1171 +test -z "$OBJDUMP" && OBJDUMP=objdump
 12.1172 +test -z "$RANLIB" && RANLIB=:
 12.1173 +test -z "$STRIP" && STRIP=:
 12.1174 +test -z "$ac_objext" && ac_objext=o
 12.1175 +
 12.1176 +# Determine commands to create old-style static archives.
 12.1177 +old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs$old_deplibs'
 12.1178 +old_postinstall_cmds='chmod 644 $oldlib'
 12.1179 +old_postuninstall_cmds=
 12.1180 +
 12.1181 +if test -n "$RANLIB"; then
 12.1182 +  case $host_os in
 12.1183 +  openbsd*)
 12.1184 +    old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB -t \$oldlib"
 12.1185 +    ;;
 12.1186 +  *)
 12.1187 +    old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB \$oldlib"
 12.1188 +    ;;
 12.1189 +  esac
 12.1190 +  old_archive_cmds="$old_archive_cmds~\$RANLIB \$oldlib"
 12.1191 +fi
 12.1192 +
 12.1193 +_LT_CC_BASENAME([$compiler])
 12.1194 +
 12.1195 +# Only perform the check for file, if the check method requires it
 12.1196 +case $deplibs_check_method in
 12.1197 +file_magic*)
 12.1198 +  if test "$file_magic_cmd" = '$MAGIC_CMD'; then
 12.1199 +    AC_PATH_MAGIC
 12.1200 +  fi
 12.1201 +  ;;
 12.1202 +esac
 12.1203 +
 12.1204 +AC_PROVIDE_IFELSE([AC_LIBTOOL_DLOPEN], enable_dlopen=yes, enable_dlopen=no)
 12.1205 +AC_PROVIDE_IFELSE([AC_LIBTOOL_WIN32_DLL],
 12.1206 +enable_win32_dll=yes, enable_win32_dll=no)
 12.1207 +
 12.1208 +AC_ARG_ENABLE([libtool-lock],
 12.1209 +    [AC_HELP_STRING([--disable-libtool-lock],
 12.1210 +	[avoid locking (might break parallel builds)])])
 12.1211 +test "x$enable_libtool_lock" != xno && enable_libtool_lock=yes
 12.1212 +
 12.1213 +AC_ARG_WITH([pic],
 12.1214 +    [AC_HELP_STRING([--with-pic],
 12.1215 +	[try to use only PIC/non-PIC objects @<:@default=use both@:>@])],
 12.1216 +    [pic_mode="$withval"],
 12.1217 +    [pic_mode=default])
 12.1218 +test -z "$pic_mode" && pic_mode=default
 12.1219 +
 12.1220 +# Use C for the default configuration in the libtool script
 12.1221 +tagname=
 12.1222 +AC_LIBTOOL_LANG_C_CONFIG
 12.1223 +_LT_AC_TAGCONFIG
 12.1224 +])# AC_LIBTOOL_SETUP
 12.1225 +
 12.1226 +
 12.1227 +# _LT_AC_SYS_COMPILER
 12.1228 +# -------------------
 12.1229 +AC_DEFUN([_LT_AC_SYS_COMPILER],
 12.1230 +[AC_REQUIRE([AC_PROG_CC])dnl
 12.1231 +
 12.1232 +# If no C compiler was specified, use CC.
 12.1233 +LTCC=${LTCC-"$CC"}
 12.1234 +
 12.1235 +# If no C compiler flags were specified, use CFLAGS.
 12.1236 +LTCFLAGS=${LTCFLAGS-"$CFLAGS"}
 12.1237 +
 12.1238 +# Allow CC to be a program name with arguments.
 12.1239 +compiler=$CC
 12.1240 +])# _LT_AC_SYS_COMPILER
 12.1241 +
 12.1242 +
 12.1243 +# _LT_CC_BASENAME(CC)
 12.1244 +# -------------------
 12.1245 +# Calculate cc_basename.  Skip known compiler wrappers and cross-prefix.
 12.1246 +AC_DEFUN([_LT_CC_BASENAME],
 12.1247 +[for cc_temp in $1""; do
 12.1248 +  case $cc_temp in
 12.1249 +    compile | *[[\\/]]compile | ccache | *[[\\/]]ccache ) ;;
 12.1250 +    distcc | *[[\\/]]distcc | purify | *[[\\/]]purify ) ;;
 12.1251 +    \-*) ;;
 12.1252 +    *) break;;
 12.1253 +  esac
 12.1254 +done
 12.1255 +cc_basename=`$echo "X$cc_temp" | $Xsed -e 's%.*/%%' -e "s%^$host_alias-%%"`
 12.1256 +])
 12.1257 +
 12.1258 +
 12.1259 +# _LT_COMPILER_BOILERPLATE
 12.1260 +# ------------------------
 12.1261 +# Check for compiler boilerplate output or warnings with
 12.1262 +# the simple compiler test code.
 12.1263 +AC_DEFUN([_LT_COMPILER_BOILERPLATE],
 12.1264 +[ac_outfile=conftest.$ac_objext
 12.1265 +printf "$lt_simple_compile_test_code" >conftest.$ac_ext
 12.1266 +eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err
 12.1267 +_lt_compiler_boilerplate=`cat conftest.err`
 12.1268 +$rm conftest*
 12.1269 +])# _LT_COMPILER_BOILERPLATE
 12.1270 +
 12.1271 +
 12.1272 +# _LT_LINKER_BOILERPLATE
 12.1273 +# ----------------------
 12.1274 +# Check for linker boilerplate output or warnings with
 12.1275 +# the simple link test code.
 12.1276 +AC_DEFUN([_LT_LINKER_BOILERPLATE],
 12.1277 +[ac_outfile=conftest.$ac_objext
 12.1278 +printf "$lt_simple_link_test_code" >conftest.$ac_ext
 12.1279 +eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err
 12.1280 +_lt_linker_boilerplate=`cat conftest.err`
 12.1281 +$rm conftest*
 12.1282 +])# _LT_LINKER_BOILERPLATE
 12.1283 +
 12.1284 +
 12.1285 +# _LT_AC_SYS_LIBPATH_AIX
 12.1286 +# ----------------------
 12.1287 +# Links a minimal program and checks the executable
 12.1288 +# for the system default hardcoded library path. In most cases,
 12.1289 +# this is /usr/lib:/lib, but when the MPI compilers are used
 12.1290 +# the location of the communication and MPI libs are included too.
 12.1291 +# If we don't find anything, use the default library path according
 12.1292 +# to the aix ld manual.
 12.1293 +AC_DEFUN([_LT_AC_SYS_LIBPATH_AIX],
 12.1294 +[AC_LINK_IFELSE(AC_LANG_PROGRAM,[
 12.1295 +aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0  *\(.*\)$/\1/; p; }
 12.1296 +}'`
 12.1297 +# Check for a 64-bit object if we didn't find anything.
 12.1298 +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; }
 12.1299 +}'`; fi],[])
 12.1300 +if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
 12.1301 +])# _LT_AC_SYS_LIBPATH_AIX
 12.1302 +
 12.1303 +
 12.1304 +# _LT_AC_SHELL_INIT(ARG)
 12.1305 +# ----------------------
 12.1306 +AC_DEFUN([_LT_AC_SHELL_INIT],
 12.1307 +[ifdef([AC_DIVERSION_NOTICE],
 12.1308 +	     [AC_DIVERT_PUSH(AC_DIVERSION_NOTICE)],
 12.1309 +	 [AC_DIVERT_PUSH(NOTICE)])
 12.1310 +$1
 12.1311 +AC_DIVERT_POP
 12.1312 +])# _LT_AC_SHELL_INIT
 12.1313 +
 12.1314 +
 12.1315 +# _LT_AC_PROG_ECHO_BACKSLASH
 12.1316 +# --------------------------
 12.1317 +# Add some code to the start of the generated configure script which
 12.1318 +# will find an echo command which doesn't interpret backslashes.
 12.1319 +AC_DEFUN([_LT_AC_PROG_ECHO_BACKSLASH],
 12.1320 +[_LT_AC_SHELL_INIT([
 12.1321 +# Check that we are running under the correct shell.
 12.1322 +SHELL=${CONFIG_SHELL-/bin/sh}
 12.1323 +
 12.1324 +case X$ECHO in
 12.1325 +X*--fallback-echo)
 12.1326 +  # Remove one level of quotation (which was required for Make).
 12.1327 +  ECHO=`echo "$ECHO" | sed 's,\\\\\[$]\\[$]0,'[$]0','`
 12.1328 +  ;;
 12.1329 +esac
 12.1330 +
 12.1331 +echo=${ECHO-echo}
 12.1332 +if test "X[$]1" = X--no-reexec; then
 12.1333 +  # Discard the --no-reexec flag, and continue.
 12.1334 +  shift
 12.1335 +elif test "X[$]1" = X--fallback-echo; then
 12.1336 +  # Avoid inline document here, it may be left over
 12.1337 +  :
 12.1338 +elif test "X`($echo '\t') 2>/dev/null`" = 'X\t' ; then
 12.1339 +  # Yippee, $echo works!
 12.1340 +  :
 12.1341 +else
 12.1342 +  # Restart under the correct shell.
 12.1343 +  exec $SHELL "[$]0" --no-reexec ${1+"[$]@"}
 12.1344 +fi
 12.1345 +
 12.1346 +if test "X[$]1" = X--fallback-echo; then
 12.1347 +  # used as fallback echo
 12.1348 +  shift
 12.1349 +  cat <<EOF
 12.1350 +[$]*
 12.1351 +EOF
 12.1352 +  exit 0
 12.1353 +fi
 12.1354 +
 12.1355 +# The HP-UX ksh and POSIX shell print the target directory to stdout
 12.1356 +# if CDPATH is set.
 12.1357 +(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
 12.1358 +
 12.1359 +if test -z "$ECHO"; then
 12.1360 +if test "X${echo_test_string+set}" != Xset; then
 12.1361 +# find a string as large as possible, as long as the shell can cope with it
 12.1362 +  for cmd in 'sed 50q "[$]0"' 'sed 20q "[$]0"' 'sed 10q "[$]0"' 'sed 2q "[$]0"' 'echo test'; do
 12.1363 +    # expected sizes: less than 2Kb, 1Kb, 512 bytes, 16 bytes, ...
 12.1364 +    if (echo_test_string=`eval $cmd`) 2>/dev/null &&
 12.1365 +       echo_test_string=`eval $cmd` &&
 12.1366 +       (test "X$echo_test_string" = "X$echo_test_string") 2>/dev/null
 12.1367 +    then
 12.1368 +      break
 12.1369 +    fi
 12.1370 +  done
 12.1371 +fi
 12.1372 +
 12.1373 +if test "X`($echo '\t') 2>/dev/null`" = 'X\t' &&
 12.1374 +   echo_testing_string=`($echo "$echo_test_string") 2>/dev/null` &&
 12.1375 +   test "X$echo_testing_string" = "X$echo_test_string"; then
 12.1376 +  :
 12.1377 +else
 12.1378 +  # The Solaris, AIX, and Digital Unix default echo programs unquote
 12.1379 +  # backslashes.  This makes it impossible to quote backslashes using
 12.1380 +  #   echo "$something" | sed 's/\\/\\\\/g'
 12.1381 +  #
 12.1382 +  # So, first we look for a working echo in the user's PATH.
 12.1383 +
 12.1384 +  lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
 12.1385 +  for dir in $PATH /usr/ucb; do
 12.1386 +    IFS="$lt_save_ifs"
 12.1387 +    if (test -f $dir/echo || test -f $dir/echo$ac_exeext) &&
 12.1388 +       test "X`($dir/echo '\t') 2>/dev/null`" = 'X\t' &&
 12.1389 +       echo_testing_string=`($dir/echo "$echo_test_string") 2>/dev/null` &&
 12.1390 +       test "X$echo_testing_string" = "X$echo_test_string"; then
 12.1391 +      echo="$dir/echo"
 12.1392 +      break
 12.1393 +    fi
 12.1394 +  done
 12.1395 +  IFS="$lt_save_ifs"
 12.1396 +
 12.1397 +  if test "X$echo" = Xecho; then
 12.1398 +    # We didn't find a better echo, so look for alternatives.
 12.1399 +    if test "X`(print -r '\t') 2>/dev/null`" = 'X\t' &&
 12.1400 +       echo_testing_string=`(print -r "$echo_test_string") 2>/dev/null` &&
 12.1401 +       test "X$echo_testing_string" = "X$echo_test_string"; then
 12.1402 +      # This shell has a builtin print -r that does the trick.
 12.1403 +      echo='print -r'
 12.1404 +    elif (test -f /bin/ksh || test -f /bin/ksh$ac_exeext) &&
 12.1405 +	 test "X$CONFIG_SHELL" != X/bin/ksh; then
 12.1406 +      # If we have ksh, try running configure again with it.
 12.1407 +      ORIGINAL_CONFIG_SHELL=${CONFIG_SHELL-/bin/sh}
 12.1408 +      export ORIGINAL_CONFIG_SHELL
 12.1409 +      CONFIG_SHELL=/bin/ksh
 12.1410 +      export CONFIG_SHELL
 12.1411 +      exec $CONFIG_SHELL "[$]0" --no-reexec ${1+"[$]@"}
 12.1412 +    else
 12.1413 +      # Try using printf.
 12.1414 +      echo='printf %s\n'
 12.1415 +      if test "X`($echo '\t') 2>/dev/null`" = 'X\t' &&
 12.1416 +	 echo_testing_string=`($echo "$echo_test_string") 2>/dev/null` &&
 12.1417 +	 test "X$echo_testing_string" = "X$echo_test_string"; then
 12.1418 +	# Cool, printf works
 12.1419 +	:
 12.1420 +      elif echo_testing_string=`($ORIGINAL_CONFIG_SHELL "[$]0" --fallback-echo '\t') 2>/dev/null` &&
 12.1421 +	   test "X$echo_testing_string" = 'X\t' &&
 12.1422 +	   echo_testing_string=`($ORIGINAL_CONFIG_SHELL "[$]0" --fallback-echo "$echo_test_string") 2>/dev/null` &&
 12.1423 +	   test "X$echo_testing_string" = "X$echo_test_string"; then
 12.1424 +	CONFIG_SHELL=$ORIGINAL_CONFIG_SHELL
 12.1425 +	export CONFIG_SHELL
 12.1426 +	SHELL="$CONFIG_SHELL"
 12.1427 +	export SHELL
 12.1428 +	echo="$CONFIG_SHELL [$]0 --fallback-echo"
 12.1429 +      elif echo_testing_string=`($CONFIG_SHELL "[$]0" --fallback-echo '\t') 2>/dev/null` &&
 12.1430 +	   test "X$echo_testing_string" = 'X\t' &&
 12.1431 +	   echo_testing_string=`($CONFIG_SHELL "[$]0" --fallback-echo "$echo_test_string") 2>/dev/null` &&
 12.1432 +	   test "X$echo_testing_string" = "X$echo_test_string"; then
 12.1433 +	echo="$CONFIG_SHELL [$]0 --fallback-echo"
 12.1434 +      else
 12.1435 +	# maybe with a smaller string...
 12.1436 +	prev=:
 12.1437 +
 12.1438 +	for cmd in 'echo test' 'sed 2q "[$]0"' 'sed 10q "[$]0"' 'sed 20q "[$]0"' 'sed 50q "[$]0"'; do
 12.1439 +	  if (test "X$echo_test_string" = "X`eval $cmd`") 2>/dev/null
 12.1440 +	  then
 12.1441 +	    break
 12.1442 +	  fi
 12.1443 +	  prev="$cmd"
 12.1444 +	done
 12.1445 +
 12.1446 +	if test "$prev" != 'sed 50q "[$]0"'; then
 12.1447 +	  echo_test_string=`eval $prev`
 12.1448 +	  export echo_test_string
 12.1449 +	  exec ${ORIGINAL_CONFIG_SHELL-${CONFIG_SHELL-/bin/sh}} "[$]0" ${1+"[$]@"}
 12.1450 +	else
 12.1451 +	  # Oops.  We lost completely, so just stick with echo.
 12.1452 +	  echo=echo
 12.1453 +	fi
 12.1454 +      fi
 12.1455 +    fi
 12.1456 +  fi
 12.1457 +fi
 12.1458 +fi
 12.1459 +
 12.1460 +# Copy echo and quote the copy suitably for passing to libtool from
 12.1461 +# the Makefile, instead of quoting the original, which is used later.
 12.1462 +ECHO=$echo
 12.1463 +if test "X$ECHO" = "X$CONFIG_SHELL [$]0 --fallback-echo"; then
 12.1464 +   ECHO="$CONFIG_SHELL \\\$\[$]0 --fallback-echo"
 12.1465 +fi
 12.1466 +
 12.1467 +AC_SUBST(ECHO)
 12.1468 +])])# _LT_AC_PROG_ECHO_BACKSLASH
 12.1469 +
 12.1470 +
 12.1471 +# _LT_AC_LOCK
 12.1472 +# -----------
 12.1473 +AC_DEFUN([_LT_AC_LOCK],
 12.1474 +[AC_ARG_ENABLE([libtool-lock],
 12.1475 +    [AC_HELP_STRING([--disable-libtool-lock],
 12.1476 +	[avoid locking (might break parallel builds)])])
 12.1477 +test "x$enable_libtool_lock" != xno && enable_libtool_lock=yes
 12.1478 +
 12.1479 +# Some flags need to be propagated to the compiler or linker for good
 12.1480 +# libtool support.
 12.1481 +case $host in
 12.1482 +ia64-*-hpux*)
 12.1483 +  # Find out which ABI we are using.
 12.1484 +  echo 'int i;' > conftest.$ac_ext
 12.1485 +  if AC_TRY_EVAL(ac_compile); then
 12.1486 +    case `/usr/bin/file conftest.$ac_objext` in
 12.1487 +    *ELF-32*)
 12.1488 +      HPUX_IA64_MODE="32"
 12.1489 +      ;;
 12.1490 +    *ELF-64*)
 12.1491 +      HPUX_IA64_MODE="64"
 12.1492 +      ;;
 12.1493 +    esac
 12.1494 +  fi
 12.1495 +  rm -rf conftest*
 12.1496 +  ;;
 12.1497 +*-*-irix6*)
 12.1498 +  # Find out which ABI we are using.
 12.1499 +  echo '[#]line __oline__ "configure"' > conftest.$ac_ext
 12.1500 +  if AC_TRY_EVAL(ac_compile); then
 12.1501 +   if test "$lt_cv_prog_gnu_ld" = yes; then
 12.1502 +    case `/usr/bin/file conftest.$ac_objext` in
 12.1503 +    *32-bit*)
 12.1504 +      LD="${LD-ld} -melf32bsmip"
 12.1505 +      ;;
 12.1506 +    *N32*)
 12.1507 +      LD="${LD-ld} -melf32bmipn32"
 12.1508 +      ;;
 12.1509 +    *64-bit*)
 12.1510 +      LD="${LD-ld} -melf64bmip"
 12.1511 +      ;;
 12.1512 +    esac
 12.1513 +   else
 12.1514 +    case `/usr/bin/file conftest.$ac_objext` in
 12.1515 +    *32-bit*)
 12.1516 +      LD="${LD-ld} -32"
 12.1517 +      ;;
 12.1518 +    *N32*)
 12.1519 +      LD="${LD-ld} -n32"
 12.1520 +      ;;
 12.1521 +    *64-bit*)
 12.1522 +      LD="${LD-ld} -64"
 12.1523 +      ;;
 12.1524 +    esac
 12.1525 +   fi
 12.1526 +  fi
 12.1527 +  rm -rf conftest*
 12.1528 +  ;;
 12.1529 +
 12.1530 +x86_64-*linux*|ppc*-*linux*|powerpc*-*linux*|s390*-*linux*|sparc*-*linux*)
 12.1531 +  # Find out which ABI we are using.
 12.1532 +  echo 'int i;' > conftest.$ac_ext
 12.1533 +  if AC_TRY_EVAL(ac_compile); then
 12.1534 +    case `/usr/bin/file conftest.o` in
 12.1535 +    *32-bit*)
 12.1536 +      case $host in
 12.1537 +        x86_64-*linux*)
 12.1538 +          LD="${LD-ld} -m elf_i386"
 12.1539 +          ;;
 12.1540 +        ppc64-*linux*|powerpc64-*linux*)
 12.1541 +          LD="${LD-ld} -m elf32ppclinux"
 12.1542 +          ;;
 12.1543 +        s390x-*linux*)
 12.1544 +          LD="${LD-ld} -m elf_s390"
 12.1545 +          ;;
 12.1546 +        sparc64-*linux*)
 12.1547 +          LD="${LD-ld} -m elf32_sparc"
 12.1548 +          ;;
 12.1549 +      esac
 12.1550 +      ;;
 12.1551 +    *64-bit*)
 12.1552 +      case $host in
 12.1553 +        x86_64-*linux*)
 12.1554 +          LD="${LD-ld} -m elf_x86_64"
 12.1555 +          ;;
 12.1556 +        ppc*-*linux*|powerpc*-*linux*)
 12.1557 +          LD="${LD-ld} -m elf64ppc"
 12.1558 +          ;;
 12.1559 +        s390*-*linux*)
 12.1560 +          LD="${LD-ld} -m elf64_s390"
 12.1561 +          ;;
 12.1562 +        sparc*-*linux*)
 12.1563 +          LD="${LD-ld} -m elf64_sparc"
 12.1564 +          ;;
 12.1565 +      esac
 12.1566 +      ;;
 12.1567 +    esac
 12.1568 +  fi
 12.1569 +  rm -rf conftest*
 12.1570 +  ;;
 12.1571 +
 12.1572 +*-*-sco3.2v5*)
 12.1573 +  # On SCO OpenServer 5, we need -belf to get full-featured binaries.
 12.1574 +  SAVE_CFLAGS="$CFLAGS"
 12.1575 +  CFLAGS="$CFLAGS -belf"
 12.1576 +  AC_CACHE_CHECK([whether the C compiler needs -belf], lt_cv_cc_needs_belf,
 12.1577 +    [AC_LANG_PUSH(C)
 12.1578 +     AC_TRY_LINK([],[],[lt_cv_cc_needs_belf=yes],[lt_cv_cc_needs_belf=no])
 12.1579 +     AC_LANG_POP])
 12.1580 +  if test x"$lt_cv_cc_needs_belf" != x"yes"; then
 12.1581 +    # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf
 12.1582 +    CFLAGS="$SAVE_CFLAGS"
 12.1583 +  fi
 12.1584 +  ;;
 12.1585 +sparc*-*solaris*)
 12.1586 +  # Find out which ABI we are using.
 12.1587 +  echo 'int i;' > conftest.$ac_ext
 12.1588 +  if AC_TRY_EVAL(ac_compile); then
 12.1589 +    case `/usr/bin/file conftest.o` in
 12.1590 +    *64-bit*)
 12.1591 +      case $lt_cv_prog_gnu_ld in
 12.1592 +      yes*) LD="${LD-ld} -m elf64_sparc" ;;
 12.1593 +      *)    LD="${LD-ld} -64" ;;
 12.1594 +      esac
 12.1595 +      ;;
 12.1596 +    esac
 12.1597 +  fi
 12.1598 +  rm -rf conftest*
 12.1599 +  ;;
 12.1600 +
 12.1601 +AC_PROVIDE_IFELSE([AC_LIBTOOL_WIN32_DLL],
 12.1602 +[*-*-cygwin* | *-*-mingw* | *-*-pw32*)
 12.1603 +  AC_CHECK_TOOL(DLLTOOL, dlltool, false)
 12.1604 +  AC_CHECK_TOOL(AS, as, false)
 12.1605 +  AC_CHECK_TOOL(OBJDUMP, objdump, false)
 12.1606 +  ;;
 12.1607 +  ])
 12.1608 +esac
 12.1609 +
 12.1610 +need_locks="$enable_libtool_lock"
 12.1611 +
 12.1612 +])# _LT_AC_LOCK
 12.1613 +
 12.1614 +
 12.1615 +# AC_LIBTOOL_COMPILER_OPTION(MESSAGE, VARIABLE-NAME, FLAGS,
 12.1616 +#		[OUTPUT-FILE], [ACTION-SUCCESS], [ACTION-FAILURE])
 12.1617 +# ----------------------------------------------------------------
 12.1618 +# Check whether the given compiler option works
 12.1619 +AC_DEFUN([AC_LIBTOOL_COMPILER_OPTION],
 12.1620 +[AC_REQUIRE([LT_AC_PROG_SED])
 12.1621 +AC_CACHE_CHECK([$1], [$2],
 12.1622 +  [$2=no
 12.1623 +  ifelse([$4], , [ac_outfile=conftest.$ac_objext], [ac_outfile=$4])
 12.1624 +   printf "$lt_simple_compile_test_code" > conftest.$ac_ext
 12.1625 +   lt_compiler_flag="$3"
 12.1626 +   # Insert the option either (1) after the last *FLAGS variable, or
 12.1627 +   # (2) before a word containing "conftest.", or (3) at the end.
 12.1628 +   # Note that $ac_compile itself does not contain backslashes and begins
 12.1629 +   # with a dollar sign (not a hyphen), so the echo should work correctly.
 12.1630 +   # The option is referenced via a variable to avoid confusing sed.
 12.1631 +   lt_compile=`echo "$ac_compile" | $SED \
 12.1632 +   -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
 12.1633 +   -e 's: [[^ ]]*conftest\.: $lt_compiler_flag&:; t' \
 12.1634 +   -e 's:$: $lt_compiler_flag:'`
 12.1635 +   (eval echo "\"\$as_me:__oline__: $lt_compile\"" >&AS_MESSAGE_LOG_FD)
 12.1636 +   (eval "$lt_compile" 2>conftest.err)
 12.1637 +   ac_status=$?
 12.1638 +   cat conftest.err >&AS_MESSAGE_LOG_FD
 12.1639 +   echo "$as_me:__oline__: \$? = $ac_status" >&AS_MESSAGE_LOG_FD
 12.1640 +   if (exit $ac_status) && test -s "$ac_outfile"; then
 12.1641 +     # The compiler can only warn and ignore the option if not recognized
 12.1642 +     # So say no if there are warnings other than the usual output.
 12.1643 +     $echo "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' >conftest.exp
 12.1644 +     $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2
 12.1645 +     if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then
 12.1646 +       $2=yes
 12.1647 +     fi
 12.1648 +   fi
 12.1649 +   $rm conftest*
 12.1650 +])
 12.1651 +
 12.1652 +if test x"[$]$2" = xyes; then
 12.1653 +    ifelse([$5], , :, [$5])
 12.1654 +else
 12.1655 +    ifelse([$6], , :, [$6])
 12.1656 +fi
 12.1657 +])# AC_LIBTOOL_COMPILER_OPTION
 12.1658 +
 12.1659 +
 12.1660 +# AC_LIBTOOL_LINKER_OPTION(MESSAGE, VARIABLE-NAME, FLAGS,
 12.1661 +#                          [ACTION-SUCCESS], [ACTION-FAILURE])
 12.1662 +# ------------------------------------------------------------
 12.1663 +# Check whether the given compiler option works
 12.1664 +AC_DEFUN([AC_LIBTOOL_LINKER_OPTION],
 12.1665 +[AC_CACHE_CHECK([$1], [$2],
 12.1666 +  [$2=no
 12.1667 +   save_LDFLAGS="$LDFLAGS"
 12.1668 +   LDFLAGS="$LDFLAGS $3"
 12.1669 +   printf "$lt_simple_link_test_code" > conftest.$ac_ext
 12.1670 +   if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then
 12.1671 +     # The linker can only warn and ignore the option if not recognized
 12.1672 +     # So say no if there are warnings
 12.1673 +     if test -s conftest.err; then
 12.1674 +       # Append any errors to the config.log.
 12.1675 +       cat conftest.err 1>&AS_MESSAGE_LOG_FD
 12.1676 +       $echo "X$_lt_linker_boilerplate" | $Xsed -e '/^$/d' > conftest.exp
 12.1677 +       $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2
 12.1678 +       if diff conftest.exp conftest.er2 >/dev/null; then
 12.1679 +         $2=yes
 12.1680 +       fi
 12.1681 +     else
 12.1682 +       $2=yes
 12.1683 +     fi
 12.1684 +   fi
 12.1685 +   $rm conftest*
 12.1686 +   LDFLAGS="$save_LDFLAGS"
 12.1687 +])
 12.1688 +
 12.1689 +if test x"[$]$2" = xyes; then
 12.1690 +    ifelse([$4], , :, [$4])
 12.1691 +else
 12.1692 +    ifelse([$5], , :, [$5])
 12.1693 +fi
 12.1694 +])# AC_LIBTOOL_LINKER_OPTION
 12.1695 +
 12.1696 +
 12.1697 +# AC_LIBTOOL_SYS_MAX_CMD_LEN
 12.1698 +# --------------------------
 12.1699 +AC_DEFUN([AC_LIBTOOL_SYS_MAX_CMD_LEN],
 12.1700 +[# find the maximum length of command line arguments
 12.1701 +AC_MSG_CHECKING([the maximum length of command line arguments])
 12.1702 +AC_CACHE_VAL([lt_cv_sys_max_cmd_len], [dnl
 12.1703 +  i=0
 12.1704 +  teststring="ABCD"
 12.1705 +
 12.1706 +  case $build_os in
 12.1707 +  msdosdjgpp*)
 12.1708 +    # On DJGPP, this test can blow up pretty badly due to problems in libc
 12.1709 +    # (any single argument exceeding 2000 bytes causes a buffer overrun
 12.1710 +    # during glob expansion).  Even if it were fixed, the result of this
 12.1711 +    # check would be larger than it should be.
 12.1712 +    lt_cv_sys_max_cmd_len=12288;    # 12K is about right
 12.1713 +    ;;
 12.1714 +
 12.1715 +  gnu*)
 12.1716 +    # Under GNU Hurd, this test is not required because there is
 12.1717 +    # no limit to the length of command line arguments.
 12.1718 +    # Libtool will interpret -1 as no limit whatsoever
 12.1719 +    lt_cv_sys_max_cmd_len=-1;
 12.1720 +    ;;
 12.1721 +
 12.1722 +  cygwin* | mingw*)
 12.1723 +    # On Win9x/ME, this test blows up -- it succeeds, but takes
 12.1724 +    # about 5 minutes as the teststring grows exponentially.
 12.1725 +    # Worse, since 9x/ME are not pre-emptively multitasking,
 12.1726 +    # you end up with a "frozen" computer, even though with patience
 12.1727 +    # the test eventually succeeds (with a max line length of 256k).
 12.1728 +    # Instead, let's just punt: use the minimum linelength reported by
 12.1729 +    # all of the supported platforms: 8192 (on NT/2K/XP).
 12.1730 +    lt_cv_sys_max_cmd_len=8192;
 12.1731 +    ;;
 12.1732 +
 12.1733 +  amigaos*)
 12.1734 +    # On AmigaOS with pdksh, this test takes hours, literally.
 12.1735 +    # So we just punt and use a minimum line length of 8192.
 12.1736 +    lt_cv_sys_max_cmd_len=8192;
 12.1737 +    ;;
 12.1738 +
 12.1739 +  netbsd* | freebsd* | openbsd* | darwin* | dragonfly*)
 12.1740 +    # This has been around since 386BSD, at least.  Likely further.
 12.1741 +    if test -x /sbin/sysctl; then
 12.1742 +      lt_cv_sys_max_cmd_len=`/sbin/sysctl -n kern.argmax`
 12.1743 +    elif test -x /usr/sbin/sysctl; then
 12.1744 +      lt_cv_sys_max_cmd_len=`/usr/sbin/sysctl -n kern.argmax`
 12.1745 +    else
 12.1746 +      lt_cv_sys_max_cmd_len=65536	# usable default for all BSDs
 12.1747 +    fi
 12.1748 +    # And add a safety zone
 12.1749 +    lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4`
 12.1750 +    lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3`
 12.1751 +    ;;
 12.1752 +
 12.1753 +  interix*)
 12.1754 +    # We know the value 262144 and hardcode it with a safety zone (like BSD)
 12.1755 +    lt_cv_sys_max_cmd_len=196608
 12.1756 +    ;;
 12.1757 +
 12.1758 +  osf*)
 12.1759 +    # Dr. Hans Ekkehard Plesser reports seeing a kernel panic running configure
 12.1760 +    # due to this test when exec_disable_arg_limit is 1 on Tru64. It is not
 12.1761 +    # nice to cause kernel panics so lets avoid the loop below.
 12.1762 +    # First set a reasonable default.
 12.1763 +    lt_cv_sys_max_cmd_len=16384
 12.1764 +    #
 12.1765 +    if test -x /sbin/sysconfig; then
 12.1766 +      case `/sbin/sysconfig -q proc exec_disable_arg_limit` in
 12.1767 +        *1*) lt_cv_sys_max_cmd_len=-1 ;;
 12.1768 +      esac
 12.1769 +    fi
 12.1770 +    ;;
 12.1771 +  sco3.2v5*)
 12.1772 +    lt_cv_sys_max_cmd_len=102400
 12.1773 +    ;;
 12.1774 +  sysv5* | sco5v6* | sysv4.2uw2*)
 12.1775 +    kargmax=`grep ARG_MAX /etc/conf/cf.d/stune 2>/dev/null`
 12.1776 +    if test -n "$kargmax"; then
 12.1777 +      lt_cv_sys_max_cmd_len=`echo $kargmax | sed 's/.*[[ 	]]//'`
 12.1778 +    else
 12.1779 +      lt_cv_sys_max_cmd_len=32768
 12.1780 +    fi
 12.1781 +    ;;
 12.1782 +  *)
 12.1783 +    # If test is not a shell built-in, we'll probably end up computing a
 12.1784 +    # maximum length that is only half of the actual maximum length, but
 12.1785 +    # we can't tell.
 12.1786 +    SHELL=${SHELL-${CONFIG_SHELL-/bin/sh}}
 12.1787 +    while (test "X"`$SHELL [$]0 --fallback-echo "X$teststring" 2>/dev/null` \
 12.1788 +	       = "XX$teststring") >/dev/null 2>&1 &&
 12.1789 +	    new_result=`expr "X$teststring" : ".*" 2>&1` &&
 12.1790 +	    lt_cv_sys_max_cmd_len=$new_result &&
 12.1791 +	    test $i != 17 # 1/2 MB should be enough
 12.1792 +    do
 12.1793 +      i=`expr $i + 1`
 12.1794 +      teststring=$teststring$teststring
 12.1795 +    done
 12.1796 +    teststring=
 12.1797 +    # Add a significant safety factor because C++ compilers can tack on massive
 12.1798 +    # amounts of additional arguments before passing them to the linker.
 12.1799 +    # It appears as though 1/2 is a usable value.
 12.1800 +    lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 2`
 12.1801 +    ;;
 12.1802 +  esac
 12.1803 +])
 12.1804 +if test -n $lt_cv_sys_max_cmd_len ; then
 12.1805 +  AC_MSG_RESULT($lt_cv_sys_max_cmd_len)
 12.1806 +else
 12.1807 +  AC_MSG_RESULT(none)
 12.1808 +fi
 12.1809 +])# AC_LIBTOOL_SYS_MAX_CMD_LEN
 12.1810 +
 12.1811 +
 12.1812 +# _LT_AC_CHECK_DLFCN
 12.1813 +# ------------------
 12.1814 +AC_DEFUN([_LT_AC_CHECK_DLFCN],
 12.1815 +[AC_CHECK_HEADERS(dlfcn.h)dnl
 12.1816 +])# _LT_AC_CHECK_DLFCN
 12.1817 +
 12.1818 +
 12.1819 +# _LT_AC_TRY_DLOPEN_SELF (ACTION-IF-TRUE, ACTION-IF-TRUE-W-USCORE,
 12.1820 +#                           ACTION-IF-FALSE, ACTION-IF-CROSS-COMPILING)
 12.1821 +# ---------------------------------------------------------------------
 12.1822 +AC_DEFUN([_LT_AC_TRY_DLOPEN_SELF],
 12.1823 +[AC_REQUIRE([_LT_AC_CHECK_DLFCN])dnl
 12.1824 +if test "$cross_compiling" = yes; then :
 12.1825 +  [$4]
 12.1826 +else
 12.1827 +  lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
 12.1828 +  lt_status=$lt_dlunknown
 12.1829 +  cat > conftest.$ac_ext <<EOF
 12.1830 +[#line __oline__ "configure"
 12.1831 +#include "confdefs.h"
 12.1832 +
 12.1833 +#if HAVE_DLFCN_H
 12.1834 +#include <dlfcn.h>
 12.1835 +#endif
 12.1836 +
 12.1837 +#include <stdio.h>
 12.1838 +
 12.1839 +#ifdef RTLD_GLOBAL
 12.1840 +#  define LT_DLGLOBAL		RTLD_GLOBAL
 12.1841 +#else
 12.1842 +#  ifdef DL_GLOBAL
 12.1843 +#    define LT_DLGLOBAL		DL_GLOBAL
 12.1844 +#  else
 12.1845 +#    define LT_DLGLOBAL		0
 12.1846 +#  endif
 12.1847 +#endif
 12.1848 +
 12.1849 +/* We may have to define LT_DLLAZY_OR_NOW in the command line if we
 12.1850 +   find out it does not work in some platform. */
 12.1851 +#ifndef LT_DLLAZY_OR_NOW
 12.1852 +#  ifdef RTLD_LAZY
 12.1853 +#    define LT_DLLAZY_OR_NOW		RTLD_LAZY
 12.1854 +#  else
 12.1855 +#    ifdef DL_LAZY
 12.1856 +#      define LT_DLLAZY_OR_NOW		DL_LAZY
 12.1857 +#    else
 12.1858 +#      ifdef RTLD_NOW
 12.1859 +#        define LT_DLLAZY_OR_NOW	RTLD_NOW
 12.1860 +#      else
 12.1861 +#        ifdef DL_NOW
 12.1862 +#          define LT_DLLAZY_OR_NOW	DL_NOW
 12.1863 +#        else
 12.1864 +#          define LT_DLLAZY_OR_NOW	0
 12.1865 +#        endif
 12.1866 +#      endif
 12.1867 +#    endif
 12.1868 +#  endif
 12.1869 +#endif
 12.1870 +
 12.1871 +#ifdef __cplusplus
 12.1872 +extern "C" void exit (int);
 12.1873 +#endif
 12.1874 +
 12.1875 +void fnord() { int i=42;}
 12.1876 +int main ()
 12.1877 +{
 12.1878 +  void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW);
 12.1879 +  int status = $lt_dlunknown;
 12.1880 +
 12.1881 +  if (self)
 12.1882 +    {
 12.1883 +      if (dlsym (self,"fnord"))       status = $lt_dlno_uscore;
 12.1884 +      else if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore;
 12.1885 +      /* dlclose (self); */
 12.1886 +    }
 12.1887 +  else
 12.1888 +    puts (dlerror ());
 12.1889 +
 12.1890 +    exit (status);
 12.1891 +}]
 12.1892 +EOF
 12.1893 +  if AC_TRY_EVAL(ac_link) && test -s conftest${ac_exeext} 2>/dev/null; then
 12.1894 +    (./conftest; exit; ) >&AS_MESSAGE_LOG_FD 2>/dev/null
 12.1895 +    lt_status=$?
 12.1896 +    case x$lt_status in
 12.1897 +      x$lt_dlno_uscore) $1 ;;
 12.1898 +      x$lt_dlneed_uscore) $2 ;;
 12.1899 +      x$lt_dlunknown|x*) $3 ;;
 12.1900 +    esac
 12.1901 +  else :
 12.1902 +    # compilation failed
 12.1903 +    $3
 12.1904 +  fi
 12.1905 +fi
 12.1906 +rm -fr conftest*
 12.1907 +])# _LT_AC_TRY_DLOPEN_SELF
 12.1908 +
 12.1909 +
 12.1910 +# AC_LIBTOOL_DLOPEN_SELF
 12.1911 +# ----------------------
 12.1912 +AC_DEFUN([AC_LIBTOOL_DLOPEN_SELF],
 12.1913 +[AC_REQUIRE([_LT_AC_CHECK_DLFCN])dnl
 12.1914 +if test "x$enable_dlopen" != xyes; then
 12.1915 +  enable_dlopen=unknown
 12.1916 +  enable_dlopen_self=unknown
 12.1917 +  enable_dlopen_self_static=unknown
 12.1918 +else
 12.1919 +  lt_cv_dlopen=no
 12.1920 +  lt_cv_dlopen_libs=
 12.1921 +
 12.1922 +  case $host_os in
 12.1923 +  beos*)
 12.1924 +    lt_cv_dlopen="load_add_on"
 12.1925 +    lt_cv_dlopen_libs=
 12.1926 +    lt_cv_dlopen_self=yes
 12.1927 +    ;;
 12.1928 +
 12.1929 +  mingw* | pw32*)
 12.1930 +    lt_cv_dlopen="LoadLibrary"
 12.1931 +    lt_cv_dlopen_libs=
 12.1932 +   ;;
 12.1933 +
 12.1934 +  cygwin*)
 12.1935 +    lt_cv_dlopen="dlopen"
 12.1936 +    lt_cv_dlopen_libs=
 12.1937 +   ;;
 12.1938 +
 12.1939 +  darwin*)
 12.1940 +  # if libdl is installed we need to link against it
 12.1941 +    AC_CHECK_LIB([dl], [dlopen],
 12.1942 +		[lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"],[
 12.1943 +    lt_cv_dlopen="dyld"
 12.1944 +    lt_cv_dlopen_libs=
 12.1945 +    lt_cv_dlopen_self=yes
 12.1946 +    ])
 12.1947 +   ;;
 12.1948 +
 12.1949 +  *)
 12.1950 +    AC_CHECK_FUNC([shl_load],
 12.1951 +	  [lt_cv_dlopen="shl_load"],
 12.1952 +      [AC_CHECK_LIB([dld], [shl_load],
 12.1953 +	    [lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-dld"],
 12.1954 +	[AC_CHECK_FUNC([dlopen],
 12.1955 +	      [lt_cv_dlopen="dlopen"],
 12.1956 +	  [AC_CHECK_LIB([dl], [dlopen],
 12.1957 +		[lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"],
 12.1958 +	    [AC_CHECK_LIB([svld], [dlopen],
 12.1959 +		  [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld"],
 12.1960 +	      [AC_CHECK_LIB([dld], [dld_link],
 12.1961 +		    [lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-dld"])
 12.1962 +	      ])
 12.1963 +	    ])
 12.1964 +	  ])
 12.1965 +	])
 12.1966 +      ])
 12.1967 +    ;;
 12.1968 +  esac
 12.1969 +
 12.1970 +  if test "x$lt_cv_dlopen" != xno; then
 12.1971 +    enable_dlopen=yes
 12.1972 +  else
 12.1973 +    enable_dlopen=no
 12.1974 +  fi
 12.1975 +
 12.1976 +  case $lt_cv_dlopen in
 12.1977 +  dlopen)
 12.1978 +    save_CPPFLAGS="$CPPFLAGS"
 12.1979 +    test "x$ac_cv_header_dlfcn_h" = xyes && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H"
 12.1980 +
 12.1981 +    save_LDFLAGS="$LDFLAGS"
 12.1982 +    wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\"
 12.1983 +
 12.1984 +    save_LIBS="$LIBS"
 12.1985 +    LIBS="$lt_cv_dlopen_libs $LIBS"
 12.1986 +
 12.1987 +    AC_CACHE_CHECK([whether a program can dlopen itself],
 12.1988 +	  lt_cv_dlopen_self, [dnl
 12.1989 +	  _LT_AC_TRY_DLOPEN_SELF(
 12.1990 +	    lt_cv_dlopen_self=yes, lt_cv_dlopen_self=yes,
 12.1991 +	    lt_cv_dlopen_self=no, lt_cv_dlopen_self=cross)
 12.1992 +    ])
 12.1993 +
 12.1994 +    if test "x$lt_cv_dlopen_self" = xyes; then
 12.1995 +      wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $lt_prog_compiler_static\"
 12.1996 +      AC_CACHE_CHECK([whether a statically linked program can dlopen itself],
 12.1997 +    	  lt_cv_dlopen_self_static, [dnl
 12.1998 +	  _LT_AC_TRY_DLOPEN_SELF(
 12.1999 +	    lt_cv_dlopen_self_static=yes, lt_cv_dlopen_self_static=yes,
 12.2000 +	    lt_cv_dlopen_self_static=no,  lt_cv_dlopen_self_static=cross)
 12.2001 +      ])
 12.2002 +    fi
 12.2003 +
 12.2004 +    CPPFLAGS="$save_CPPFLAGS"
 12.2005 +    LDFLAGS="$save_LDFLAGS"
 12.2006 +    LIBS="$save_LIBS"
 12.2007 +    ;;
 12.2008 +  esac
 12.2009 +
 12.2010 +  case $lt_cv_dlopen_self in
 12.2011 +  yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;;
 12.2012 +  *) enable_dlopen_self=unknown ;;
 12.2013 +  esac
 12.2014 +
 12.2015 +  case $lt_cv_dlopen_self_static in
 12.2016 +  yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;;
 12.2017 +  *) enable_dlopen_self_static=unknown ;;
 12.2018 +  esac
 12.2019 +fi
 12.2020 +])# AC_LIBTOOL_DLOPEN_SELF
 12.2021 +
 12.2022 +
 12.2023 +# AC_LIBTOOL_PROG_CC_C_O([TAGNAME])
 12.2024 +# ---------------------------------
 12.2025 +# Check to see if options -c and -o are simultaneously supported by compiler
 12.2026 +AC_DEFUN([AC_LIBTOOL_PROG_CC_C_O],
 12.2027 +[AC_REQUIRE([_LT_AC_SYS_COMPILER])dnl
 12.2028 +AC_CACHE_CHECK([if $compiler supports -c -o file.$ac_objext],
 12.2029 +  [_LT_AC_TAGVAR(lt_cv_prog_compiler_c_o, $1)],
 12.2030 +  [_LT_AC_TAGVAR(lt_cv_prog_compiler_c_o, $1)=no
 12.2031 +   $rm -r conftest 2>/dev/null
 12.2032 +   mkdir conftest
 12.2033 +   cd conftest
 12.2034 +   mkdir out
 12.2035 +   printf "$lt_simple_compile_test_code" > conftest.$ac_ext
 12.2036 +
 12.2037 +   lt_compiler_flag="-o out/conftest2.$ac_objext"
 12.2038 +   # Insert the option either (1) after the last *FLAGS variable, or
 12.2039 +   # (2) before a word containing "conftest.", or (3) at the end.
 12.2040 +   # Note that $ac_compile itself does not contain backslashes and begins
 12.2041 +   # with a dollar sign (not a hyphen), so the echo should work correctly.
 12.2042 +   lt_compile=`echo "$ac_compile" | $SED \
 12.2043 +   -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
 12.2044 +   -e 's: [[^ ]]*conftest\.: $lt_compiler_flag&:; t' \
 12.2045 +   -e 's:$: $lt_compiler_flag:'`
 12.2046 +   (eval echo "\"\$as_me:__oline__: $lt_compile\"" >&AS_MESSAGE_LOG_FD)
 12.2047 +   (eval "$lt_compile" 2>out/conftest.err)
 12.2048 +   ac_status=$?
 12.2049 +   cat out/conftest.err >&AS_MESSAGE_LOG_FD
 12.2050 +   echo "$as_me:__oline__: \$? = $ac_status" >&AS_MESSAGE_LOG_FD
 12.2051 +   if (exit $ac_status) && test -s out/conftest2.$ac_objext
 12.2052 +   then
 12.2053 +     # The compiler can only warn and ignore the option if not recognized
 12.2054 +     # So say no if there are warnings
 12.2055 +     $echo "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' > out/conftest.exp
 12.2056 +     $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2
 12.2057 +     if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then
 12.2058 +       _LT_AC_TAGVAR(lt_cv_prog_compiler_c_o, $1)=yes
 12.2059 +     fi
 12.2060 +   fi
 12.2061 +   chmod u+w . 2>&AS_MESSAGE_LOG_FD
 12.2062 +   $rm conftest*
 12.2063 +   # SGI C++ compiler will create directory out/ii_files/ for
 12.2064 +   # template instantiation
 12.2065 +   test -d out/ii_files && $rm out/ii_files/* && rmdir out/ii_files
 12.2066 +   $rm out/* && rmdir out
 12.2067 +   cd ..
 12.2068 +   rmdir conftest
 12.2069 +   $rm conftest*
 12.2070 +])
 12.2071 +])# AC_LIBTOOL_PROG_CC_C_O
 12.2072 +
 12.2073 +
 12.2074 +# AC_LIBTOOL_SYS_HARD_LINK_LOCKS([TAGNAME])
 12.2075 +# -----------------------------------------
 12.2076 +# Check to see if we can do hard links to lock some files if needed
 12.2077 +AC_DEFUN([AC_LIBTOOL_SYS_HARD_LINK_LOCKS],
 12.2078 +[AC_REQUIRE([_LT_AC_LOCK])dnl
 12.2079 +
 12.2080 +hard_links="nottested"
 12.2081 +if test "$_LT_AC_TAGVAR(lt_cv_prog_compiler_c_o, $1)" = no && test "$need_locks" != no; then
 12.2082 +  # do not overwrite the value of need_locks provided by the user
 12.2083 +  AC_MSG_CHECKING([if we can lock with hard links])
 12.2084 +  hard_links=yes
 12.2085 +  $rm conftest*
 12.2086 +  ln conftest.a conftest.b 2>/dev/null && hard_links=no
 12.2087 +  touch conftest.a
 12.2088 +  ln conftest.a conftest.b 2>&5 || hard_links=no
 12.2089 +  ln conftest.a conftest.b 2>/dev/null && hard_links=no
 12.2090 +  AC_MSG_RESULT([$hard_links])
 12.2091 +  if test "$hard_links" = no; then
 12.2092 +    AC_MSG_WARN([`$CC' does not support `-c -o', so `make -j' may be unsafe])
 12.2093 +    need_locks=warn
 12.2094 +  fi
 12.2095 +else
 12.2096 +  need_locks=no
 12.2097 +fi
 12.2098 +])# AC_LIBTOOL_SYS_HARD_LINK_LOCKS
 12.2099 +
 12.2100 +
 12.2101 +# AC_LIBTOOL_OBJDIR
 12.2102 +# -----------------
 12.2103 +AC_DEFUN([AC_LIBTOOL_OBJDIR],
 12.2104 +[AC_CACHE_CHECK([for objdir], [lt_cv_objdir],
 12.2105 +[rm -f .libs 2>/dev/null
 12.2106 +mkdir .libs 2>/dev/null
 12.2107 +if test -d .libs; then
 12.2108 +  lt_cv_objdir=.libs
 12.2109 +else
 12.2110 +  # MS-DOS does not allow filenames that begin with a dot.
 12.2111 +  lt_cv_objdir=_libs
 12.2112 +fi
 12.2113 +rmdir .libs 2>/dev/null])
 12.2114 +objdir=$lt_cv_objdir
 12.2115 +])# AC_LIBTOOL_OBJDIR
 12.2116 +
 12.2117 +
 12.2118 +# AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH([TAGNAME])
 12.2119 +# ----------------------------------------------
 12.2120 +# Check hardcoding attributes.
 12.2121 +AC_DEFUN([AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH],
 12.2122 +[AC_MSG_CHECKING([how to hardcode library paths into programs])
 12.2123 +_LT_AC_TAGVAR(hardcode_action, $1)=
 12.2124 +if test -n "$_LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)" || \
 12.2125 +   test -n "$_LT_AC_TAGVAR(runpath_var, $1)" || \
 12.2126 +   test "X$_LT_AC_TAGVAR(hardcode_automatic, $1)" = "Xyes" ; then
 12.2127 +
 12.2128 +  # We can hardcode non-existant directories.
 12.2129 +  if test "$_LT_AC_TAGVAR(hardcode_direct, $1)" != no &&
 12.2130 +     # If the only mechanism to avoid hardcoding is shlibpath_var, we
 12.2131 +     # have to relink, otherwise we might link with an installed library
 12.2132 +     # when we should be linking with a yet-to-be-installed one
 12.2133 +     ## test "$_LT_AC_TAGVAR(hardcode_shlibpath_var, $1)" != no &&
 12.2134 +     test "$_LT_AC_TAGVAR(hardcode_minus_L, $1)" != no; then
 12.2135 +    # Linking always hardcodes the temporary library directory.
 12.2136 +    _LT_AC_TAGVAR(hardcode_action, $1)=relink
 12.2137 +  else
 12.2138 +    # We can link without hardcoding, and we can hardcode nonexisting dirs.
 12.2139 +    _LT_AC_TAGVAR(hardcode_action, $1)=immediate
 12.2140 +  fi
 12.2141 +else
 12.2142 +  # We cannot hardcode anything, or else we can only hardcode existing
 12.2143 +  # directories.
 12.2144 +  _LT_AC_TAGVAR(hardcode_action, $1)=unsupported
 12.2145 +fi
 12.2146 +AC_MSG_RESULT([$_LT_AC_TAGVAR(hardcode_action, $1)])
 12.2147 +
 12.2148 +if test "$_LT_AC_TAGVAR(hardcode_action, $1)" = relink; then
 12.2149 +  # Fast installation is not supported
 12.2150 +  enable_fast_install=no
 12.2151 +elif test "$shlibpath_overrides_runpath" = yes ||
 12.2152 +     test "$enable_shared" = no; then
 12.2153 +  # Fast installation is not necessary
 12.2154 +  enable_fast_install=needless
 12.2155 +fi
 12.2156 +])# AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH
 12.2157 +
 12.2158 +
 12.2159 +# AC_LIBTOOL_SYS_LIB_STRIP
 12.2160 +# ------------------------
 12.2161 +AC_DEFUN([AC_LIBTOOL_SYS_LIB_STRIP],
 12.2162 +[striplib=
 12.2163 +old_striplib=
 12.2164 +AC_MSG_CHECKING([whether stripping libraries is possible])
 12.2165 +if test -n "$STRIP" && $STRIP -V 2>&1 | grep "GNU strip" >/dev/null; then
 12.2166 +  test -z "$old_striplib" && old_striplib="$STRIP --strip-debug"
 12.2167 +  test -z "$striplib" && striplib="$STRIP --strip-unneeded"
 12.2168 +  AC_MSG_RESULT([yes])
 12.2169 +else
 12.2170 +# FIXME - insert some real tests, host_os isn't really good enough
 12.2171 +  case $host_os in
 12.2172 +   darwin*)
 12.2173 +       if test -n "$STRIP" ; then
 12.2174 +         striplib="$STRIP -x"
 12.2175 +         AC_MSG_RESULT([yes])
 12.2176 +       else
 12.2177 +  AC_MSG_RESULT([no])
 12.2178 +fi
 12.2179 +       ;;
 12.2180 +   *)
 12.2181 +  AC_MSG_RESULT([no])
 12.2182 +    ;;
 12.2183 +  esac
 12.2184 +fi
 12.2185 +])# AC_LIBTOOL_SYS_LIB_STRIP
 12.2186 +
 12.2187 +
 12.2188 +# AC_LIBTOOL_SYS_DYNAMIC_LINKER
 12.2189 +# -----------------------------
 12.2190 +# PORTME Fill in your ld.so characteristics
 12.2191 +AC_DEFUN([AC_LIBTOOL_SYS_DYNAMIC_LINKER],
 12.2192 +[AC_MSG_CHECKING([dynamic linker characteristics])
 12.2193 +library_names_spec=
 12.2194 +libname_spec='lib$name'
 12.2195 +soname_spec=
 12.2196 +shrext_cmds=".so"
 12.2197 +postinstall_cmds=
 12.2198 +postuninstall_cmds=
 12.2199 +finish_cmds=
 12.2200 +finish_eval=
 12.2201 +shlibpath_var=
 12.2202 +shlibpath_overrides_runpath=unknown
 12.2203 +version_type=none
 12.2204 +dynamic_linker="$host_os ld.so"
 12.2205 +sys_lib_dlsearch_path_spec="/lib /usr/lib"
 12.2206 +if test "$GCC" = yes; then
 12.2207 +  sys_lib_search_path_spec=`$CC -print-search-dirs | grep "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"`
 12.2208 +  if echo "$sys_lib_search_path_spec" | grep ';' >/dev/null ; then
 12.2209 +    # if the path contains ";" then we assume it to be the separator
 12.2210 +    # otherwise default to the standard path separator (i.e. ":") - it is
 12.2211 +    # assumed that no part of a normal pathname contains ";" but that should
 12.2212 +    # okay in the real world where ";" in dirpaths is itself problematic.
 12.2213 +    sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'`
 12.2214 +  else
 12.2215 +    sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED  -e "s/$PATH_SEPARATOR/ /g"`
 12.2216 +  fi
 12.2217 +else
 12.2218 +  sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib"
 12.2219 +fi
 12.2220 +need_lib_prefix=unknown
 12.2221 +hardcode_into_libs=no
 12.2222 +
 12.2223 +# when you set need_version to no, make sure it does not cause -set_version
 12.2224 +# flags to be left without arguments
 12.2225 +need_version=unknown
 12.2226 +
 12.2227 +case $host_os in
 12.2228 +aix3*)
 12.2229 +  version_type=linux
 12.2230 +  library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a'
 12.2231 +  shlibpath_var=LIBPATH
 12.2232 +
 12.2233 +  # AIX 3 has no versioning support, so we append a major version to the name.
 12.2234 +  soname_spec='${libname}${release}${shared_ext}$major'
 12.2235 +  ;;
 12.2236 +
 12.2237 +aix4* | aix5*)
 12.2238 +  version_type=linux
 12.2239 +  need_lib_prefix=no
 12.2240 +  need_version=no
 12.2241 +  hardcode_into_libs=yes
 12.2242 +  if test "$host_cpu" = ia64; then
 12.2243 +    # AIX 5 supports IA64
 12.2244 +    library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}'
 12.2245 +    shlibpath_var=LD_LIBRARY_PATH
 12.2246 +  else
 12.2247 +    # With GCC up to 2.95.x, collect2 would create an import file
 12.2248 +    # for dependence libraries.  The import file would start with
 12.2249 +    # the line `#! .'.  This would cause the generated library to
 12.2250 +    # depend on `.', always an invalid library.  This was fixed in
 12.2251 +    # development snapshots of GCC prior to 3.0.
 12.2252 +    case $host_os in
 12.2253 +      aix4 | aix4.[[01]] | aix4.[[01]].*)
 12.2254 +      if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)'
 12.2255 +	   echo ' yes '
 12.2256 +	   echo '#endif'; } | ${CC} -E - | grep yes > /dev/null; then
 12.2257 +	:
 12.2258 +      else
 12.2259 +	can_build_shared=no
 12.2260 +      fi
 12.2261 +      ;;
 12.2262 +    esac
 12.2263 +    # AIX (on Power*) has no versioning support, so currently we can not hardcode correct
 12.2264 +    # soname into executable. Probably we can add versioning support to
 12.2265 +    # collect2, so additional links can be useful in future.
 12.2266 +    if test "$aix_use_runtimelinking" = yes; then
 12.2267 +      # If using run time linking (on AIX 4.2 or later) use lib<name>.so
 12.2268 +      # instead of lib<name>.a to let people know that these are not
 12.2269 +      # typical AIX shared libraries.
 12.2270 +      library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
 12.2271 +    else
 12.2272 +      # We preserve .a as extension for shared libraries through AIX4.2
 12.2273 +      # and later when we are not doing run time linking.
 12.2274 +      library_names_spec='${libname}${release}.a $libname.a'
 12.2275 +      soname_spec='${libname}${release}${shared_ext}$major'
 12.2276 +    fi
 12.2277 +    shlibpath_var=LIBPATH
 12.2278 +  fi
 12.2279 +  ;;
 12.2280 +
 12.2281 +amigaos*)
 12.2282 +  library_names_spec='$libname.ixlibrary $libname.a'
 12.2283 +  # Create ${libname}_ixlibrary.a entries in /sys/libs.
 12.2284 +  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'
 12.2285 +  ;;
 12.2286 +
 12.2287 +beos*)
 12.2288 +  library_names_spec='${libname}${shared_ext}'
 12.2289 +  dynamic_linker="$host_os ld.so"
 12.2290 +  shlibpath_var=LIBRARY_PATH
 12.2291 +  ;;
 12.2292 +
 12.2293 +bsdi[[45]]*)
 12.2294 +  version_type=linux
 12.2295 +  need_version=no
 12.2296 +  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
 12.2297 +  soname_spec='${libname}${release}${shared_ext}$major'
 12.2298 +  finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir'
 12.2299 +  shlibpath_var=LD_LIBRARY_PATH
 12.2300 +  sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib"
 12.2301 +  sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib"
 12.2302 +  # the default ld.so.conf also contains /usr/contrib/lib and
 12.2303 +  # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow
 12.2304 +  # libtool to hard-code these into programs
 12.2305 +  ;;
 12.2306 +
 12.2307 +cygwin* | mingw* | pw32*)
 12.2308 +  version_type=windows
 12.2309 +  shrext_cmds=".dll"
 12.2310 +  need_version=no
 12.2311 +  need_lib_prefix=no
 12.2312 +
 12.2313 +  case $GCC,$host_os in
 12.2314 +  yes,cygwin* | yes,mingw* | yes,pw32*)
 12.2315 +    library_names_spec='$libname.dll.a'
 12.2316 +    # DLL is installed to $(libdir)/../bin by postinstall_cmds
 12.2317 +    postinstall_cmds='base_file=`basename \${file}`~
 12.2318 +      dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i;echo \$dlname'\''`~
 12.2319 +      dldir=$destdir/`dirname \$dlpath`~
 12.2320 +      test -d \$dldir || mkdir -p \$dldir~
 12.2321 +      $install_prog $dir/$dlname \$dldir/$dlname~
 12.2322 +      chmod a+x \$dldir/$dlname'
 12.2323 +    postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~
 12.2324 +      dlpath=$dir/\$dldll~
 12.2325 +       $rm \$dlpath'
 12.2326 +    shlibpath_overrides_runpath=yes
 12.2327 +
 12.2328 +    case $host_os in
 12.2329 +    cygwin*)
 12.2330 +      # Cygwin DLLs use 'cyg' prefix rather than 'lib'
 12.2331 +      soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}'
 12.2332 +      sys_lib_search_path_spec="/usr/lib /lib/w32api /lib /usr/local/lib"
 12.2333 +      ;;
 12.2334 +    mingw*)
 12.2335 +      # MinGW DLLs use traditional 'lib' prefix
 12.2336 +      soname_spec='${libname}`echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}'
 12.2337 +      sys_lib_search_path_spec=`$CC -print-search-dirs | grep "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"`
 12.2338 +      if echo "$sys_lib_search_path_spec" | [grep ';[c-zC-Z]:/' >/dev/null]; then
 12.2339 +        # It is most probably a Windows format PATH printed by
 12.2340 +        # mingw gcc, but we are running on Cygwin. Gcc prints its search
 12.2341 +        # path with ; separators, and with drive letters. We can handle the
 12.2342 +        # drive letters (cygwin fileutils understands them), so leave them,
 12.2343 +        # especially as we might pass files found there to a mingw objdump,
 12.2344 +        # which wouldn't understand a cygwinified path. Ahh.
 12.2345 +        sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'`
 12.2346 +      else
 12.2347 +        sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED  -e "s/$PATH_SEPARATOR/ /g"`
 12.2348 +      fi
 12.2349 +      ;;
 12.2350 +    pw32*)
 12.2351 +      # pw32 DLLs use 'pw' prefix rather than 'lib'
 12.2352 +      library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}'
 12.2353 +      ;;
 12.2354 +    esac
 12.2355 +    ;;
 12.2356 +
 12.2357 +  *)
 12.2358 +    library_names_spec='${libname}`echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext} $libname.lib'
 12.2359 +    ;;
 12.2360 +  esac
 12.2361 +  dynamic_linker='Win32 ld.exe'
 12.2362 +  # FIXME: first we should search . and the directory the executable is in
 12.2363 +  shlibpath_var=PATH
 12.2364 +  ;;
 12.2365 +
 12.2366 +darwin* | rhapsody*)
 12.2367 +  dynamic_linker="$host_os dyld"
 12.2368 +  version_type=darwin
 12.2369 +  need_lib_prefix=no
 12.2370 +  need_version=no
 12.2371 +  library_names_spec='${libname}${release}${versuffix}$shared_ext ${libname}${release}${major}$shared_ext ${libname}$shared_ext'
 12.2372 +  soname_spec='${libname}${release}${major}$shared_ext'
 12.2373 +  shlibpath_overrides_runpath=yes
 12.2374 +  shlibpath_var=DYLD_LIBRARY_PATH
 12.2375 +  shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`'
 12.2376 +  # Apple's gcc prints 'gcc -print-search-dirs' doesn't operate the same.
 12.2377 +  if test "$GCC" = yes; then
 12.2378 +    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"`
 12.2379 +  else
 12.2380 +    sys_lib_search_path_spec='/lib /usr/lib /usr/local/lib'
 12.2381 +  fi
 12.2382 +  sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib'
 12.2383 +  ;;
 12.2384 +
 12.2385 +dgux*)
 12.2386 +  version_type=linux
 12.2387 +  need_lib_prefix=no
 12.2388 +  need_version=no
 12.2389 +  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext'
 12.2390 +  soname_spec='${libname}${release}${shared_ext}$major'
 12.2391 +  shlibpath_var=LD_LIBRARY_PATH
 12.2392 +  ;;
 12.2393 +
 12.2394 +freebsd1*)
 12.2395 +  dynamic_linker=no
 12.2396 +  ;;
 12.2397 +
 12.2398 +kfreebsd*-gnu)
 12.2399 +  version_type=linux
 12.2400 +  need_lib_prefix=no
 12.2401 +  need_version=no
 12.2402 +  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
 12.2403 +  soname_spec='${libname}${release}${shared_ext}$major'
 12.2404 +  shlibpath_var=LD_LIBRARY_PATH
 12.2405 +  shlibpath_overrides_runpath=no
 12.2406 +  hardcode_into_libs=yes
 12.2407 +  dynamic_linker='GNU ld.so'
 12.2408 +  ;;
 12.2409 +
 12.2410 +freebsd* | dragonfly*)
 12.2411 +  # DragonFly does not have aout.  When/if they implement a new
 12.2412 +  # versioning mechanism, adjust this.
 12.2413 +  if test -x /usr/bin/objformat; then
 12.2414 +    objformat=`/usr/bin/objformat`
 12.2415 +  else
 12.2416 +    case $host_os in
 12.2417 +    freebsd[[123]]*) objformat=aout ;;
 12.2418 +    *) objformat=elf ;;
 12.2419 +    esac
 12.2420 +  fi
 12.2421 +  version_type=freebsd-$objformat
 12.2422 +  case $version_type in
 12.2423 +    freebsd-elf*)
 12.2424 +      library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}'
 12.2425 +      need_version=no
 12.2426 +      need_lib_prefix=no
 12.2427 +      ;;
 12.2428 +    freebsd-*)
 12.2429 +      library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix'
 12.2430 +      need_version=yes
 12.2431 +      ;;
 12.2432 +  esac
 12.2433 +  shlibpath_var=LD_LIBRARY_PATH
 12.2434 +  case $host_os in
 12.2435 +  freebsd2*)
 12.2436 +    shlibpath_overrides_runpath=yes
 12.2437 +    ;;
 12.2438 +  freebsd3.[[01]]* | freebsdelf3.[[01]]*)
 12.2439 +    shlibpath_overrides_runpath=yes
 12.2440 +    hardcode_into_libs=yes
 12.2441 +    ;;
 12.2442 +  freebsd3.[[2-9]]* | freebsdelf3.[[2-9]]* | \
 12.2443 +  freebsd4.[[0-5]] | freebsdelf4.[[0-5]] | freebsd4.1.1 | freebsdelf4.1.1)
 12.2444 +    shlibpath_overrides_runpath=no
 12.2445 +    hardcode_into_libs=yes
 12.2446 +    ;;
 12.2447 +  freebsd*) # from 4.6 on
 12.2448 +    shlibpath_overrides_runpath=yes
 12.2449 +    hardcode_into_libs=yes
 12.2450 +    ;;
 12.2451 +  esac
 12.2452 +  ;;
 12.2453 +
 12.2454 +gnu*)
 12.2455 +  version_type=linux
 12.2456 +  need_lib_prefix=no
 12.2457 +  need_version=no
 12.2458 +  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}'
 12.2459 +  soname_spec='${libname}${release}${shared_ext}$major'
 12.2460 +  shlibpath_var=LD_LIBRARY_PATH
 12.2461 +  hardcode_into_libs=yes
 12.2462 +  ;;
 12.2463 +
 12.2464 +hpux9* | hpux10* | hpux11*)
 12.2465 +  # Give a soname corresponding to the major version so that dld.sl refuses to
 12.2466 +  # link against other versions.
 12.2467 +  version_type=sunos
 12.2468 +  need_lib_prefix=no
 12.2469 +  need_version=no
 12.2470 +  case $host_cpu in
 12.2471 +  ia64*)
 12.2472 +    shrext_cmds='.so'
 12.2473 +    hardcode_into_libs=yes
 12.2474 +    dynamic_linker="$host_os dld.so"
 12.2475 +    shlibpath_var=LD_LIBRARY_PATH
 12.2476 +    shlibpath_overrides_runpath=yes # Unless +noenvvar is specified.
 12.2477 +    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
 12.2478 +    soname_spec='${libname}${release}${shared_ext}$major'
 12.2479 +    if test "X$HPUX_IA64_MODE" = X32; then
 12.2480 +      sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib"
 12.2481 +    else
 12.2482 +      sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64"
 12.2483 +    fi
 12.2484 +    sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec
 12.2485 +    ;;
 12.2486 +   hppa*64*)
 12.2487 +     shrext_cmds='.sl'
 12.2488 +     hardcode_into_libs=yes
 12.2489 +     dynamic_linker="$host_os dld.sl"
 12.2490 +     shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH
 12.2491 +     shlibpath_overrides_runpath=yes # Unless +noenvvar is specified.
 12.2492 +     library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
 12.2493 +     soname_spec='${libname}${release}${shared_ext}$major'
 12.2494 +     sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64"
 12.2495 +     sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec
 12.2496 +     ;;
 12.2497 +   *)
 12.2498 +    shrext_cmds='.sl'
 12.2499 +    dynamic_linker="$host_os dld.sl"
 12.2500 +    shlibpath_var=SHLIB_PATH
 12.2501 +    shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH
 12.2502 +    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
 12.2503 +    soname_spec='${libname}${release}${shared_ext}$major'
 12.2504 +    ;;
 12.2505 +  esac
 12.2506 +  # HP-UX runs *really* slowly unless shared libraries are mode 555.
 12.2507 +  postinstall_cmds='chmod 555 $lib'
 12.2508 +  ;;
 12.2509 +
 12.2510 +interix3*)
 12.2511 +  version_type=linux
 12.2512 +  need_lib_prefix=no
 12.2513 +  need_version=no
 12.2514 +  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
 12.2515 +  soname_spec='${libname}${release}${shared_ext}$major'
 12.2516 +  dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)'
 12.2517 +  shlibpath_var=LD_LIBRARY_PATH
 12.2518 +  shlibpath_overrides_runpath=no
 12.2519 +  hardcode_into_libs=yes
 12.2520 +  ;;
 12.2521 +
 12.2522 +irix5* | irix6* | nonstopux*)
 12.2523 +  case $host_os in
 12.2524 +    nonstopux*) version_type=nonstopux ;;
 12.2525 +    *)
 12.2526 +	if test "$lt_cv_prog_gnu_ld" = yes; then
 12.2527 +		version_type=linux
 12.2528 +	else
 12.2529 +		version_type=irix
 12.2530 +	fi ;;
 12.2531 +  esac
 12.2532 +  need_lib_prefix=no
 12.2533 +  need_version=no
 12.2534 +  soname_spec='${libname}${release}${shared_ext}$major'
 12.2535 +  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}'
 12.2536 +  case $host_os in
 12.2537 +  irix5* | nonstopux*)
 12.2538 +    libsuff= shlibsuff=
 12.2539 +    ;;
 12.2540 +  *)
 12.2541 +    case $LD in # libtool.m4 will add one of these switches to LD
 12.2542 +    *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ")
 12.2543 +      libsuff= shlibsuff= libmagic=32-bit;;
 12.2544 +    *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ")
 12.2545 +      libsuff=32 shlibsuff=N32 libmagic=N32;;
 12.2546 +    *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ")
 12.2547 +      libsuff=64 shlibsuff=64 libmagic=64-bit;;
 12.2548 +    *) libsuff= shlibsuff= libmagic=never-match;;
 12.2549 +    esac
 12.2550 +    ;;
 12.2551 +  esac
 12.2552 +  shlibpath_var=LD_LIBRARY${shlibsuff}_PATH
 12.2553 +  shlibpath_overrides_runpath=no
 12.2554 +  sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}"
 12.2555 +  sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}"
 12.2556 +  hardcode_into_libs=yes
 12.2557 +  ;;
 12.2558 +
 12.2559 +# No shared lib support for Linux oldld, aout, or coff.
 12.2560 +linux*oldld* | linux*aout* | linux*coff*)
 12.2561 +  dynamic_linker=no
 12.2562 +  ;;
 12.2563 +
 12.2564 +# This must be Linux ELF.
 12.2565 +linux*)
 12.2566 +  version_type=linux
 12.2567 +  need_lib_prefix=no
 12.2568 +  need_version=no
 12.2569 +  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
 12.2570 +  soname_spec='${libname}${release}${shared_ext}$major'
 12.2571 +  finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir'
 12.2572 +  shlibpath_var=LD_LIBRARY_PATH
 12.2573 +  shlibpath_overrides_runpath=no
 12.2574 +  # This implies no fast_install, which is unacceptable.
 12.2575 +  # Some rework will be needed to allow for fast_install
 12.2576 +  # before this can be enabled.
 12.2577 +  hardcode_into_libs=yes
 12.2578 +
 12.2579 +  # Append ld.so.conf contents to the search path
 12.2580 +  if test -f /etc/ld.so.conf; then
 12.2581 +    lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s", \[$]2)); skip = 1; } { if (!skip) print \[$]0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;s/[:,	]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;/^$/d' | tr '\n' ' '`
 12.2582 +    sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra"
 12.2583 +  fi
 12.2584 +
 12.2585 +  # We used to test for /lib/ld.so.1 and disable shared libraries on
 12.2586 +  # powerpc, because MkLinux only supported shared libraries with the
 12.2587 +  # GNU dynamic linker.  Since this was broken with cross compilers,
 12.2588 +  # most powerpc-linux boxes support dynamic linking these days and
 12.2589 +  # people can always --disable-shared, the test was removed, and we
 12.2590 +  # assume the GNU/Linux dynamic linker is in use.
 12.2591 +  dynamic_linker='GNU/Linux ld.so'
 12.2592 +  ;;
 12.2593 +
 12.2594 +netbsdelf*-gnu)
 12.2595 +  version_type=linux
 12.2596 +  need_lib_prefix=no
 12.2597 +  need_version=no
 12.2598 +  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
 12.2599 +  soname_spec='${libname}${release}${shared_ext}$major'
 12.2600 +  shlibpath_var=LD_LIBRARY_PATH
 12.2601 +  shlibpath_overrides_runpath=no
 12.2602 +  hardcode_into_libs=yes
 12.2603 +  dynamic_linker='NetBSD ld.elf_so'
 12.2604 +  ;;
 12.2605 +
 12.2606 +knetbsd*-gnu)
 12.2607 +  version_type=linux
 12.2608 +  need_lib_prefix=no
 12.2609 +  need_version=no
 12.2610 +  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
 12.2611 +  soname_spec='${libname}${release}${shared_ext}$major'
 12.2612 +  shlibpath_var=LD_LIBRARY_PATH
 12.2613 +  shlibpath_overrides_runpath=no
 12.2614 +  hardcode_into_libs=yes
 12.2615 +  dynamic_linker='GNU ld.so'
 12.2616 +  ;;
 12.2617 +
 12.2618 +netbsd*)
 12.2619 +  version_type=sunos
 12.2620 +  need_lib_prefix=no
 12.2621 +  need_version=no
 12.2622 +  if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then
 12.2623 +    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
 12.2624 +    finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir'
 12.2625 +    dynamic_linker='NetBSD (a.out) ld.so'
 12.2626 +  else
 12.2627 +    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
 12.2628 +    soname_spec='${libname}${release}${shared_ext}$major'
 12.2629 +    dynamic_linker='NetBSD ld.elf_so'
 12.2630 +  fi
 12.2631 +  shlibpath_var=LD_LIBRARY_PATH
 12.2632 +  shlibpath_overrides_runpath=yes
 12.2633 +  hardcode_into_libs=yes
 12.2634 +  ;;
 12.2635 +
 12.2636 +newsos6)
 12.2637 +  version_type=linux
 12.2638 +  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
 12.2639 +  shlibpath_var=LD_LIBRARY_PATH
 12.2640 +  shlibpath_overrides_runpath=yes
 12.2641 +  ;;
 12.2642 +
 12.2643 +nto-qnx*)
 12.2644 +  version_type=linux
 12.2645 +  need_lib_prefix=no
 12.2646 +  need_version=no
 12.2647 +  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
 12.2648 +  soname_spec='${libname}${release}${shared_ext}$major'
 12.2649 +  shlibpath_var=LD_LIBRARY_PATH
 12.2650 +  shlibpath_overrides_runpath=yes
 12.2651 +  ;;
 12.2652 +
 12.2653 +openbsd*)
 12.2654 +  version_type=sunos
 12.2655 +  sys_lib_dlsearch_path_spec="/usr/lib"
 12.2656 +  need_lib_prefix=no
 12.2657 +  # Some older versions of OpenBSD (3.3 at least) *do* need versioned libs.
 12.2658 +  case $host_os in
 12.2659 +    openbsd3.3 | openbsd3.3.*) need_version=yes ;;
 12.2660 +    *)                         need_version=no  ;;
 12.2661 +  esac
 12.2662 +  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
 12.2663 +  finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir'
 12.2664 +  shlibpath_var=LD_LIBRARY_PATH
 12.2665 +  if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
 12.2666 +    case $host_os in
 12.2667 +      openbsd2.[[89]] | openbsd2.[[89]].*)
 12.2668 +	shlibpath_overrides_runpath=no
 12.2669 +	;;
 12.2670 +      *)
 12.2671 +	shlibpath_overrides_runpath=yes
 12.2672 +	;;
 12.2673 +      esac
 12.2674 +  else
 12.2675 +    shlibpath_overrides_runpath=yes
 12.2676 +  fi
 12.2677 +  ;;
 12.2678 +
 12.2679 +os2*)
 12.2680 +  libname_spec='$name'
 12.2681 +  shrext_cmds=".dll"
 12.2682 +  need_lib_prefix=no
 12.2683 +  library_names_spec='$libname${shared_ext} $libname.a'
 12.2684 +  dynamic_linker='OS/2 ld.exe'
 12.2685 +  shlibpath_var=LIBPATH
 12.2686 +  ;;
 12.2687 +
 12.2688 +osf3* | osf4* | osf5*)
 12.2689 +  version_type=osf
 12.2690 +  need_lib_prefix=no
 12.2691 +  need_version=no
 12.2692 +  soname_spec='${libname}${release}${shared_ext}$major'
 12.2693 +  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
 12.2694 +  shlibpath_var=LD_LIBRARY_PATH
 12.2695 +  sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib"
 12.2696 +  sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec"
 12.2697 +  ;;
 12.2698 +
 12.2699 +solaris*)
 12.2700 +  version_type=linux
 12.2701 +  need_lib_prefix=no
 12.2702 +  need_version=no
 12.2703 +  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
 12.2704 +  soname_spec='${libname}${release}${shared_ext}$major'
 12.2705 +  shlibpath_var=LD_LIBRARY_PATH
 12.2706 +  shlibpath_overrides_runpath=yes
 12.2707 +  hardcode_into_libs=yes
 12.2708 +  # ldd complains unless libraries are executable
 12.2709 +  postinstall_cmds='chmod +x $lib'
 12.2710 +  ;;
 12.2711 +
 12.2712 +sunos4*)
 12.2713 +  version_type=sunos
 12.2714 +  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
 12.2715 +  finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir'
 12.2716 +  shlibpath_var=LD_LIBRARY_PATH
 12.2717 +  shlibpath_overrides_runpath=yes
 12.2718 +  if test "$with_gnu_ld" = yes; then
 12.2719 +    need_lib_prefix=no
 12.2720 +  fi
 12.2721 +  need_version=yes
 12.2722 +  ;;
 12.2723 +
 12.2724 +sysv4 | sysv4.3*)
 12.2725 +  version_type=linux
 12.2726 +  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
 12.2727 +  soname_spec='${libname}${release}${shared_ext}$major'
 12.2728 +  shlibpath_var=LD_LIBRARY_PATH
 12.2729 +  case $host_vendor in
 12.2730 +    sni)
 12.2731 +      shlibpath_overrides_runpath=no
 12.2732 +      need_lib_prefix=no
 12.2733 +      export_dynamic_flag_spec='${wl}-Blargedynsym'
 12.2734 +      runpath_var=LD_RUN_PATH
 12.2735 +      ;;
 12.2736 +    siemens)
 12.2737 +      need_lib_prefix=no
 12.2738 +      ;;
 12.2739 +    motorola)
 12.2740 +      need_lib_prefix=no
 12.2741 +      need_version=no
 12.2742 +      shlibpath_overrides_runpath=no
 12.2743 +      sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib'
 12.2744 +      ;;
 12.2745 +  esac
 12.2746 +  ;;
 12.2747 +
 12.2748 +sysv4*MP*)
 12.2749 +  if test -d /usr/nec ;then
 12.2750 +    version_type=linux
 12.2751 +    library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}'
 12.2752 +    soname_spec='$libname${shared_ext}.$major'
 12.2753 +    shlibpath_var=LD_LIBRARY_PATH
 12.2754 +  fi
 12.2755 +  ;;
 12.2756 +
 12.2757 +sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*)
 12.2758 +  version_type=freebsd-elf
 12.2759 +  need_lib_prefix=no
 12.2760 +  need_version=no
 12.2761 +  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}'
 12.2762 +  soname_spec='${libname}${release}${shared_ext}$major'
 12.2763 +  shlibpath_var=LD_LIBRARY_PATH
 12.2764 +  hardcode_into_libs=yes
 12.2765 +  if test "$with_gnu_ld" = yes; then
 12.2766 +    sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib'
 12.2767 +    shlibpath_overrides_runpath=no
 12.2768 +  else
 12.2769 +    sys_lib_search_path_spec='/usr/ccs/lib /usr/lib'
 12.2770 +    shlibpath_overrides_runpath=yes
 12.2771 +    case $host_os in
 12.2772 +      sco3.2v5*)
 12.2773 +        sys_lib_search_path_spec="$sys_lib_search_path_spec /lib"
 12.2774 +	;;
 12.2775 +    esac
 12.2776 +  fi
 12.2777 +  sys_lib_dlsearch_path_spec='/usr/lib'
 12.2778 +  ;;
 12.2779 +
 12.2780 +uts4*)
 12.2781 +  version_type=linux
 12.2782 +  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
 12.2783 +  soname_spec='${libname}${release}${shared_ext}$major'
 12.2784 +  shlibpath_var=LD_LIBRARY_PATH
 12.2785 +  ;;
 12.2786 +
 12.2787 +*)
 12.2788 +  dynamic_linker=no
 12.2789 +  ;;
 12.2790 +esac
 12.2791 +AC_MSG_RESULT([$dynamic_linker])
 12.2792 +test "$dynamic_linker" = no && can_build_shared=no
 12.2793 +
 12.2794 +variables_saved_for_relink="PATH $shlibpath_var $runpath_var"
 12.2795 +if test "$GCC" = yes; then
 12.2796 +  variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH"
 12.2797 +fi
 12.2798 +])# AC_LIBTOOL_SYS_DYNAMIC_LINKER
 12.2799 +
 12.2800 +
 12.2801 +# _LT_AC_TAGCONFIG
 12.2802 +# ----------------
 12.2803 +AC_DEFUN([_LT_AC_TAGCONFIG],
 12.2804 +[AC_ARG_WITH([tags],
 12.2805 +    [AC_HELP_STRING([--with-tags@<:@=TAGS@:>@],
 12.2806 +        [include additional configurations @<:@automatic@:>@])],
 12.2807 +    [tagnames="$withval"])
 12.2808 +
 12.2809 +if test -f "$ltmain" && test -n "$tagnames"; then
 12.2810 +  if test ! -f "${ofile}"; then
 12.2811 +    AC_MSG_WARN([output file `$ofile' does not exist])
 12.2812 +  fi
 12.2813 +
 12.2814 +  if test -z "$LTCC"; then
 12.2815 +    eval "`$SHELL ${ofile} --config | grep '^LTCC='`"
 12.2816 +    if test -z "$LTCC"; then
 12.2817 +      AC_MSG_WARN([output file `$ofile' does not look like a libtool script])
 12.2818 +    else
 12.2819 +      AC_MSG_WARN([using `LTCC=$LTCC', extracted from `$ofile'])
 12.2820 +    fi
 12.2821 +  fi
 12.2822 +  if test -z "$LTCFLAGS"; then
 12.2823 +    eval "`$SHELL ${ofile} --config | grep '^LTCFLAGS='`"
 12.2824 +  fi
 12.2825 +
 12.2826 +  # Extract list of available tagged configurations in $ofile.
 12.2827 +  # Note that this assumes the entire list is on one line.
 12.2828 +  available_tags=`grep "^available_tags=" "${ofile}" | $SED -e 's/available_tags=\(.*$\)/\1/' -e 's/\"//g'`
 12.2829 +
 12.2830 +  lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR,"
 12.2831 +  for tagname in $tagnames; do
 12.2832 +    IFS="$lt_save_ifs"
 12.2833 +    # Check whether tagname contains only valid characters
 12.2834 +    case `$echo "X$tagname" | $Xsed -e 's:[[-_ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890,/]]::g'` in
 12.2835 +    "") ;;
 12.2836 +    *)  AC_MSG_ERROR([invalid tag name: $tagname])
 12.2837 +	;;
 12.2838 +    esac
 12.2839 +
 12.2840 +    if grep "^# ### BEGIN LIBTOOL TAG CONFIG: $tagname$" < "${ofile}" > /dev/null
 12.2841 +    then
 12.2842 +      AC_MSG_ERROR([tag name \"$tagname\" already exists])
 12.2843 +    fi
 12.2844 +
 12.2845 +    # Update the list of available tags.
 12.2846 +    if test -n "$tagname"; then
 12.2847 +      echo appending configuration tag \"$tagname\" to $ofile
 12.2848 +
 12.2849 +      case $tagname in
 12.2850 +      CXX)
 12.2851 +	if test -n "$CXX" && ( test "X$CXX" != "Xno" &&
 12.2852 +	    ( (test "X$CXX" = "Xg++" && `g++ -v >/dev/null 2>&1` ) ||
 12.2853 +	    (test "X$CXX" != "Xg++"))) ; then
 12.2854 +	  AC_LIBTOOL_LANG_CXX_CONFIG
 12.2855 +	else
 12.2856 +	  tagname=""
 12.2857 +	fi
 12.2858 +	;;
 12.2859 +
 12.2860 +      F77)
 12.2861 +	if test -n "$F77" && test "X$F77" != "Xno"; then
 12.2862 +	  AC_LIBTOOL_LANG_F77_CONFIG
 12.2863 +	else
 12.2864 +	  tagname=""
 12.2865 +	fi
 12.2866 +	;;
 12.2867 +
 12.2868 +      GCJ)
 12.2869 +	if test -n "$GCJ" && test "X$GCJ" != "Xno"; then
 12.2870 +	  AC_LIBTOOL_LANG_GCJ_CONFIG
 12.2871 +	else
 12.2872 +	  tagname=""
 12.2873 +	fi
 12.2874 +	;;
 12.2875 +
 12.2876 +      RC)
 12.2877 +	AC_LIBTOOL_LANG_RC_CONFIG
 12.2878 +	;;
 12.2879 +
 12.2880 +      *)
 12.2881 +	AC_MSG_ERROR([Unsupported tag name: $tagname])
 12.2882 +	;;
 12.2883 +      esac
 12.2884 +
 12.2885 +      # Append the new tag name to the list of available tags.
 12.2886 +      if test -n "$tagname" ; then
 12.2887 +      available_tags="$available_tags $tagname"
 12.2888 +    fi
 12.2889 +    fi
 12.2890 +  done
 12.2891 +  IFS="$lt_save_ifs"
 12.2892 +
 12.2893 +  # Now substitute the updated list of available tags.
 12.2894 +  if eval "sed -e 's/^available_tags=.*\$/available_tags=\"$available_tags\"/' \"$ofile\" > \"${ofile}T\""; then
 12.2895 +    mv "${ofile}T" "$ofile"
 12.2896 +    chmod +x "$ofile"
 12.2897 +  else
 12.2898 +    rm -f "${ofile}T"
 12.2899 +    AC_MSG_ERROR([unable to update list of available tagged configurations.])
 12.2900 +  fi
 12.2901 +fi
 12.2902 +])# _LT_AC_TAGCONFIG
 12.2903 +
 12.2904 +
 12.2905 +# AC_LIBTOOL_DLOPEN
 12.2906 +# -----------------
 12.2907 +# enable checks for dlopen support
 12.2908 +AC_DEFUN([AC_LIBTOOL_DLOPEN],
 12.2909 + [AC_BEFORE([$0],[AC_LIBTOOL_SETUP])
 12.2910 +])# AC_LIBTOOL_DLOPEN
 12.2911 +
 12.2912 +
 12.2913 +# AC_LIBTOOL_WIN32_DLL
 12.2914 +# --------------------
 12.2915 +# declare package support for building win32 DLLs
 12.2916 +AC_DEFUN([AC_LIBTOOL_WIN32_DLL],
 12.2917 +[AC_BEFORE([$0], [AC_LIBTOOL_SETUP])
 12.2918 +])# AC_LIBTOOL_WIN32_DLL
 12.2919 +
 12.2920 +
 12.2921 +# AC_ENABLE_SHARED([DEFAULT])
 12.2922 +# ---------------------------
 12.2923 +# implement the --enable-shared flag
 12.2924 +# DEFAULT is either `yes' or `no'.  If omitted, it defaults to `yes'.
 12.2925 +AC_DEFUN([AC_ENABLE_SHARED],
 12.2926 +[define([AC_ENABLE_SHARED_DEFAULT], ifelse($1, no, no, yes))dnl
 12.2927 +AC_ARG_ENABLE([shared],
 12.2928 +    [AC_HELP_STRING([--enable-shared@<:@=PKGS@:>@],
 12.2929 +	[build shared libraries @<:@default=]AC_ENABLE_SHARED_DEFAULT[@:>@])],
 12.2930 +    [p=${PACKAGE-default}
 12.2931 +    case $enableval in
 12.2932 +    yes) enable_shared=yes ;;
 12.2933 +    no) enable_shared=no ;;
 12.2934 +    *)
 12.2935 +      enable_shared=no
 12.2936 +      # Look at the argument we got.  We use all the common list separators.
 12.2937 +      lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR,"
 12.2938 +      for pkg in $enableval; do
 12.2939 +	IFS="$lt_save_ifs"
 12.2940 +	if test "X$pkg" = "X$p"; then
 12.2941 +	  enable_shared=yes
 12.2942 +	fi
 12.2943 +      done
 12.2944 +      IFS="$lt_save_ifs"
 12.2945 +      ;;
 12.2946 +    esac],
 12.2947 +    [enable_shared=]AC_ENABLE_SHARED_DEFAULT)
 12.2948 +])# AC_ENABLE_SHARED
 12.2949 +
 12.2950 +
 12.2951 +# AC_DISABLE_SHARED
 12.2952 +# -----------------
 12.2953 +# set the default shared flag to --disable-shared
 12.2954 +AC_DEFUN([AC_DISABLE_SHARED],
 12.2955 +[AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl
 12.2956 +AC_ENABLE_SHARED(no)
 12.2957 +])# AC_DISABLE_SHARED
 12.2958 +
 12.2959 +
 12.2960 +# AC_ENABLE_STATIC([DEFAULT])
 12.2961 +# ---------------------------
 12.2962 +# implement the --enable-static flag
 12.2963 +# DEFAULT is either `yes' or `no'.  If omitted, it defaults to `yes'.
 12.2964 +AC_DEFUN([AC_ENABLE_STATIC],
 12.2965 +[define([AC_ENABLE_STATIC_DEFAULT], ifelse($1, no, no, yes))dnl
 12.2966 +AC_ARG_ENABLE([static],
 12.2967 +    [AC_HELP_STRING([--enable-static@<:@=PKGS@:>@],
 12.2968 +	[build static libraries @<:@default=]AC_ENABLE_STATIC_DEFAULT[@:>@])],
 12.2969 +    [p=${PACKAGE-default}
 12.2970 +    case $enableval in
 12.2971 +    yes) enable_static=yes ;;
 12.2972 +    no) enable_static=no ;;
 12.2973 +    *)
 12.2974 +     enable_static=no
 12.2975 +      # Look at the argument we got.  We use all the common list separators.
 12.2976 +      lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR,"
 12.2977 +      for pkg in $enableval; do
 12.2978 +	IFS="$lt_save_ifs"
 12.2979 +	if test "X$pkg" = "X$p"; then
 12.2980 +	  enable_static=yes
 12.2981 +	fi
 12.2982 +      done
 12.2983 +      IFS="$lt_save_ifs"
 12.2984 +      ;;
 12.2985 +    esac],
 12.2986 +    [enable_static=]AC_ENABLE_STATIC_DEFAULT)
 12.2987 +])# AC_ENABLE_STATIC
 12.2988 +
 12.2989 +
 12.2990 +# AC_DISABLE_STATIC
 12.2991 +# -----------------
 12.2992 +# set the default static flag to --disable-static
 12.2993 +AC_DEFUN([AC_DISABLE_STATIC],
 12.2994 +[AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl
 12.2995 +AC_ENABLE_STATIC(no)
 12.2996 +])# AC_DISABLE_STATIC
 12.2997 +
 12.2998 +
 12.2999 +# AC_ENABLE_FAST_INSTALL([DEFAULT])
 12.3000 +# ---------------------------------
 12.3001 +# implement the --enable-fast-install flag
 12.3002 +# DEFAULT is either `yes' or `no'.  If omitted, it defaults to `yes'.
 12.3003 +AC_DEFUN([AC_ENABLE_FAST_INSTALL],
 12.3004 +[define([AC_ENABLE_FAST_INSTALL_DEFAULT], ifelse($1, no, no, yes))dnl
 12.3005 +AC_ARG_ENABLE([fast-install],
 12.3006 +    [AC_HELP_STRING([--enable-fast-install@<:@=PKGS@:>@],
 12.3007 +    [optimize for fast installation @<:@default=]AC_ENABLE_FAST_INSTALL_DEFAULT[@:>@])],
 12.3008 +    [p=${PACKAGE-default}
 12.3009 +    case $enableval in
 12.3010 +    yes) enable_fast_install=yes ;;
 12.3011 +    no) enable_fast_install=no ;;
 12.3012 +    *)
 12.3013 +      enable_fast_install=no
 12.3014 +      # Look at the argument we got.  We use all the common list separators.
 12.3015 +      lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR,"
 12.3016 +      for pkg in $enableval; do
 12.3017 +	IFS="$lt_save_ifs"
 12.3018 +	if test "X$pkg" = "X$p"; then
 12.3019 +	  enable_fast_install=yes
 12.3020 +	fi
 12.3021 +      done
 12.3022 +      IFS="$lt_save_ifs"
 12.3023 +      ;;
 12.3024 +    esac],
 12.3025 +    [enable_fast_install=]AC_ENABLE_FAST_INSTALL_DEFAULT)
 12.3026 +])# AC_ENABLE_FAST_INSTALL
 12.3027 +
 12.3028 +
 12.3029 +# AC_DISABLE_FAST_INSTALL
 12.3030 +# -----------------------
 12.3031 +# set the default to --disable-fast-install
 12.3032 +AC_DEFUN([AC_DISABLE_FAST_INSTALL],
 12.3033 +[AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl
 12.3034 +AC_ENABLE_FAST_INSTALL(no)
 12.3035 +])# AC_DISABLE_FAST_INSTALL
 12.3036 +
 12.3037 +
 12.3038 +# AC_LIBTOOL_PICMODE([MODE])
 12.3039 +# --------------------------
 12.3040 +# implement the --with-pic flag
 12.3041 +# MODE is either `yes' or `no'.  If omitted, it defaults to `both'.
 12.3042 +AC_DEFUN([AC_LIBTOOL_PICMODE],
 12.3043 +[AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl
 12.3044 +pic_mode=ifelse($#,1,$1,default)
 12.3045 +])# AC_LIBTOOL_PICMODE
 12.3046 +
 12.3047 +
 12.3048 +# AC_PROG_EGREP
 12.3049 +# -------------
 12.3050 +# This is predefined starting with Autoconf 2.54, so this conditional
 12.3051 +# definition can be removed once we require Autoconf 2.54 or later.
 12.3052 +m4_ifndef([AC_PROG_EGREP], [AC_DEFUN([AC_PROG_EGREP],
 12.3053 +[AC_CACHE_CHECK([for egrep], [ac_cv_prog_egrep],
 12.3054 +   [if echo a | (grep -E '(a|b)') >/dev/null 2>&1
 12.3055 +    then ac_cv_prog_egrep='grep -E'
 12.3056 +    else ac_cv_prog_egrep='egrep'
 12.3057 +    fi])
 12.3058 + EGREP=$ac_cv_prog_egrep
 12.3059 + AC_SUBST([EGREP])
 12.3060 +])])
 12.3061 +
 12.3062 +
 12.3063 +# AC_PATH_TOOL_PREFIX
 12.3064 +# -------------------
 12.3065 +# find a file program which can recognise shared library
 12.3066 +AC_DEFUN([AC_PATH_TOOL_PREFIX],
 12.3067 +[AC_REQUIRE([AC_PROG_EGREP])dnl
 12.3068 +AC_MSG_CHECKING([for $1])
 12.3069 +AC_CACHE_VAL(lt_cv_path_MAGIC_CMD,
 12.3070 +[case $MAGIC_CMD in
 12.3071 +[[\\/*] |  ?:[\\/]*])
 12.3072 +  lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path.
 12.3073 +  ;;
 12.3074 +*)
 12.3075 +  lt_save_MAGIC_CMD="$MAGIC_CMD"
 12.3076 +  lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
 12.3077 +dnl $ac_dummy forces splitting on constant user-supplied paths.
 12.3078 +dnl POSIX.2 word splitting is done only on the output of word expansions,
 12.3079 +dnl not every word.  This closes a longstanding sh security hole.
 12.3080 +  ac_dummy="ifelse([$2], , $PATH, [$2])"
 12.3081 +  for ac_dir in $ac_dummy; do
 12.3082 +    IFS="$lt_save_ifs"
 12.3083 +    test -z "$ac_dir" && ac_dir=.
 12.3084 +    if test -f $ac_dir/$1; then
 12.3085 +      lt_cv_path_MAGIC_CMD="$ac_dir/$1"
 12.3086 +      if test -n "$file_magic_test_file"; then
 12.3087 +	case $deplibs_check_method in
 12.3088 +	"file_magic "*)
 12.3089 +	  file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"`
 12.3090 +	  MAGIC_CMD="$lt_cv_path_MAGIC_CMD"
 12.3091 +	  if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null |
 12.3092 +	    $EGREP "$file_magic_regex" > /dev/null; then
 12.3093 +	    :
 12.3094 +	  else
 12.3095 +	    cat <<EOF 1>&2
 12.3096 +
 12.3097 +*** Warning: the command libtool uses to detect shared libraries,
 12.3098 +*** $file_magic_cmd, produces output that libtool cannot recognize.
 12.3099 +*** The result is that libtool may fail to recognize shared libraries
 12.3100 +*** as such.  This will affect the creation of libtool libraries that
 12.3101 +*** depend on shared libraries, but programs linked with such libtool
 12.3102 +*** libraries will work regardless of this problem.  Nevertheless, you
 12.3103 +*** may want to report the problem to your system manager and/or to
 12.3104 +*** bug-libtool@gnu.org
 12.3105 +
 12.3106 +EOF
 12.3107 +	  fi ;;
 12.3108 +	esac
 12.3109 +      fi
 12.3110 +      break
 12.3111 +    fi
 12.3112 +  done
 12.3113 +  IFS="$lt_save_ifs"
 12.3114 +  MAGIC_CMD="$lt_save_MAGIC_CMD"
 12.3115 +  ;;
 12.3116 +esac])
 12.3117 +MAGIC_CMD="$lt_cv_path_MAGIC_CMD"
 12.3118 +if test -n "$MAGIC_CMD"; then
 12.3119 +  AC_MSG_RESULT($MAGIC_CMD)
 12.3120 +else
 12.3121 +  AC_MSG_RESULT(no)
 12.3122 +fi
 12.3123 +])# AC_PATH_TOOL_PREFIX
 12.3124 +
 12.3125 +
 12.3126 +# AC_PATH_MAGIC
 12.3127 +# -------------
 12.3128 +# find a file program which can recognise a shared library
 12.3129 +AC_DEFUN([AC_PATH_MAGIC],
 12.3130 +[AC_PATH_TOOL_PREFIX(${ac_tool_prefix}file, /usr/bin$PATH_SEPARATOR$PATH)
 12.3131 +if test -z "$lt_cv_path_MAGIC_CMD"; then
 12.3132 +  if test -n "$ac_tool_prefix"; then
 12.3133 +    AC_PATH_TOOL_PREFIX(file, /usr/bin$PATH_SEPARATOR$PATH)
 12.3134 +  else
 12.3135 +    MAGIC_CMD=:
 12.3136 +  fi
 12.3137 +fi
 12.3138 +])# AC_PATH_MAGIC
 12.3139 +
 12.3140 +
 12.3141 +# AC_PROG_LD
 12.3142 +# ----------
 12.3143 +# find the pathname to the GNU or non-GNU linker
 12.3144 +AC_DEFUN([AC_PROG_LD],
 12.3145 +[AC_ARG_WITH([gnu-ld],
 12.3146 +    [AC_HELP_STRING([--with-gnu-ld],
 12.3147 +	[assume the C compiler uses GNU ld @<:@default=no@:>@])],
 12.3148 +    [test "$withval" = no || with_gnu_ld=yes],
 12.3149 +    [with_gnu_ld=no])
 12.3150 +AC_REQUIRE([LT_AC_PROG_SED])dnl
 12.3151 +AC_REQUIRE([AC_PROG_CC])dnl
 12.3152 +AC_REQUIRE([AC_CANONICAL_HOST])dnl
 12.3153 +AC_REQUIRE([AC_CANONICAL_BUILD])dnl
 12.3154 +ac_prog=ld
 12.3155 +if test "$GCC" = yes; then
 12.3156 +  # Check if gcc -print-prog-name=ld gives a path.
 12.3157 +  AC_MSG_CHECKING([for ld used by $CC])
 12.3158 +  case $host in
 12.3159 +  *-*-mingw*)
 12.3160 +    # gcc leaves a trailing carriage return which upsets mingw
 12.3161 +    ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;;
 12.3162 +  *)
 12.3163 +    ac_prog=`($CC -print-prog-name=ld) 2>&5` ;;
 12.3164 +  esac
 12.3165 +  case $ac_prog in
 12.3166 +    # Accept absolute paths.
 12.3167 +    [[\\/]]* | ?:[[\\/]]*)
 12.3168 +      re_direlt='/[[^/]][[^/]]*/\.\./'
 12.3169 +      # Canonicalize the pathname of ld
 12.3170 +      ac_prog=`echo $ac_prog| $SED 's%\\\\%/%g'`
 12.3171 +      while echo $ac_prog | grep "$re_direlt" > /dev/null 2>&1; do
 12.3172 +	ac_prog=`echo $ac_prog| $SED "s%$re_direlt%/%"`
 12.3173 +      done
 12.3174 +      test -z "$LD" && LD="$ac_prog"
 12.3175 +      ;;
 12.3176 +  "")
 12.3177 +    # If it fails, then pretend we aren't using GCC.
 12.3178 +    ac_prog=ld
 12.3179 +    ;;
 12.3180 +  *)
 12.3181 +    # If it is relative, then search for the first ld in PATH.
 12.3182 +    with_gnu_ld=unknown
 12.3183 +    ;;
 12.3184 +  esac
 12.3185 +elif test "$with_gnu_ld" = yes; then
 12.3186 +  AC_MSG_CHECKING([for GNU ld])
 12.3187 +else
 12.3188 +  AC_MSG_CHECKING([for non-GNU ld])
 12.3189 +fi
 12.3190 +AC_CACHE_VAL(lt_cv_path_LD,
 12.3191 +[if test -z "$LD"; then
 12.3192 +  lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
 12.3193 +  for ac_dir in $PATH; do
 12.3194 +    IFS="$lt_save_ifs"
 12.3195 +    test -z "$ac_dir" && ac_dir=.
 12.3196 +    if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then
 12.3197 +      lt_cv_path_LD="$ac_dir/$ac_prog"
 12.3198 +      # Check to see if the program is GNU ld.  I'd rather use --version,
 12.3199 +      # but apparently some variants of GNU ld only accept -v.
 12.3200 +      # Break only if it was the GNU/non-GNU ld that we prefer.
 12.3201 +      case `"$lt_cv_path_LD" -v 2>&1 </dev/null` in
 12.3202 +      *GNU* | *'with BFD'*)
 12.3203 +	test "$with_gnu_ld" != no && break
 12.3204 +	;;
 12.3205 +      *)
 12.3206 +	test "$with_gnu_ld" != yes && break
 12.3207 +	;;
 12.3208 +      esac
 12.3209 +    fi
 12.3210 +  done
 12.3211 +  IFS="$lt_save_ifs"
 12.3212 +else
 12.3213 +  lt_cv_path_LD="$LD" # Let the user override the test with a path.
 12.3214 +fi])
 12.3215 +LD="$lt_cv_path_LD"
 12.3216 +if test -n "$LD"; then
 12.3217 +  AC_MSG_RESULT($LD)
 12.3218 +else
 12.3219 +  AC_MSG_RESULT(no)
 12.3220 +fi
 12.3221 +test -z "$LD" && AC_MSG_ERROR([no acceptable ld found in \$PATH])
 12.3222 +AC_PROG_LD_GNU
 12.3223 +])# AC_PROG_LD
 12.3224 +
 12.3225 +
 12.3226 +# AC_PROG_LD_GNU
 12.3227 +# --------------
 12.3228 +AC_DEFUN([AC_PROG_LD_GNU],
 12.3229 +[AC_REQUIRE([AC_PROG_EGREP])dnl
 12.3230 +AC_CACHE_CHECK([if the linker ($LD) is GNU ld], lt_cv_prog_gnu_ld,
 12.3231 +[# I'd rather use --version here, but apparently some GNU lds only accept -v.
 12.3232 +case `$LD -v 2>&1 </dev/null` in
 12.3233 +*GNU* | *'with BFD'*)
 12.3234 +  lt_cv_prog_gnu_ld=yes
 12.3235 +  ;;
 12.3236 +*)
 12.3237 +  lt_cv_prog_gnu_ld=no
 12.3238 +  ;;
 12.3239 +esac])
 12.3240 +with_gnu_ld=$lt_cv_prog_gnu_ld
 12.3241 +])# AC_PROG_LD_GNU
 12.3242 +
 12.3243 +
 12.3244 +# AC_PROG_LD_RELOAD_FLAG
 12.3245 +# ----------------------
 12.3246 +# find reload flag for linker
 12.3247 +#   -- PORTME Some linkers may need a different reload flag.
 12.3248 +AC_DEFUN([AC_PROG_LD_RELOAD_FLAG],
 12.3249 +[AC_CACHE_CHECK([for $LD option to reload object files],
 12.3250 +  lt_cv_ld_reload_flag,
 12.3251 +  [lt_cv_ld_reload_flag='-r'])
 12.3252 +reload_flag=$lt_cv_ld_reload_flag
 12.3253 +case $reload_flag in
 12.3254 +"" | " "*) ;;
 12.3255 +*) reload_flag=" $reload_flag" ;;
 12.3256 +esac
 12.3257 +reload_cmds='$LD$reload_flag -o $output$reload_objs'
 12.3258 +case $host_os in
 12.3259 +  darwin*)
 12.3260 +    if test "$GCC" = yes; then
 12.3261 +      reload_cmds='$LTCC $LTCFLAGS -nostdlib ${wl}-r -o $output$reload_objs'
 12.3262 +    else
 12.3263 +      reload_cmds='$LD$reload_flag -o $output$reload_objs'
 12.3264 +    fi
 12.3265 +    ;;
 12.3266 +esac
 12.3267 +])# AC_PROG_LD_RELOAD_FLAG
 12.3268 +
 12.3269 +
 12.3270 +# AC_DEPLIBS_CHECK_METHOD
 12.3271 +# -----------------------
 12.3272 +# how to check for library dependencies
 12.3273 +#  -- PORTME fill in with the dynamic library characteristics
 12.3274 +AC_DEFUN([AC_DEPLIBS_CHECK_METHOD],
 12.3275 +[AC_CACHE_CHECK([how to recognise dependent libraries],
 12.3276 +lt_cv_deplibs_check_method,
 12.3277 +[lt_cv_file_magic_cmd='$MAGIC_CMD'
 12.3278 +lt_cv_file_magic_test_file=
 12.3279 +lt_cv_deplibs_check_method='unknown'
 12.3280 +# Need to set the preceding variable on all platforms that support
 12.3281 +# interlibrary dependencies.
 12.3282 +# 'none' -- dependencies not supported.
 12.3283 +# `unknown' -- same as none, but documents that we really don't know.
 12.3284 +# 'pass_all' -- all dependencies passed with no checks.
 12.3285 +# 'test_compile' -- check by making test program.
 12.3286 +# 'file_magic [[regex]]' -- check by looking for files in library path
 12.3287 +# which responds to the $file_magic_cmd with a given extended regex.
 12.3288 +# If you have `file' or equivalent on your system and you're not sure
 12.3289 +# whether `pass_all' will *always* work, you probably want this one.
 12.3290 +
 12.3291 +case $host_os in
 12.3292 +aix4* | aix5*)
 12.3293 +  lt_cv_deplibs_check_method=pass_all
 12.3294 +  ;;
 12.3295 +
 12.3296 +beos*)
 12.3297 +  lt_cv_deplibs_check_method=pass_all
 12.3298 +  ;;
 12.3299 +
 12.3300 +bsdi[[45]]*)
 12.3301 +  lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (shared object|dynamic lib)'
 12.3302 +  lt_cv_file_magic_cmd='/usr/bin/file -L'
 12.3303 +  lt_cv_file_magic_test_file=/shlib/libc.so
 12.3304 +  ;;
 12.3305 +
 12.3306 +cygwin*)
 12.3307 +  # func_win32_libid is a shell function defined in ltmain.sh
 12.3308 +  lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL'
 12.3309 +  lt_cv_file_magic_cmd='func_win32_libid'
 12.3310 +  ;;
 12.3311 +
 12.3312 +mingw* | pw32*)
 12.3313 +  # Base MSYS/MinGW do not provide the 'file' command needed by
 12.3314 +  # func_win32_libid shell function, so use a weaker test based on 'objdump'.
 12.3315 +  lt_cv_deplibs_check_method='file_magic file format pei*-i386(.*architecture: i386)?'
 12.3316 +  lt_cv_file_magic_cmd='$OBJDUMP -f'
 12.3317 +  ;;
 12.3318 +
 12.3319 +darwin* | rhapsody*)
 12.3320 +  lt_cv_deplibs_check_method=pass_all
 12.3321 +  ;;
 12.3322 +
 12.3323 +freebsd* | kfreebsd*-gnu | dragonfly*)
 12.3324 +  if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then
 12.3325 +    case $host_cpu in
 12.3326 +    i*86 )
 12.3327 +      # Not sure whether the presence of OpenBSD here was a mistake.
 12.3328 +      # Let's accept both of them until this is cleared up.
 12.3329 +      lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD|DragonFly)/i[[3-9]]86 (compact )?demand paged shared library'
 12.3330 +      lt_cv_file_magic_cmd=/usr/bin/file
 12.3331 +      lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*`
 12.3332 +      ;;
 12.3333 +    esac
 12.3334 +  else
 12.3335 +    lt_cv_deplibs_check_method=pass_all
 12.3336 +  fi
 12.3337 +  ;;
 12.3338 +
 12.3339 +gnu*)
 12.3340 +  lt_cv_deplibs_check_method=pass_all
 12.3341 +  ;;
 12.3342 +
 12.3343 +hpux10.20* | hpux11*)
 12.3344 +  lt_cv_file_magic_cmd=/usr/bin/file
 12.3345 +  case $host_cpu in
 12.3346 +  ia64*)
 12.3347 +    lt_cv_deplibs_check_method='file_magic (s[[0-9]][[0-9]][[0-9]]|ELF-[[0-9]][[0-9]]) shared object file - IA64'
 12.3348 +    lt_cv_file_magic_test_file=/usr/lib/hpux32/libc.so
 12.3349 +    ;;
 12.3350 +  hppa*64*)
 12.3351 +    [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]']
 12.3352 +    lt_cv_file_magic_test_file=/usr/lib/pa20_64/libc.sl
 12.3353 +    ;;
 12.3354 +  *)
 12.3355 +    lt_cv_deplibs_check_method='file_magic (s[[0-9]][[0-9]][[0-9]]|PA-RISC[[0-9]].[[0-9]]) shared library'
 12.3356 +    lt_cv_file_magic_test_file=/usr/lib/libc.sl
 12.3357 +    ;;
 12.3358 +  esac
 12.3359 +  ;;
 12.3360 +
 12.3361 +interix3*)
 12.3362 +  # PIC code is broken on Interix 3.x, that's why |\.a not |_pic\.a here
 12.3363 +  lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so|\.a)$'
 12.3364 +  ;;
 12.3365 +
 12.3366 +irix5* | irix6* | nonstopux*)
 12.3367 +  case $LD in
 12.3368 +  *-32|*"-32 ") libmagic=32-bit;;
 12.3369 +  *-n32|*"-n32 ") libmagic=N32;;
 12.3370 +  *-64|*"-64 ") libmagic=64-bit;;
 12.3371 +  *) libmagic=never-match;;
 12.3372 +  esac
 12.3373 +  lt_cv_deplibs_check_method=pass_all
 12.3374 +  ;;
 12.3375 +
 12.3376 +# This must be Linux ELF.
 12.3377 +linux*)
 12.3378 +  lt_cv_deplibs_check_method=pass_all
 12.3379 +  ;;
 12.3380 +
 12.3381 +netbsd* | netbsdelf*-gnu | knetbsd*-gnu)
 12.3382 +  if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then
 12.3383 +    lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|_pic\.a)$'
 12.3384 +  else
 12.3385 +    lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so|_pic\.a)$'
 12.3386 +  fi
 12.3387 +  ;;
 12.3388 +
 12.3389 +newos6*)
 12.3390 +  lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (executable|dynamic lib)'
 12.3391 +  lt_cv_file_magic_cmd=/usr/bin/file
 12.3392 +  lt_cv_file_magic_test_file=/usr/lib/libnls.so
 12.3393 +  ;;
 12.3394 +
 12.3395 +nto-qnx*)
 12.3396 +  lt_cv_deplibs_check_method=unknown
 12.3397 +  ;;
 12.3398 +
 12.3399 +openbsd*)
 12.3400 +  if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
 12.3401 +    lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|\.so|_pic\.a)$'
 12.3402 +  else
 12.3403 +    lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|_pic\.a)$'
 12.3404 +  fi
 12.3405 +  ;;
 12.3406 +
 12.3407 +osf3* | osf4* | osf5*)
 12.3408 +  lt_cv_deplibs_check_method=pass_all
 12.3409 +  ;;
 12.3410 +
 12.3411 +solaris*)
 12.3412 +  lt_cv_deplibs_check_method=pass_all
 12.3413 +  ;;
 12.3414 +
 12.3415 +sysv4 | sysv4.3*)
 12.3416 +  case $host_vendor in
 12.3417 +  motorola)
 12.3418 +    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]]'
 12.3419 +    lt_cv_file_magic_test_file=`echo /usr/lib/libc.so*`
 12.3420 +    ;;
 12.3421 +  ncr)
 12.3422 +    lt_cv_deplibs_check_method=pass_all
 12.3423 +    ;;
 12.3424 +  sequent)
 12.3425 +    lt_cv_file_magic_cmd='/bin/file'
 12.3426 +    lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB (shared object|dynamic lib )'
 12.3427 +    ;;
 12.3428 +  sni)
 12.3429 +    lt_cv_file_magic_cmd='/bin/file'
 12.3430 +    lt_cv_deplibs_check_method="file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB dynamic lib"
 12.3431 +    lt_cv_file_magic_test_file=/lib/libc.so
 12.3432 +    ;;
 12.3433 +  siemens)
 12.3434 +    lt_cv_deplibs_check_method=pass_all
 12.3435 +    ;;
 12.3436 +  pc)
 12.3437 +    lt_cv_deplibs_check_method=pass_all
 12.3438 +    ;;
 12.3439 +  esac
 12.3440 +  ;;
 12.3441 +
 12.3442 +sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*)
 12.3443 +  lt_cv_deplibs_check_method=pass_all
 12.3444 +  ;;
 12.3445 +esac
 12.3446 +])
 12.3447 +file_magic_cmd=$lt_cv_file_magic_cmd
 12.3448 +deplibs_check_method=$lt_cv_deplibs_check_method
 12.3449 +test -z "$deplibs_check_method" && deplibs_check_method=unknown
 12.3450 +])# AC_DEPLIBS_CHECK_METHOD
 12.3451 +
 12.3452 +
 12.3453 +# AC_PROG_NM
 12.3454 +# ----------
 12.3455 +# find the pathname to a BSD-compatible name lister
 12.3456 +AC_DEFUN([AC_PROG_NM],
 12.3457 +[AC_CACHE_CHECK([for BSD-compatible nm], lt_cv_path_NM,
 12.3458 +[if test -n "$NM"; then
 12.3459 +  # Let the user override the test.
 12.3460 +  lt_cv_path_NM="$NM"
 12.3461 +else
 12.3462 +  lt_nm_to_check="${ac_tool_prefix}nm"
 12.3463 +  if test -n "$ac_tool_prefix" && test "$build" = "$host"; then 
 12.3464 +    lt_nm_to_check="$lt_nm_to_check nm"
 12.3465 +  fi
 12.3466 +  for lt_tmp_nm in $lt_nm_to_check; do
 12.3467 +    lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
 12.3468 +    for ac_dir in $PATH /usr/ccs/bin/elf /usr/ccs/bin /usr/ucb /bin; do
 12.3469 +      IFS="$lt_save_ifs"
 12.3470 +      test -z "$ac_dir" && ac_dir=.
 12.3471 +      tmp_nm="$ac_dir/$lt_tmp_nm"
 12.3472 +      if test -f "$tmp_nm" || test -f "$tmp_nm$ac_exeext" ; then
 12.3473 +	# Check to see if the nm accepts a BSD-compat flag.
 12.3474 +	# Adding the `sed 1q' prevents false positives on HP-UX, which says:
 12.3475 +	#   nm: unknown option "B" ignored
 12.3476 +	# Tru64's nm complains that /dev/null is an invalid object file
 12.3477 +	case `"$tmp_nm" -B /dev/null 2>&1 | sed '1q'` in
 12.3478 +	*/dev/null* | *'Invalid file or object type'*)
 12.3479 +	  lt_cv_path_NM="$tmp_nm -B"
 12.3480 +	  break
 12.3481 +	  ;;
 12.3482 +	*)
 12.3483 +	  case `"$tmp_nm" -p /dev/null 2>&1 | sed '1q'` in
 12.3484 +	  */dev/null*)
 12.3485 +	    lt_cv_path_NM="$tmp_nm -p"
 12.3486 +	    break
 12.3487 +	    ;;
 12.3488 +	  *)
 12.3489 +	    lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but
 12.3490 +	    continue # so that we can try to find one that supports BSD flags
 12.3491 +	    ;;
 12.3492 +	  esac
 12.3493 +	  ;;
 12.3494 +	esac
 12.3495 +      fi
 12.3496 +    done
 12.3497 +    IFS="$lt_save_ifs"
 12.3498 +  done
 12.3499 +  test -z "$lt_cv_path_NM" && lt_cv_path_NM=nm
 12.3500 +fi])
 12.3501 +NM="$lt_cv_path_NM"
 12.3502 +])# AC_PROG_NM
 12.3503 +
 12.3504 +
 12.3505 +# AC_CHECK_LIBM
 12.3506 +# -------------
 12.3507 +# check for math library
 12.3508 +AC_DEFUN([AC_CHECK_LIBM],
 12.3509 +[AC_REQUIRE([AC_CANONICAL_HOST])dnl
 12.3510 +LIBM=
 12.3511 +case $host in
 12.3512 +*-*-beos* | *-*-cygwin* | *-*-pw32* | *-*-darwin*)
 12.3513 +  # These system don't have libm, or don't need it
 12.3514 +  ;;
 12.3515 +*-ncr-sysv4.3*)
 12.3516 +  AC_CHECK_LIB(mw, _mwvalidcheckl, LIBM="-lmw")
 12.3517 +  AC_CHECK_LIB(m, cos, LIBM="$LIBM -lm")
 12.3518 +  ;;
 12.3519 +*)
 12.3520 +  AC_CHECK_LIB(m, cos, LIBM="-lm")
 12.3521 +  ;;
 12.3522 +esac
 12.3523 +])# AC_CHECK_LIBM
 12.3524 +
 12.3525 +
 12.3526 +# AC_LIBLTDL_CONVENIENCE([DIRECTORY])
 12.3527 +# -----------------------------------
 12.3528 +# sets LIBLTDL to the link flags for the libltdl convenience library and
 12.3529 +# LTDLINCL to the include flags for the libltdl header and adds
 12.3530 +# --enable-ltdl-convenience to the configure arguments.  Note that
 12.3531 +# AC_CONFIG_SUBDIRS is not called here.  If DIRECTORY is not provided,
 12.3532 +# it is assumed to be `libltdl'.  LIBLTDL will be prefixed with
 12.3533 +# '${top_builddir}/' and LTDLINCL will be prefixed with '${top_srcdir}/'
 12.3534 +# (note the single quotes!).  If your package is not flat and you're not
 12.3535 +# using automake, define top_builddir and top_srcdir appropriately in
 12.3536 +# the Makefiles.
 12.3537 +AC_DEFUN([AC_LIBLTDL_CONVENIENCE],
 12.3538 +[AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl
 12.3539 +  case $enable_ltdl_convenience in
 12.3540 +  no) AC_MSG_ERROR([this package needs a convenience libltdl]) ;;
 12.3541 +  "") enable_ltdl_convenience=yes
 12.3542 +      ac_configure_args="$ac_configure_args --enable-ltdl-convenience" ;;
 12.3543 +  esac
 12.3544 +  LIBLTDL='${top_builddir}/'ifelse($#,1,[$1],['libltdl'])/libltdlc.la
 12.3545 +  LTDLINCL='-I${top_srcdir}/'ifelse($#,1,[$1],['libltdl'])
 12.3546 +  # For backwards non-gettext consistent compatibility...
 12.3547 +  INCLTDL="$LTDLINCL"
 12.3548 +])# AC_LIBLTDL_CONVENIENCE
 12.3549 +
 12.3550 +
 12.3551 +# AC_LIBLTDL_INSTALLABLE([DIRECTORY])
 12.3552 +# -----------------------------------
 12.3553 +# sets LIBLTDL to the link flags for the libltdl installable library and
 12.3554 +# LTDLINCL to the include flags for the libltdl header and adds
 12.3555 +# --enable-ltdl-install to the configure arguments.  Note that
 12.3556 +# AC_CONFIG_SUBDIRS is not called here.  If DIRECTORY is not provided,
 12.3557 +# and an installed libltdl is not found, it is assumed to be `libltdl'.
 12.3558 +# LIBLTDL will be prefixed with '${top_builddir}/'# and LTDLINCL with
 12.3559 +# '${top_srcdir}/' (note the single quotes!).  If your package is not
 12.3560 +# flat and you're not using automake, define top_builddir and top_srcdir
 12.3561 +# appropriately in the Makefiles.
 12.3562 +# In the future, this macro may have to be called after AC_PROG_LIBTOOL.
 12.3563 +AC_DEFUN([AC_LIBLTDL_INSTALLABLE],
 12.3564 +[AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl
 12.3565 +  AC_CHECK_LIB(ltdl, lt_dlinit,
 12.3566 +  [test x"$enable_ltdl_install" != xyes && enable_ltdl_install=no],
 12.3567 +  [if test x"$enable_ltdl_install" = xno; then
 12.3568 +     AC_MSG_WARN([libltdl not installed, but installation disabled])
 12.3569 +   else
 12.3570 +     enable_ltdl_install=yes
 12.3571 +   fi
 12.3572 +  ])
 12.3573 +  if test x"$enable_ltdl_install" = x"yes"; then
 12.3574 +    ac_configure_args="$ac_configure_args --enable-ltdl-install"
 12.3575 +    LIBLTDL='${top_builddir}/'ifelse($#,1,[$1],['libltdl'])/libltdl.la
 12.3576 +    LTDLINCL='-I${top_srcdir}/'ifelse($#,1,[$1],['libltdl'])
 12.3577 +  else
 12.3578 +    ac_configure_args="$ac_configure_args --enable-ltdl-install=no"
 12.3579 +    LIBLTDL="-lltdl"
 12.3580 +    LTDLINCL=
 12.3581 +  fi
 12.3582 +  # For backwards non-gettext consistent compatibility...
 12.3583 +  INCLTDL="$LTDLINCL"
 12.3584 +])# AC_LIBLTDL_INSTALLABLE
 12.3585 +
 12.3586 +
 12.3587 +# AC_LIBTOOL_CXX
 12.3588 +# --------------
 12.3589 +# enable support for C++ libraries
 12.3590 +AC_DEFUN([AC_LIBTOOL_CXX],
 12.3591 +[AC_REQUIRE([_LT_AC_LANG_CXX])
 12.3592 +])# AC_LIBTOOL_CXX
 12.3593 +
 12.3594 +
 12.3595 +# _LT_AC_LANG_CXX
 12.3596 +# ---------------
 12.3597 +AC_DEFUN([_LT_AC_LANG_CXX],
 12.3598 +[AC_REQUIRE([AC_PROG_CXX])
 12.3599 +AC_REQUIRE([_LT_AC_PROG_CXXCPP])
 12.3600 +_LT_AC_SHELL_INIT([tagnames=${tagnames+${tagnames},}CXX])
 12.3601 +])# _LT_AC_LANG_CXX
 12.3602 +
 12.3603 +# _LT_AC_PROG_CXXCPP
 12.3604 +# ------------------
 12.3605 +AC_DEFUN([_LT_AC_PROG_CXXCPP],
 12.3606 +[
 12.3607 +AC_REQUIRE([AC_PROG_CXX])
 12.3608 +if test -n "$CXX" && ( test "X$CXX" != "Xno" &&
 12.3609 +    ( (test "X$CXX" = "Xg++" && `g++ -v >/dev/null 2>&1` ) ||
 12.3610 +    (test "X$CXX" != "Xg++"))) ; then
 12.3611 +  AC_PROG_CXXCPP
 12.3612 +fi
 12.3613 +])# _LT_AC_PROG_CXXCPP
 12.3614 +
 12.3615 +# AC_LIBTOOL_F77
 12.3616 +# --------------
 12.3617 +# enable support for Fortran 77 libraries
 12.3618 +AC_DEFUN([AC_LIBTOOL_F77],
 12.3619 +[AC_REQUIRE([_LT_AC_LANG_F77])
 12.3620 +])# AC_LIBTOOL_F77
 12.3621 +
 12.3622 +
 12.3623 +# _LT_AC_LANG_F77
 12.3624 +# ---------------
 12.3625 +AC_DEFUN([_LT_AC_LANG_F77],
 12.3626 +[AC_REQUIRE([AC_PROG_F77])
 12.3627 +_LT_AC_SHELL_INIT([tagnames=${tagnames+${tagnames},}F77])
 12.3628 +])# _LT_AC_LANG_F77
 12.3629 +
 12.3630 +
 12.3631 +# AC_LIBTOOL_GCJ
 12.3632 +# --------------
 12.3633 +# enable support for GCJ libraries
 12.3634 +AC_DEFUN([AC_LIBTOOL_GCJ],
 12.3635 +[AC_REQUIRE([_LT_AC_LANG_GCJ])
 12.3636 +])# AC_LIBTOOL_GCJ
 12.3637 +
 12.3638 +
 12.3639 +# _LT_AC_LANG_GCJ
 12.3640 +# ---------------
 12.3641 +AC_DEFUN([_LT_AC_LANG_GCJ],
 12.3642 +[AC_PROVIDE_IFELSE([AC_PROG_GCJ],[],
 12.3643 +  [AC_PROVIDE_IFELSE([A][M_PROG_GCJ],[],
 12.3644 +    [AC_PROVIDE_IFELSE([LT_AC_PROG_GCJ],[],
 12.3645 +      [ifdef([AC_PROG_GCJ],[AC_REQUIRE([AC_PROG_GCJ])],
 12.3646 +	 [ifdef([A][M_PROG_GCJ],[AC_REQUIRE([A][M_PROG_GCJ])],
 12.3647 +	   [AC_REQUIRE([A][C_PROG_GCJ_OR_A][M_PROG_GCJ])])])])])])
 12.3648 +_LT_AC_SHELL_INIT([tagnames=${tagnames+${tagnames},}GCJ])
 12.3649 +])# _LT_AC_LANG_GCJ
 12.3650 +
 12.3651 +
 12.3652 +# AC_LIBTOOL_RC
 12.3653 +# -------------
 12.3654 +# enable support for Windows resource files
 12.3655 +AC_DEFUN([AC_LIBTOOL_RC],
 12.3656 +[AC_REQUIRE([LT_AC_PROG_RC])
 12.3657 +_LT_AC_SHELL_INIT([tagnames=${tagnames+${tagnames},}RC])
 12.3658 +])# AC_LIBTOOL_RC
 12.3659 +
 12.3660 +
 12.3661 +# AC_LIBTOOL_LANG_C_CONFIG
 12.3662 +# ------------------------
 12.3663 +# Ensure that the configuration vars for the C compiler are
 12.3664 +# suitably defined.  Those variables are subsequently used by
 12.3665 +# AC_LIBTOOL_CONFIG to write the compiler configuration to `libtool'.
 12.3666 +AC_DEFUN([AC_LIBTOOL_LANG_C_CONFIG], [_LT_AC_LANG_C_CONFIG])
 12.3667 +AC_DEFUN([_LT_AC_LANG_C_CONFIG],
 12.3668 +[lt_save_CC="$CC"
 12.3669 +AC_LANG_PUSH(C)
 12.3670 +
 12.3671 +# Source file extension for C test sources.
 12.3672 +ac_ext=c
 12.3673 +
 12.3674 +# Object file extension for compiled C test sources.
 12.3675 +objext=o
 12.3676 +_LT_AC_TAGVAR(objext, $1)=$objext
 12.3677 +
 12.3678 +# Code to be used in simple compile tests
 12.3679 +lt_simple_compile_test_code="int some_variable = 0;\n"
 12.3680 +
 12.3681 +# Code to be used in simple link tests
 12.3682 +lt_simple_link_test_code='int main(){return(0);}\n'
 12.3683 +
 12.3684 +_LT_AC_SYS_COMPILER
 12.3685 +
 12.3686 +# save warnings/boilerplate of simple test code
 12.3687 +_LT_COMPILER_BOILERPLATE
 12.3688 +_LT_LINKER_BOILERPLATE
 12.3689 +
 12.3690 +AC_LIBTOOL_PROG_COMPILER_NO_RTTI($1)
 12.3691 +AC_LIBTOOL_PROG_COMPILER_PIC($1)
 12.3692 +AC_LIBTOOL_PROG_CC_C_O($1)
 12.3693 +AC_LIBTOOL_SYS_HARD_LINK_LOCKS($1)
 12.3694 +AC_LIBTOOL_PROG_LD_SHLIBS($1)
 12.3695 +AC_LIBTOOL_SYS_DYNAMIC_LINKER($1)
 12.3696 +AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH($1)
 12.3697 +AC_LIBTOOL_SYS_LIB_STRIP
 12.3698 +AC_LIBTOOL_DLOPEN_SELF
 12.3699 +
 12.3700 +# Report which library types will actually be built
 12.3701 +AC_MSG_CHECKING([if libtool supports shared libraries])
 12.3702 +AC_MSG_RESULT([$can_build_shared])
 12.3703 +
 12.3704 +AC_MSG_CHECKING([whether to build shared libraries])
 12.3705 +test "$can_build_shared" = "no" && enable_shared=no
 12.3706 +
 12.3707 +# On AIX, shared libraries and static libraries use the same namespace, and
 12.3708 +# are all built from PIC.
 12.3709 +case $host_os in
 12.3710 +aix3*)
 12.3711 +  test "$enable_shared" = yes && enable_static=no
 12.3712 +  if test -n "$RANLIB"; then
 12.3713 +    archive_cmds="$archive_cmds~\$RANLIB \$lib"
 12.3714 +    postinstall_cmds='$RANLIB $lib'
 12.3715 +  fi
 12.3716 +  ;;
 12.3717 +
 12.3718 +aix4* | aix5*)
 12.3719 +  if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then
 12.3720 +    test "$enable_shared" = yes && enable_static=no
 12.3721 +  fi
 12.3722 +    ;;
 12.3723 +esac
 12.3724 +AC_MSG_RESULT([$enable_shared])
 12.3725 +
 12.3726 +AC_MSG_CHECKING([whether to build static libraries])
 12.3727 +# Make sure either enable_shared or enable_static is yes.
 12.3728 +test "$enable_shared" = yes || enable_static=yes
 12.3729 +AC_MSG_RESULT([$enable_static])
 12.3730 +
 12.3731 +AC_LIBTOOL_CONFIG($1)
 12.3732 +
 12.3733 +AC_LANG_POP
 12.3734 +CC="$lt_save_CC"
 12.3735 +])# AC_LIBTOOL_LANG_C_CONFIG
 12.3736 +
 12.3737 +
 12.3738 +# AC_LIBTOOL_LANG_CXX_CONFIG
 12.3739 +# --------------------------
 12.3740 +# Ensure that the configuration vars for the C compiler are
 12.3741 +# suitably defined.  Those variables are subsequently used by
 12.3742 +# AC_LIBTOOL_CONFIG to write the compiler configuration to `libtool'.
 12.3743 +AC_DEFUN([AC_LIBTOOL_LANG_CXX_CONFIG], [_LT_AC_LANG_CXX_CONFIG(CXX)])
 12.3744 +AC_DEFUN([_LT_AC_LANG_CXX_CONFIG],
 12.3745 +[AC_LANG_PUSH(C++)
 12.3746 +AC_REQUIRE([AC_PROG_CXX])
 12.3747 +AC_REQUIRE([_LT_AC_PROG_CXXCPP])
 12.3748 +
 12.3749 +_LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no
 12.3750 +_LT_AC_TAGVAR(allow_undefined_flag, $1)=
 12.3751 +_LT_AC_TAGVAR(always_export_symbols, $1)=no
 12.3752 +_LT_AC_TAGVAR(archive_expsym_cmds, $1)=
 12.3753 +_LT_AC_TAGVAR(export_dynamic_flag_spec, $1)=
 12.3754 +_LT_AC_TAGVAR(hardcode_direct, $1)=no
 12.3755 +_LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)=
 12.3756 +_LT_AC_TAGVAR(hardcode_libdir_flag_spec_ld, $1)=
 12.3757 +_LT_AC_TAGVAR(hardcode_libdir_separator, $1)=
 12.3758 +_LT_AC_TAGVAR(hardcode_minus_L, $1)=no
 12.3759 +_LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=unsupported
 12.3760 +_LT_AC_TAGVAR(hardcode_automatic, $1)=no
 12.3761 +_LT_AC_TAGVAR(module_cmds, $1)=
 12.3762 +_LT_AC_TAGVAR(module_expsym_cmds, $1)=
 12.3763 +_LT_AC_TAGVAR(link_all_deplibs, $1)=unknown
 12.3764 +_LT_AC_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds
 12.3765 +_LT_AC_TAGVAR(no_undefined_flag, $1)=
 12.3766 +_LT_AC_TAGVAR(whole_archive_flag_spec, $1)=
 12.3767 +_LT_AC_TAGVAR(enable_shared_with_static_runtimes, $1)=no
 12.3768 +
 12.3769 +# Dependencies to place before and after the object being linked:
 12.3770 +_LT_AC_TAGVAR(predep_objects, $1)=
 12.3771 +_LT_AC_TAGVAR(postdep_objects, $1)=
 12.3772 +_LT_AC_TAGVAR(predeps, $1)=
 12.3773 +_LT_AC_TAGVAR(postdeps, $1)=
 12.3774 +_LT_AC_TAGVAR(compiler_lib_search_path, $1)=
 12.3775 +
 12.3776 +# Source file extension for C++ test sources.
 12.3777 +ac_ext=cpp
 12.3778 +
 12.3779 +# Object file extension for compiled C++ test sources.
 12.3780 +objext=o
 12.3781 +_LT_AC_TAGVAR(objext, $1)=$objext
 12.3782 +
 12.3783 +# Code to be used in simple compile tests
 12.3784 +lt_simple_compile_test_code="int some_variable = 0;\n"
 12.3785 +
 12.3786 +# Code to be used in simple link tests
 12.3787 +lt_simple_link_test_code='int main(int, char *[[]]) { return(0); }\n'
 12.3788 +
 12.3789 +# ltmain only uses $CC for tagged configurations so make sure $CC is set.
 12.3790 +_LT_AC_SYS_COMPILER
 12.3791 +
 12.3792 +# save warnings/boilerplate of simple test code
 12.3793 +_LT_COMPILER_BOILERPLATE
 12.3794 +_LT_LINKER_BOILERPLATE
 12.3795 +
 12.3796 +# Allow CC to be a program name with arguments.
 12.3797 +lt_save_CC=$CC
 12.3798 +lt_save_LD=$LD
 12.3799 +lt_save_GCC=$GCC
 12.3800 +GCC=$GXX
 12.3801 +lt_save_with_gnu_ld=$with_gnu_ld
 12.3802 +lt_save_path_LD=$lt_cv_path_LD
 12.3803 +if test -n "${lt_cv_prog_gnu_ldcxx+set}"; then
 12.3804 +  lt_cv_prog_gnu_ld=$lt_cv_prog_gnu_ldcxx
 12.3805 +else
 12.3806 +  $as_unset lt_cv_prog_gnu_ld
 12.3807 +fi
 12.3808 +if test -n "${lt_cv_path_LDCXX+set}"; then
 12.3809 +  lt_cv_path_LD=$lt_cv_path_LDCXX
 12.3810 +else
 12.3811 +  $as_unset lt_cv_path_LD
 12.3812 +fi
 12.3813 +test -z "${LDCXX+set}" || LD=$LDCXX
 12.3814 +CC=${CXX-"c++"}
 12.3815 +compiler=$CC
 12.3816 +_LT_AC_TAGVAR(compiler, $1)=$CC
 12.3817 +_LT_CC_BASENAME([$compiler])
 12.3818 +
 12.3819 +# We don't want -fno-exception wen compiling C++ code, so set the
 12.3820 +# no_builtin_flag separately
 12.3821 +if test "$GXX" = yes; then
 12.3822 +  _LT_AC_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -fno-builtin'
 12.3823 +else
 12.3824 +  _LT_AC_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=
 12.3825 +fi
 12.3826 +
 12.3827 +if test "$GXX" = yes; then
 12.3828 +  # Set up default GNU C++ configuration
 12.3829 +
 12.3830 +  AC_PROG_LD
 12.3831 +
 12.3832 +  # Check if GNU C++ uses GNU ld as the underlying linker, since the
 12.3833 +  # archiving commands below assume that GNU ld is being used.
 12.3834 +  if test "$with_gnu_ld" = yes; then
 12.3835 +    _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib'
 12.3836 +    _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
 12.3837 +
 12.3838 +    _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}--rpath ${wl}$libdir'
 12.3839 +    _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic'
 12.3840 +
 12.3841 +    # If archive_cmds runs LD, not CC, wlarc should be empty
 12.3842 +    # XXX I think wlarc can be eliminated in ltcf-cxx, but I need to
 12.3843 +    #     investigate it a little bit more. (MM)
 12.3844 +    wlarc='${wl}'
 12.3845 +
 12.3846 +    # ancient GNU ld didn't support --whole-archive et. al.
 12.3847 +    if eval "`$CC -print-prog-name=ld` --help 2>&1" | \
 12.3848 +	grep 'no-whole-archive' > /dev/null; then
 12.3849 +      _LT_AC_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive'
 12.3850 +    else
 12.3851 +      _LT_AC_TAGVAR(whole_archive_flag_spec, $1)=
 12.3852 +    fi
 12.3853 +  else
 12.3854 +    with_gnu_ld=no
 12.3855 +    wlarc=
 12.3856 +
 12.3857 +    # A generic and very simple default shared library creation
 12.3858 +    # command for GNU C++ for the case where it uses the native
 12.3859 +    # linker, instead of GNU ld.  If possible, this setting should
 12.3860 +    # overridden to take advantage of the native linker features on
 12.3861 +    # the platform it is being used on.
 12.3862 +    _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib'
 12.3863 +  fi
 12.3864 +
 12.3865 +  # Commands to make compiler produce verbose output that lists
 12.3866 +  # what "hidden" libraries, object files and flags are used when
 12.3867 +  # linking a shared library.
 12.3868 +  output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "\-L"'
 12.3869 +
 12.3870 +else
 12.3871 +  GXX=no
 12.3872 +  with_gnu_ld=no
 12.3873 +  wlarc=
 12.3874 +fi
 12.3875 +
 12.3876 +# PORTME: fill in a description of your system's C++ link characteristics
 12.3877 +AC_MSG_CHECKING([whether the $compiler linker ($LD) supports shared libraries])
 12.3878 +_LT_AC_TAGVAR(ld_shlibs, $1)=yes
 12.3879 +case $host_os in
 12.3880 +  aix3*)
 12.3881 +    # FIXME: insert proper C++ library support
 12.3882 +    _LT_AC_TAGVAR(ld_shlibs, $1)=no
 12.3883 +    ;;
 12.3884 +  aix4* | aix5*)
 12.3885 +    if test "$host_cpu" = ia64; then
 12.3886 +      # On IA64, the linker does run time linking by default, so we don't
 12.3887 +      # have to do anything special.
 12.3888 +      aix_use_runtimelinking=no
 12.3889 +      exp_sym_flag='-Bexport'
 12.3890 +      no_entry_flag=""
 12.3891 +    else
 12.3892 +      aix_use_runtimelinking=no
 12.3893 +
 12.3894 +      # Test if we are trying to use run time linking or normal
 12.3895 +      # AIX style linking. If -brtl is somewhere in LDFLAGS, we
 12.3896 +      # need to do runtime linking.
 12.3897 +      case $host_os in aix4.[[23]]|aix4.[[23]].*|aix5*)
 12.3898 +	for ld_flag in $LDFLAGS; do
 12.3899 +	  case $ld_flag in
 12.3900 +	  *-brtl*)
 12.3901 +	    aix_use_runtimelinking=yes
 12.3902 +	    break
 12.3903 +	    ;;
 12.3904 +	  esac
 12.3905 +	done
 12.3906 +	;;
 12.3907 +      esac
 12.3908 +
 12.3909 +      exp_sym_flag='-bexport'
 12.3910 +      no_entry_flag='-bnoentry'
 12.3911 +    fi
 12.3912 +
 12.3913 +    # When large executables or shared objects are built, AIX ld can
 12.3914 +    # have problems creating the table of contents.  If linking a library
 12.3915 +    # or program results in "error TOC overflow" add -mminimal-toc to
 12.3916 +    # CXXFLAGS/CFLAGS for g++/gcc.  In the cases where that is not
 12.3917 +    # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS.
 12.3918 +
 12.3919 +    _LT_AC_TAGVAR(archive_cmds, $1)=''
 12.3920 +    _LT_AC_TAGVAR(hardcode_direct, $1)=yes
 12.3921 +    _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=':'
 12.3922 +    _LT_AC_TAGVAR(link_all_deplibs, $1)=yes
 12.3923 +
 12.3924 +    if test "$GXX" = yes; then
 12.3925 +      case $host_os in aix4.[[012]]|aix4.[[012]].*)
 12.3926 +      # We only want to do this on AIX 4.2 and lower, the check
 12.3927 +      # below for broken collect2 doesn't work under 4.3+
 12.3928 +	collect2name=`${CC} -print-prog-name=collect2`
 12.3929 +	if test -f "$collect2name" && \
 12.3930 +	   strings "$collect2name" | grep resolve_lib_name >/dev/null
 12.3931 +	then
 12.3932 +	  # We have reworked collect2
 12.3933 +	  _LT_AC_TAGVAR(hardcode_direct, $1)=yes
 12.3934 +	else
 12.3935 +	  # We have old collect2
 12.3936 +	  _LT_AC_TAGVAR(hardcode_direct, $1)=unsupported
 12.3937 +	  # It fails to find uninstalled libraries when the uninstalled
 12.3938 +	  # path is not listed in the libpath.  Setting hardcode_minus_L
 12.3939 +	  # to unsupported forces relinking
 12.3940 +	  _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes
 12.3941 +	  _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
 12.3942 +	  _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=
 12.3943 +	fi
 12.3944 +	;;
 12.3945 +      esac
 12.3946 +      shared_flag='-shared'
 12.3947 +      if test "$aix_use_runtimelinking" = yes; then
 12.3948 +	shared_flag="$shared_flag "'${wl}-G'
 12.3949 +      fi
 12.3950 +    else
 12.3951 +      # not using gcc
 12.3952 +      if test "$host_cpu" = ia64; then
 12.3953 +	# VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release
 12.3954 +	# chokes on -Wl,-G. The following line is correct:
 12.3955 +	shared_flag='-G'
 12.3956 +      else
 12.3957 +	if test "$aix_use_runtimelinking" = yes; then
 12.3958 +	  shared_flag='${wl}-G'
 12.3959 +	else
 12.3960 +	  shared_flag='${wl}-bM:SRE'
 12.3961 +	fi
 12.3962 +      fi
 12.3963 +    fi
 12.3964 +
 12.3965 +    # It seems that -bexpall does not export symbols beginning with
 12.3966 +    # underscore (_), so it is better to generate a list of symbols to export.
 12.3967 +    _LT_AC_TAGVAR(always_export_symbols, $1)=yes
 12.3968 +    if test "$aix_use_runtimelinking" = yes; then
 12.3969 +      # Warning - without using the other runtime loading flags (-brtl),
 12.3970 +      # -berok will link without error, but may produce a broken library.
 12.3971 +      _LT_AC_TAGVAR(allow_undefined_flag, $1)='-berok'
 12.3972 +      # Determine the default libpath from the value encoded in an empty executable.
 12.3973 +      _LT_AC_SYS_LIBPATH_AIX
 12.3974 +      _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath"
 12.3975 +
 12.3976 +      _LT_AC_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 echo "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag"
 12.3977 +     else
 12.3978 +      if test "$host_cpu" = ia64; then
 12.3979 +	_LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $libdir:/usr/lib:/lib'
 12.3980 +	_LT_AC_TAGVAR(allow_undefined_flag, $1)="-z nodefs"
 12.3981 +	_LT_AC_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"
 12.3982 +      else
 12.3983 +	# Determine the default libpath from the value encoded in an empty executable.
 12.3984 +	_LT_AC_SYS_LIBPATH_AIX
 12.3985 +	_LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath"
 12.3986 +	# Warning - without using the other run time loading flags,
 12.3987 +	# -berok will link without error, but may produce a broken library.
 12.3988 +	_LT_AC_TAGVAR(no_undefined_flag, $1)=' ${wl}-bernotok'
 12.3989 +	_LT_AC_TAGVAR(allow_undefined_flag, $1)=' ${wl}-berok'
 12.3990 +	# Exported symbols can be pulled into shared objects from archives
 12.3991 +	_LT_AC_TAGVAR(whole_archive_flag_spec, $1)='$convenience'
 12.3992 +	_LT_AC_TAGVAR(archive_cmds_need_lc, $1)=yes
 12.3993 +	# This is similar to how AIX traditionally builds its shared libraries.
 12.3994 +	_LT_AC_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'
 12.3995 +      fi
 12.3996 +    fi
 12.3997 +    ;;
 12.3998 +
 12.3999 +  beos*)
 12.4000 +    if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
 12.4001 +      _LT_AC_TAGVAR(allow_undefined_flag, $1)=unsupported
 12.4002 +      # Joseph Beckenbach <jrb3@best.com> says some releases of gcc
 12.4003 +      # support --undefined.  This deserves some investigation.  FIXME
 12.4004 +      _LT_AC_TAGVAR(archive_cmds, $1)='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
 12.4005 +    else
 12.4006 +      _LT_AC_TAGVAR(ld_shlibs, $1)=no
 12.4007 +    fi
 12.4008 +    ;;
 12.4009 +
 12.4010 +  chorus*)
 12.4011 +    case $cc_basename in
 12.4012 +      *)
 12.4013 +	# FIXME: insert proper C++ library support
 12.4014 +	_LT_AC_TAGVAR(ld_shlibs, $1)=no
 12.4015 +	;;
 12.4016 +    esac
 12.4017 +    ;;
 12.4018 +
 12.4019 +  cygwin* | mingw* | pw32*)
 12.4020 +    # _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1) is actually meaningless,
 12.4021 +    # as there is no search path for DLLs.
 12.4022 +    _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
 12.4023 +    _LT_AC_TAGVAR(allow_undefined_flag, $1)=unsupported
 12.4024 +    _LT_AC_TAGVAR(always_export_symbols, $1)=no
 12.4025 +    _LT_AC_TAGVAR(enable_shared_with_static_runtimes, $1)=yes
 12.4026 +
 12.4027 +    if $LD --help 2>&1 | grep 'auto-import' > /dev/null; then
 12.4028 +      _LT_AC_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'
 12.4029 +      # If the export-symbols file already is a .def file (1st line
 12.4030 +      # is EXPORTS), use it as is; otherwise, prepend...
 12.4031 +      _LT_AC_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then
 12.4032 +	cp $export_symbols $output_objdir/$soname.def;
 12.4033 +      else
 12.4034 +	echo EXPORTS > $output_objdir/$soname.def;
 12.4035 +	cat $export_symbols >> $output_objdir/$soname.def;
 12.4036 +      fi~
 12.4037 +      $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'
 12.4038 +    else
 12.4039 +      _LT_AC_TAGVAR(ld_shlibs, $1)=no
 12.4040 +    fi
 12.4041 +  ;;
 12.4042 +      darwin* | rhapsody*)
 12.4043 +        case $host_os in
 12.4044 +        rhapsody* | darwin1.[[012]])
 12.4045 +         _LT_AC_TAGVAR(allow_undefined_flag, $1)='${wl}-undefined ${wl}suppress'
 12.4046 +         ;;
 12.4047 +       *) # Darwin 1.3 on
 12.4048 +         if test -z ${MACOSX_DEPLOYMENT_TARGET} ; then
 12.4049 +           _LT_AC_TAGVAR(allow_undefined_flag, $1)='${wl}-flat_namespace ${wl}-undefined ${wl}suppress'
 12.4050 +         else
 12.4051 +           case ${MACOSX_DEPLOYMENT_TARGET} in
 12.4052 +             10.[[012]])
 12.4053 +               _LT_AC_TAGVAR(allow_undefined_flag, $1)='${wl}-flat_namespace ${wl}-undefined ${wl}suppress'
 12.4054 +               ;;
 12.4055 +             10.*)
 12.4056 +               _LT_AC_TAGVAR(allow_undefined_flag, $1)='${wl}-undefined ${wl}dynamic_lookup'
 12.4057 +               ;;
 12.4058 +           esac
 12.4059 +         fi
 12.4060 +         ;;
 12.4061 +        esac
 12.4062 +      _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no
 12.4063 +      _LT_AC_TAGVAR(hardcode_direct, $1)=no
 12.4064 +      _LT_AC_TAGVAR(hardcode_automatic, $1)=yes
 12.4065 +      _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=unsupported
 12.4066 +      _LT_AC_TAGVAR(whole_archive_flag_spec, $1)=''
 12.4067 +      _LT_AC_TAGVAR(link_all_deplibs, $1)=yes
 12.4068 +
 12.4069 +    if test "$GXX" = yes ; then
 12.4070 +      lt_int_apple_cc_single_mod=no
 12.4071 +      output_verbose_link_cmd='echo'
 12.4072 +      if $CC -dumpspecs 2>&1 | $EGREP 'single_module' >/dev/null ; then
 12.4073 +       lt_int_apple_cc_single_mod=yes
 12.4074 +      fi
 12.4075 +      if test "X$lt_int_apple_cc_single_mod" = Xyes ; then
 12.4076 +       _LT_AC_TAGVAR(archive_cmds, $1)='$CC -dynamiclib -single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring'
 12.4077 +      else
 12.4078 +          _LT_AC_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'
 12.4079 +        fi
 12.4080 +        _LT_AC_TAGVAR(module_cmds, $1)='$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags'
 12.4081 +        # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin lds
 12.4082 +          if test "X$lt_int_apple_cc_single_mod" = Xyes ; then
 12.4083 +            _LT_AC_TAGVAR(archive_expsym_cmds, $1)='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}'
 12.4084 +          else
 12.4085 +            _LT_AC_TAGVAR(archive_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[    ]*,," -e "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~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
 12.4086 +          fi
 12.4087 +            _LT_AC_TAGVAR(module_expsym_cmds, $1)='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}'
 12.4088 +      else
 12.4089 +      case $cc_basename in
 12.4090 +        xlc*)
 12.4091 +         output_verbose_link_cmd='echo'
 12.4092 +          _LT_AC_TAGVAR(archive_cmds, $1)='$CC -qmkshrobj ${wl}-single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}`echo $rpath/$soname` $verstring'
 12.4093 +          _LT_AC_TAGVAR(module_cmds, $1)='$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags'
 12.4094 +          # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin lds
 12.4095 +          _LT_AC_TAGVAR(archive_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[    ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -qmkshrobj ${wl}-single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}$rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
 12.4096 +          _LT_AC_TAGVAR(module_expsym_cmds, $1)='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}'
 12.4097 +          ;;
 12.4098 +       *)
 12.4099 +         _LT_AC_TAGVAR(ld_shlibs, $1)=no
 12.4100 +          ;;
 12.4101 +      esac
 12.4102 +      fi
 12.4103 +        ;;
 12.4104 +
 12.4105 +  dgux*)
 12.4106 +    case $cc_basename in
 12.4107 +      ec++*)
 12.4108 +	# FIXME: insert proper C++ library support
 12.4109 +	_LT_AC_TAGVAR(ld_shlibs, $1)=no
 12.4110 +	;;
 12.4111 +      ghcx*)
 12.4112 +	# Green Hills C++ Compiler
 12.4113 +	# FIXME: insert proper C++ library support
 12.4114 +	_LT_AC_TAGVAR(ld_shlibs, $1)=no
 12.4115 +	;;
 12.4116 +      *)
 12.4117 +	# FIXME: insert proper C++ library support
 12.4118 +	_LT_AC_TAGVAR(ld_shlibs, $1)=no
 12.4119 +	;;
 12.4120 +    esac
 12.4121 +    ;;
 12.4122 +  freebsd[[12]]*)
 12.4123 +    # C++ shared libraries reported to be fairly broken before switch to ELF
 12.4124 +    _LT_AC_TAGVAR(ld_shlibs, $1)=no
 12.4125 +    ;;
 12.4126 +  freebsd-elf*)
 12.4127 +    _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no
 12.4128 +    ;;
 12.4129 +  freebsd* | kfreebsd*-gnu | dragonfly*)
 12.4130 +    # FreeBSD 3 and later use GNU C++ and GNU ld with standard ELF
 12.4131 +    # conventions
 12.4132 +    _LT_AC_TAGVAR(ld_shlibs, $1)=yes
 12.4133 +    ;;
 12.4134 +  gnu*)
 12.4135 +    ;;
 12.4136 +  hpux9*)
 12.4137 +    _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir'
 12.4138 +    _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=:
 12.4139 +    _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
 12.4140 +    _LT_AC_TAGVAR(hardcode_direct, $1)=yes
 12.4141 +    _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes # Not in the search PATH,
 12.4142 +				# but as the default
 12.4143 +				# location of the library.
 12.4144 +
 12.4145 +    case $cc_basename in
 12.4146 +    CC*)
 12.4147 +      # FIXME: insert proper C++ library support
 12.4148 +      _LT_AC_TAGVAR(ld_shlibs, $1)=no
 12.4149 +      ;;
 12.4150 +    aCC*)
 12.4151 +      _LT_AC_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'
 12.4152 +      # Commands to make compiler produce verbose output that lists
 12.4153 +      # what "hidden" libraries, object files and flags are used when
 12.4154 +      # linking a shared library.
 12.4155 +      #
 12.4156 +      # There doesn't appear to be a way to prevent this compiler from
 12.4157 +      # explicitly linking system object files so we need to strip them
 12.4158 +      # from the output so that they don't get included in the library
 12.4159 +      # dependencies.
 12.4160 +      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'
 12.4161 +      ;;
 12.4162 +    *)
 12.4163 +      if test "$GXX" = yes; then
 12.4164 +        _LT_AC_TAGVAR(archive_cmds, $1)='$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'
 12.4165 +      else
 12.4166 +        # FIXME: insert proper C++ library support
 12.4167 +        _LT_AC_TAGVAR(ld_shlibs, $1)=no
 12.4168 +      fi
 12.4169 +      ;;
 12.4170 +    esac
 12.4171 +    ;;
 12.4172 +  hpux10*|hpux11*)
 12.4173 +    if test $with_gnu_ld = no; then
 12.4174 +      _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir'
 12.4175 +      _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=:
 12.4176 +
 12.4177 +      case $host_cpu in
 12.4178 +      hppa*64*|ia64*)
 12.4179 +	_LT_AC_TAGVAR(hardcode_libdir_flag_spec_ld, $1)='+b $libdir'
 12.4180 +        ;;
 12.4181 +      *)
 12.4182 +	_LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
 12.4183 +        ;;
 12.4184 +      esac
 12.4185 +    fi
 12.4186 +    case $host_cpu in
 12.4187 +    hppa*64*|ia64*)
 12.4188 +      _LT_AC_TAGVAR(hardcode_direct, $1)=no
 12.4189 +      _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
 12.4190 +      ;;
 12.4191 +    *)
 12.4192 +      _LT_AC_TAGVAR(hardcode_direct, $1)=yes
 12.4193 +      _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes # Not in the search PATH,
 12.4194 +					      # but as the default
 12.4195 +					      # location of the library.
 12.4196 +      ;;
 12.4197 +    esac
 12.4198 +
 12.4199 +    case $cc_basename in
 12.4200 +      CC*)
 12.4201 +	# FIXME: insert proper C++ library support
 12.4202 +	_LT_AC_TAGVAR(ld_shlibs, $1)=no
 12.4203 +	;;
 12.4204 +      aCC*)
 12.4205 +	case $host_cpu in
 12.4206 +	hppa*64*)
 12.4207 +	  _LT_AC_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
 12.4208 +	  ;;
 12.4209 +	ia64*)
 12.4210 +	  _LT_AC_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
 12.4211 +	  ;;
 12.4212 +	*)
 12.4213 +	  _LT_AC_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'
 12.4214 +	  ;;
 12.4215 +	esac
 12.4216 +	# Commands to make compiler produce verbose output that lists
 12.4217 +	# what "hidden" libraries, object files and flags are used when
 12.4218 +	# linking a shared library.
 12.4219 +	#
 12.4220 +	# There doesn't appear to be a way to prevent this compiler from
 12.4221 +	# explicitly linking system object files so we need to strip them
 12.4222 +	# from the output so that they don't get included in the library
 12.4223 +	# dependencies.
 12.4224 +	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'
 12.4225 +	;;
 12.4226 +      *)
 12.4227 +	if test "$GXX" = yes; then
 12.4228 +	  if test $with_gnu_ld = no; then
 12.4229 +	    case $host_cpu in
 12.4230 +	    hppa*64*)
 12.4231 +	      _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
 12.4232 +	      ;;
 12.4233 +	    ia64*)
 12.4234 +	      _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
 12.4235 +	      ;;
 12.4236 +	    *)
 12.4237 +	      _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
 12.4238 +	      ;;
 12.4239 +	    esac
 12.4240 +	  fi
 12.4241 +	else
 12.4242 +	  # FIXME: insert proper C++ library support
 12.4243 +	  _LT_AC_TAGVAR(ld_shlibs, $1)=no
 12.4244 +	fi
 12.4245 +	;;
 12.4246 +    esac
 12.4247 +    ;;
 12.4248 +  interix3*)
 12.4249 +    _LT_AC_TAGVAR(hardcode_direct, $1)=no
 12.4250 +    _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
 12.4251 +    _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
 12.4252 +    _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
 12.4253 +    # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc.
 12.4254 +    # Instead, shared libraries are loaded at an image base (0x10000000 by
 12.4255 +    # default) and relocated if they conflict, which is a slow very memory
 12.4256 +    # consuming and fragmenting process.  To avoid this, we pick a random,
 12.4257 +    # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link
 12.4258 +    # time.  Moving up from 0x10000000 also allows more sbrk(2) space.
 12.4259 +    _LT_AC_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'
 12.4260 +    _LT_AC_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'
 12.4261 +    ;;
 12.4262 +  irix5* | irix6*)
 12.4263 +    case $cc_basename in
 12.4264 +      CC*)
 12.4265 +	# SGI C++
 12.4266 +	_LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -all -multigot $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib'
 12.4267 +
 12.4268 +	# Archives containing C++ object files must be created using
 12.4269 +	# "CC -ar", where "CC" is the IRIX C++ compiler.  This is
 12.4270 +	# necessary to make sure instantiated templates are included
 12.4271 +	# in the archive.
 12.4272 +	_LT_AC_TAGVAR(old_archive_cmds, $1)='$CC -ar -WR,-u -o $oldlib $oldobjs'
 12.4273 +	;;
 12.4274 +      *)
 12.4275 +	if test "$GXX" = yes; then
 12.4276 +	  if test "$with_gnu_ld" = no; then
 12.4277 +	    _LT_AC_TAGVAR(archive_cmds, $1)='$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}${output_objdir}/so_locations -o $lib'
 12.4278 +	  else
 12.4279 +	    _LT_AC_TAGVAR(archive_cmds, $1)='$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'
 12.4280 +	  fi
 12.4281 +	fi
 12.4282 +	_LT_AC_TAGVAR(link_all_deplibs, $1)=yes
 12.4283 +	;;
 12.4284 +    esac
 12.4285 +    _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
 12.4286 +    _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=:
 12.4287 +    ;;
 12.4288 +  linux*)
 12.4289 +    case $cc_basename in
 12.4290 +      KCC*)
 12.4291 +	# Kuck and Associates, Inc. (KAI) C++ Compiler
 12.4292 +
 12.4293 +	# KCC will only create a shared library if the output file
 12.4294 +	# ends with ".so" (or ".sl" for HP-UX), so rename the library
 12.4295 +	# to its proper name (with version) after linking.
 12.4296 +	_LT_AC_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'
 12.4297 +	_LT_AC_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'
 12.4298 +	# Commands to make compiler produce verbose output that lists
 12.4299 +	# what "hidden" libraries, object files and flags are used when
 12.4300 +	# linking a shared library.
 12.4301 +	#
 12.4302 +	# There doesn't appear to be a way to prevent this compiler from
 12.4303 +	# explicitly linking system object files so we need to strip them
 12.4304 +	# from the output so that they don't get included in the library
 12.4305 +	# dependencies.
 12.4306 +	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'
 12.4307 +
 12.4308 +	_LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}--rpath,$libdir'
 12.4309 +	_LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic'
 12.4310 +
 12.4311 +	# Archives containing C++ object files must be created using
 12.4312 +	# "CC -Bstatic", where "CC" is the KAI C++ compiler.
 12.4313 +	_LT_AC_TAGVAR(old_archive_cmds, $1)='$CC -Bstatic -o $oldlib $oldobjs'
 12.4314 +	;;
 12.4315 +      icpc*)
 12.4316 +	# Intel C++
 12.4317 +	with_gnu_ld=yes
 12.4318 +	# version 8.0 and above of icpc choke on multiply defined symbols
 12.4319 +	# if we add $predep_objects and $postdep_objects, however 7.1 and
 12.4320 +	# earlier do not add the objects themselves.
 12.4321 +	case `$CC -V 2>&1` in
 12.4322 +	*"Version 7."*)
 12.4323 +  	  _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib'
 12.4324 +  	  _LT_AC_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'
 12.4325 +	  ;;
 12.4326 +	*)  # Version 8.0 or newer
 12.4327 +	  tmp_idyn=
 12.4328 +	  case $host_cpu in
 12.4329 +	    ia64*) tmp_idyn=' -i_dynamic';;
 12.4330 +	  esac
 12.4331 +  	  _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
 12.4332 +	  _LT_AC_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'
 12.4333 +	  ;;
 12.4334 +	esac
 12.4335 +	_LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no
 12.4336 +	_LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
 12.4337 +	_LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic'
 12.4338 +	_LT_AC_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive$convenience ${wl}--no-whole-archive'
 12.4339 +	;;
 12.4340 +      pgCC*)
 12.4341 +        # Portland Group C++ compiler
 12.4342 +	_LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib'
 12.4343 +  	_LT_AC_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'
 12.4344 +
 12.4345 +	_LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}--rpath ${wl}$libdir'
 12.4346 +	_LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic'
 12.4347 +	_LT_AC_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test  -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $echo \"$new_convenience\"` ${wl}--no-whole-archive'
 12.4348 +        ;;
 12.4349 +      cxx*)
 12.4350 +	# Compaq C++
 12.4351 +	_LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib'
 12.4352 +	_LT_AC_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'
 12.4353 +
 12.4354 +	runpath_var=LD_RUN_PATH
 12.4355 +	_LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir'
 12.4356 +	_LT_AC_TAGVAR(hardcode_libdir_separator, $1)=:
 12.4357 +
 12.4358 +	# Commands to make compiler produce verbose output that lists
 12.4359 +	# what "hidden" libraries, object files and flags are used when
 12.4360 +	# linking a shared library.
 12.4361 +	#
 12.4362 +	# There doesn't appear to be a way to prevent this compiler from
 12.4363 +	# explicitly linking system object files so we need to strip them
 12.4364 +	# from the output so that they don't get included in the library
 12.4365 +	# dependencies.
 12.4366 +	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'
 12.4367 +	;;
 12.4368 +    esac
 12.4369 +    ;;
 12.4370 +  lynxos*)
 12.4371 +    # FIXME: insert proper C++ library support
 12.4372 +    _LT_AC_TAGVAR(ld_shlibs, $1)=no
 12.4373 +    ;;
 12.4374 +  m88k*)
 12.4375 +    # FIXME: insert proper C++ library support
 12.4376 +    _LT_AC_TAGVAR(ld_shlibs, $1)=no
 12.4377 +    ;;
 12.4378 +  mvs*)
 12.4379 +    case $cc_basename in
 12.4380 +      cxx*)
 12.4381 +	# FIXME: insert proper C++ library support
 12.4382 +	_LT_AC_TAGVAR(ld_shlibs, $1)=no
 12.4383 +	;;
 12.4384 +      *)
 12.4385 +	# FIXME: insert proper C++ library support
 12.4386 +	_LT_AC_TAGVAR(ld_shlibs, $1)=no
 12.4387 +	;;
 12.4388 +    esac
 12.4389 +    ;;
 12.4390 +  netbsd* | netbsdelf*-gnu | knetbsd*-gnu)
 12.4391 +    if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then
 12.4392 +      _LT_AC_TAGVAR(archive_cmds, $1)='$LD -Bshareable  -o $lib $predep_objects $libobjs $deplibs $postdep_objects $linker_flags'
 12.4393 +      wlarc=
 12.4394 +      _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
 12.4395 +      _LT_AC_TAGVAR(hardcode_direct, $1)=yes
 12.4396 +      _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
 12.4397 +    fi
 12.4398 +    # Workaround some broken pre-1.5 toolchains
 12.4399 +    output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep conftest.$objext | $SED -e "s:-lgcc -lc -lgcc::"'
 12.4400 +    ;;
 12.4401 +  openbsd2*)
 12.4402 +    # C++ shared libraries are fairly broken
 12.4403 +    _LT_AC_TAGVAR(ld_shlibs, $1)=no
 12.4404 +    ;;
 12.4405 +  openbsd*)
 12.4406 +    _LT_AC_TAGVAR(hardcode_direct, $1)=yes
 12.4407 +    _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
 12.4408 +    _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib'
 12.4409 +    _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
 12.4410 +    if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
 12.4411 +      _LT_AC_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'
 12.4412 +      _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
 12.4413 +      _LT_AC_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive'
 12.4414 +    fi
 12.4415 +    output_verbose_link_cmd='echo'
 12.4416 +    ;;
 12.4417 +  osf3*)
 12.4418 +    case $cc_basename in
 12.4419 +      KCC*)
 12.4420 +	# Kuck and Associates, Inc. (KAI) C++ Compiler
 12.4421 +
 12.4422 +	# KCC will only create a shared library if the output file
 12.4423 +	# ends with ".so" (or ".sl" for HP-UX), so rename the library
 12.4424 +	# to its proper name (with version) after linking.
 12.4425 +	_LT_AC_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'
 12.4426 +
 12.4427 +	_LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
 12.4428 +	_LT_AC_TAGVAR(hardcode_libdir_separator, $1)=:
 12.4429 +
 12.4430 +	# Archives containing C++ object files must be created using
 12.4431 +	# "CC -Bstatic", where "CC" is the KAI C++ compiler.
 12.4432 +	_LT_AC_TAGVAR(old_archive_cmds, $1)='$CC -Bstatic -o $oldlib $oldobjs'
 12.4433 +
 12.4434 +	;;
 12.4435 +      RCC*)
 12.4436 +	# Rational C++ 2.4.1
 12.4437 +	# FIXME: insert proper C++ library support
 12.4438 +	_LT_AC_TAGVAR(ld_shlibs, $1)=no
 12.4439 +	;;
 12.4440 +      cxx*)
 12.4441 +	_LT_AC_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*'
 12.4442 +	_LT_AC_TAGVAR(archive_cmds, $1)='$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 ${output_objdir}/so_locations -o $lib'
 12.4443 +
 12.4444 +	_LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
 12.4445 +	_LT_AC_TAGVAR(hardcode_libdir_separator, $1)=:
 12.4446 +
 12.4447 +	# Commands to make compiler produce verbose output that lists
 12.4448 +	# what "hidden" libraries, object files and flags are used when
 12.4449 +	# linking a shared library.
 12.4450 +	#
 12.4451 +	# There doesn't appear to be a way to prevent this compiler from
 12.4452 +	# explicitly linking system object files so we need to strip them
 12.4453 +	# from the output so that they don't get included in the library
 12.4454 +	# dependencies.
 12.4455 +	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'
 12.4456 +	;;
 12.4457 +      *)
 12.4458 +	if test "$GXX" = yes && test "$with_gnu_ld" = no; then
 12.4459 +	  _LT_AC_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*'
 12.4460 +	  _LT_AC_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" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
 12.4461 +
 12.4462 +	  _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
 12.4463 +	  _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=:
 12.4464 +
 12.4465 +	  # Commands to make compiler produce verbose output that lists
 12.4466 +	  # what "hidden" libraries, object files and flags are used when
 12.4467 +	  # linking a shared library.
 12.4468 +	  output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "\-L"'
 12.4469 +
 12.4470 +	else
 12.4471 +	  # FIXME: insert proper C++ library support
 12.4472 +	  _LT_AC_TAGVAR(ld_shlibs, $1)=no
 12.4473 +	fi
 12.4474 +	;;
 12.4475 +    esac
 12.4476 +    ;;
 12.4477 +  osf4* | osf5*)
 12.4478 +    case $cc_basename in
 12.4479 +      KCC*)
 12.4480 +	# Kuck and Associates, Inc. (KAI) C++ Compiler
 12.4481 +
 12.4482 +	# KCC will only create a shared library if the output file
 12.4483 +	# ends with ".so" (or ".sl" for HP-UX), so rename the library
 12.4484 +	# to its proper name (with version) after linking.
 12.4485 +	_LT_AC_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'
 12.4486 +
 12.4487 +	_LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
 12.4488 +	_LT_AC_TAGVAR(hardcode_libdir_separator, $1)=:
 12.4489 +
 12.4490 +	# Archives containing C++ object files must be created using
 12.4491 +	# the KAI C++ compiler.
 12.4492 +	_LT_AC_TAGVAR(old_archive_cmds, $1)='$CC -o $oldlib $oldobjs'
 12.4493 +	;;
 12.4494 +      RCC*)
 12.4495 +	# Rational C++ 2.4.1
 12.4496 +	# FIXME: insert proper C++ library support
 12.4497 +	_LT_AC_TAGVAR(ld_shlibs, $1)=no
 12.4498 +	;;
 12.4499 +      cxx*)
 12.4500 +	_LT_AC_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*'
 12.4501 +	_LT_AC_TAGVAR(archive_cmds, $1)='$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 ${output_objdir}/so_locations -o $lib'
 12.4502 +	_LT_AC_TAGVAR(archive_expsym_cmds, $1)='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done~
 12.4503 +	  echo "-hidden">> $lib.exp~
 12.4504 +	  $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~
 12.4505 +	  $rm $lib.exp'
 12.4506 +
 12.4507 +	_LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir'
 12.4508 +	_LT_AC_TAGVAR(hardcode_libdir_separator, $1)=:
 12.4509 +
 12.4510 +	# Commands to make compiler produce verbose output that lists
 12.4511 +	# what "hidden" libraries, object files and flags are used when
 12.4512 +	# linking a shared library.
 12.4513 +	#
 12.4514 +	# There doesn't appear to be a way to prevent this compiler from
 12.4515 +	# explicitly linking system object files so we need to strip them
 12.4516 +	# from the output so that they don't get included in the library
 12.4517 +	# dependencies.
 12.4518 +	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'
 12.4519 +	;;
 12.4520 +      *)
 12.4521 +	if test "$GXX" = yes && test "$with_gnu_ld" = no; then
 12.4522 +	  _LT_AC_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*'
 12.4523 +	 _LT_AC_TAGVAR(archive_cmds, $1)='$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}${output_objdir}/so_locations -o $lib'
 12.4524 +
 12.4525 +	  _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
 12.4526 +	  _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=:
 12.4527 +
 12.4528 +	  # Commands to make compiler produce verbose output that lists
 12.4529 +	  # what "hidden" libraries, object files and flags are used when
 12.4530 +	  # linking a shared library.
 12.4531 +	  output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "\-L"'
 12.4532 +
 12.4533 +	else
 12.4534 +	  # FIXME: insert proper C++ library support
 12.4535 +	  _LT_AC_TAGVAR(ld_shlibs, $1)=no
 12.4536 +	fi
 12.4537 +	;;
 12.4538 +    esac
 12.4539 +    ;;
 12.4540 +  psos*)
 12.4541 +    # FIXME: insert proper C++ library support
 12.4542 +    _LT_AC_TAGVAR(ld_shlibs, $1)=no
 12.4543 +    ;;
 12.4544 +  sunos4*)
 12.4545 +    case $cc_basename in
 12.4546 +      CC*)
 12.4547 +	# Sun C++ 4.x
 12.4548 +	# FIXME: insert proper C++ library support
 12.4549 +	_LT_AC_TAGVAR(ld_shlibs, $1)=no
 12.4550 +	;;
 12.4551 +      lcc*)
 12.4552 +	# Lucid
 12.4553 +	# FIXME: insert proper C++ library support
 12.4554 +	_LT_AC_TAGVAR(ld_shlibs, $1)=no
 12.4555 +	;;
 12.4556 +      *)
 12.4557 +	# FIXME: insert proper C++ library support
 12.4558 +	_LT_AC_TAGVAR(ld_shlibs, $1)=no
 12.4559 +	;;
 12.4560 +    esac
 12.4561 +    ;;
 12.4562 +  solaris*)
 12.4563 +    case $cc_basename in
 12.4564 +      CC*)
 12.4565 +	# Sun C++ 4.2, 5.x and Centerline C++
 12.4566 +        _LT_AC_TAGVAR(archive_cmds_need_lc,$1)=yes
 12.4567 +	_LT_AC_TAGVAR(no_undefined_flag, $1)=' -zdefs'
 12.4568 +	_LT_AC_TAGVAR(archive_cmds, $1)='$CC -G${allow_undefined_flag}  -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
 12.4569 +	_LT_AC_TAGVAR(archive_expsym_cmds, $1)='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~
 12.4570 +	$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'
 12.4571 +
 12.4572 +	_LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
 12.4573 +	_LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
 12.4574 +	case $host_os in
 12.4575 +	  solaris2.[[0-5]] | solaris2.[[0-5]].*) ;;
 12.4576 +	  *)
 12.4577 +	    # The C++ compiler is used as linker so we must use $wl
 12.4578 +	    # flag to pass the commands to the underlying system
 12.4579 +	    # linker. We must also pass each convience library through
 12.4580 +	    # to the system linker between allextract/defaultextract.
 12.4581 +	    # The C++ compiler will combine linker options so we
 12.4582 +	    # cannot just pass the convience library names through
 12.4583 +	    # without $wl.
 12.4584 +	    # Supported since Solaris 2.6 (maybe 2.5.1?)
 12.4585 +	    _LT_AC_TAGVAR(whole_archive_flag_spec, $1)='${wl}-z ${wl}allextract`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $echo \"$new_convenience\"` ${wl}-z ${wl}defaultextract'
 12.4586 +	    ;;
 12.4587 +	esac
 12.4588 +	_LT_AC_TAGVAR(link_all_deplibs, $1)=yes
 12.4589 +
 12.4590 +	output_verbose_link_cmd='echo'
 12.4591 +
 12.4592 +	# Archives containing C++ object files must be created using
 12.4593 +	# "CC -xar", where "CC" is the Sun C++ compiler.  This is
 12.4594 +	# necessary to make sure instantiated templates are included
 12.4595 +	# in the archive.
 12.4596 +	_LT_AC_TAGVAR(old_archive_cmds, $1)='$CC -xar -o $oldlib $oldobjs'
 12.4597 +	;;
 12.4598 +      gcx*)
 12.4599 +	# Green Hills C++ Compiler
 12.4600 +	_LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib'
 12.4601 +
 12.4602 +	# The C++ compiler must be used to create the archive.
 12.4603 +	_LT_AC_TAGVAR(old_archive_cmds, $1)='$CC $LDFLAGS -archive -o $oldlib $oldobjs'
 12.4604 +	;;
 12.4605 +      *)
 12.4606 +	# GNU C++ compiler with Solaris linker
 12.4607 +	if test "$GXX" = yes && test "$with_gnu_ld" = no; then
 12.4608 +	  _LT_AC_TAGVAR(no_undefined_flag, $1)=' ${wl}-z ${wl}defs'
 12.4609 +	  if $CC --version | grep -v '^2\.7' > /dev/null; then
 12.4610 +	    _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib'
 12.4611 +	    _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~
 12.4612 +		$CC -shared -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$rm $lib.exp'
 12.4613 +
 12.4614 +	    # Commands to make compiler produce verbose output that lists
 12.4615 +	    # what "hidden" libraries, object files and flags are used when
 12.4616 +	    # linking a shared library.
 12.4617 +	    output_verbose_link_cmd="$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep \"\-L\""
 12.4618 +	  else
 12.4619 +	    # g++ 2.7 appears to require `-G' NOT `-shared' on this
 12.4620 +	    # platform.
 12.4621 +	    _LT_AC_TAGVAR(archive_cmds, $1)='$CC -G -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib'
 12.4622 +	    _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~
 12.4623 +		$CC -G -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$rm $lib.exp'
 12.4624 +
 12.4625 +	    # Commands to make compiler produce verbose output that lists
 12.4626 +	    # what "hidden" libraries, object files and flags are used when
 12.4627 +	    # linking a shared library.
 12.4628 +	    output_verbose_link_cmd="$CC -G $CFLAGS -v conftest.$objext 2>&1 | grep \"\-L\""
 12.4629 +	  fi
 12.4630 +
 12.4631 +	  _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $wl$libdir'
 12.4632 +	fi
 12.4633 +	;;
 12.4634 +    esac
 12.4635 +    ;;
 12.4636 +  sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[[01]].[[10]]* | unixware7* | sco3.2v5.0.[[024]]*)
 12.4637 +    _LT_AC_TAGVAR(no_undefined_flag, $1)='${wl}-z,text'
 12.4638 +    _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no
 12.4639 +    _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
 12.4640 +    runpath_var='LD_RUN_PATH'
 12.4641 +
 12.4642 +    case $cc_basename in
 12.4643 +      CC*)
 12.4644 +	_LT_AC_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
 12.4645 +	_LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
 12.4646 +	;;
 12.4647 +      *)
 12.4648 +	_LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
 12.4649 +	_LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
 12.4650 +	;;
 12.4651 +    esac
 12.4652 +    ;;
 12.4653 +  sysv5* | sco3.2v5* | sco5v6*)
 12.4654 +    # Note: We can NOT use -z defs as we might desire, because we do not
 12.4655 +    # link with -lc, and that would cause any symbols used from libc to
 12.4656 +    # always be unresolved, which means just about no library would
 12.4657 +    # ever link correctly.  If we're not using GNU ld we use -z text
 12.4658 +    # though, which does catch some bad symbols but isn't as heavy-handed
 12.4659 +    # as -z defs.
 12.4660 +    # For security reasons, it is highly recommended that you always
 12.4661 +    # use absolute paths for naming shared libraries, and exclude the
 12.4662 +    # DT_RUNPATH tag from executables and libraries.  But doing so
 12.4663 +    # requires that you compile everything twice, which is a pain.
 12.4664 +    # So that behaviour is only enabled if SCOABSPATH is set to a
 12.4665 +    # non-empty value in the environment.  Most likely only useful for
 12.4666 +    # creating official distributions of packages.
 12.4667 +    # This is a hack until libtool officially supports absolute path
 12.4668 +    # names for shared libraries.
 12.4669 +    _LT_AC_TAGVAR(no_undefined_flag, $1)='${wl}-z,text'
 12.4670 +    _LT_AC_TAGVAR(allow_undefined_flag, $1)='${wl}-z,nodefs'
 12.4671 +    _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no
 12.4672 +    _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
 12.4673 +    _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='`test -z "$SCOABSPATH" && echo ${wl}-R,$libdir`'
 12.4674 +    _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=':'
 12.4675 +    _LT_AC_TAGVAR(link_all_deplibs, $1)=yes
 12.4676 +    _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-Bexport'
 12.4677 +    runpath_var='LD_RUN_PATH'
 12.4678 +
 12.4679 +    case $cc_basename in
 12.4680 +      CC*)
 12.4681 +	_LT_AC_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags'
 12.4682 +	_LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags'
 12.4683 +	;;
 12.4684 +      *)
 12.4685 +	_LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags'
 12.4686 +	_LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags'
 12.4687 +	;;
 12.4688 +    esac
 12.4689 +    ;;
 12.4690 +  tandem*)
 12.4691 +    case $cc_basename in
 12.4692 +      NCC*)
 12.4693 +	# NonStop-UX NCC 3.20
 12.4694 +	# FIXME: insert proper C++ library support
 12.4695 +	_LT_AC_TAGVAR(ld_shlibs, $1)=no
 12.4696 +	;;
 12.4697 +      *)
 12.4698 +	# FIXME: insert proper C++ library support
 12.4699 +	_LT_AC_TAGVAR(ld_shlibs, $1)=no
 12.4700 +	;;
 12.4701 +    esac
 12.4702 +    ;;
 12.4703 +  vxworks*)
 12.4704 +    # FIXME: insert proper C++ library support
 12.4705 +    _LT_AC_TAGVAR(ld_shlibs, $1)=no
 12.4706 +    ;;
 12.4707 +  *)
 12.4708 +    # FIXME: insert proper C++ library support
 12.4709 +    _LT_AC_TAGVAR(ld_shlibs, $1)=no
 12.4710 +    ;;
 12.4711 +esac
 12.4712 +AC_MSG_RESULT([$_LT_AC_TAGVAR(ld_shlibs, $1)])
 12.4713 +test "$_LT_AC_TAGVAR(ld_shlibs, $1)" = no && can_build_shared=no
 12.4714 +
 12.4715 +_LT_AC_TAGVAR(GCC, $1)="$GXX"
 12.4716 +_LT_AC_TAGVAR(LD, $1)="$LD"
 12.4717 +
 12.4718 +AC_LIBTOOL_POSTDEP_PREDEP($1)
 12.4719 +AC_LIBTOOL_PROG_COMPILER_PIC($1)
 12.4720 +AC_LIBTOOL_PROG_CC_C_O($1)
 12.4721 +AC_LIBTOOL_SYS_HARD_LINK_LOCKS($1)
 12.4722 +AC_LIBTOOL_PROG_LD_SHLIBS($1)
 12.4723 +AC_LIBTOOL_SYS_DYNAMIC_LINKER($1)
 12.4724 +AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH($1)
 12.4725 +
 12.4726 +AC_LIBTOOL_CONFIG($1)
 12.4727 +
 12.4728 +AC_LANG_POP
 12.4729 +CC=$lt_save_CC
 12.4730 +LDCXX=$LD
 12.4731 +LD=$lt_save_LD
 12.4732 +GCC=$lt_save_GCC
 12.4733 +with_gnu_ldcxx=$with_gnu_ld
 12.4734 +with_gnu_ld=$lt_save_with_gnu_ld
 12.4735 +lt_cv_path_LDCXX=$lt_cv_path_LD
 12.4736 +lt_cv_path_LD=$lt_save_path_LD
 12.4737 +lt_cv_prog_gnu_ldcxx=$lt_cv_prog_gnu_ld
 12.4738 +lt_cv_prog_gnu_ld=$lt_save_with_gnu_ld
 12.4739 +])# AC_LIBTOOL_LANG_CXX_CONFIG
 12.4740 +
 12.4741 +# AC_LIBTOOL_POSTDEP_PREDEP([TAGNAME])
 12.4742 +# ------------------------------------
 12.4743 +# Figure out "hidden" library dependencies from verbose
 12.4744 +# compiler output when linking a shared library.
 12.4745 +# Parse the compiler output and extract the necessary
 12.4746 +# objects, libraries and library flags.
 12.4747 +AC_DEFUN([AC_LIBTOOL_POSTDEP_PREDEP],[
 12.4748 +dnl we can't use the lt_simple_compile_test_code here,
 12.4749 +dnl because it contains code intended for an executable,
 12.4750 +dnl not a library.  It's possible we should let each
 12.4751 +dnl tag define a new lt_????_link_test_code variable,
 12.4752 +dnl but it's only used here...
 12.4753 +ifelse([$1],[],[cat > conftest.$ac_ext <<EOF
 12.4754 +int a;
 12.4755 +void foo (void) { a = 0; }
 12.4756 +EOF
 12.4757 +],[$1],[CXX],[cat > conftest.$ac_ext <<EOF
 12.4758 +class Foo
 12.4759 +{
 12.4760 +public:
 12.4761 +  Foo (void) { a = 0; }
 12.4762 +private:
 12.4763 +  int a;
 12.4764 +};
 12.4765 +EOF
 12.4766 +],[$1],[F77],[cat > conftest.$ac_ext <<EOF
 12.4767 +      subroutine foo
 12.4768 +      implicit none
 12.4769 +      integer*4 a
 12.4770 +      a=0
 12.4771 +      return
 12.4772 +      end
 12.4773 +EOF
 12.4774 +],[$1],[GCJ],[cat > conftest.$ac_ext <<EOF
 12.4775 +public class foo {
 12.4776 +  private int a;
 12.4777 +  public void bar (void) {
 12.4778 +    a = 0;
 12.4779 +  }
 12.4780 +};
 12.4781 +EOF
 12.4782 +])
 12.4783 +dnl Parse the compiler output and extract the necessary
 12.4784 +dnl objects, libraries and library flags.
 12.4785 +if AC_TRY_EVAL(ac_compile); then
 12.4786 +  # Parse the compiler output and extract the necessary
 12.4787 +  # objects, libraries and library flags.
 12.4788 +
 12.4789 +  # Sentinel used to keep track of whether or not we are before
 12.4790 +  # the conftest object file.
 12.4791 +  pre_test_object_deps_done=no
 12.4792 +
 12.4793 +  # The `*' in the case matches for architectures that use `case' in
 12.4794 +  # $output_verbose_cmd can trigger glob expansion during the loop
 12.4795 +  # eval without this substitution.
 12.4796 +  output_verbose_link_cmd=`$echo "X$output_verbose_link_cmd" | $Xsed -e "$no_glob_subst"`
 12.4797 +
 12.4798 +  for p in `eval $output_verbose_link_cmd`; do
 12.4799 +    case $p in
 12.4800 +
 12.4801 +    -L* | -R* | -l*)
 12.4802 +       # Some compilers place space between "-{L,R}" and the path.
 12.4803 +       # Remove the space.
 12.4804 +       if test $p = "-L" \
 12.4805 +	  || test $p = "-R"; then
 12.4806 +	 prev=$p
 12.4807 +	 continue
 12.4808 +       else
 12.4809 +	 prev=
 12.4810 +       fi
 12.4811 +
 12.4812 +       if test "$pre_test_object_deps_done" = no; then
 12.4813 +	 case $p in
 12.4814 +	 -L* | -R*)
 12.4815 +	   # Internal compiler library paths should come after those
 12.4816 +	   # provided the user.  The postdeps already come after the
 12.4817 +	   # user supplied libs so there is no need to process them.
 12.4818 +	   if test -z "$_LT_AC_TAGVAR(compiler_lib_search_path, $1)"; then
 12.4819 +	     _LT_AC_TAGVAR(compiler_lib_search_path, $1)="${prev}${p}"
 12.4820 +	   else
 12.4821 +	     _LT_AC_TAGVAR(compiler_lib_search_path, $1)="${_LT_AC_TAGVAR(compiler_lib_search_path, $1)} ${prev}${p}"
 12.4822 +	   fi
 12.4823 +	   ;;
 12.4824 +	 # The "-l" case would never come before the object being
 12.4825 +	 # linked, so don't bother handling this case.
 12.4826 +	 esac
 12.4827 +       else
 12.4828 +	 if test -z "$_LT_AC_TAGVAR(postdeps, $1)"; then
 12.4829 +	   _LT_AC_TAGVAR(postdeps, $1)="${prev}${p}"
 12.4830 +	 else
 12.4831 +	   _LT_AC_TAGVAR(postdeps, $1)="${_LT_AC_TAGVAR(postdeps, $1)} ${prev}${p}"
 12.4832 +	 fi
 12.4833 +       fi
 12.4834 +       ;;
 12.4835 +
 12.4836 +    *.$objext)
 12.4837 +       # This assumes that the test object file only shows up
 12.4838 +       # once in the compiler output.
 12.4839 +       if test "$p" = "conftest.$objext"; then
 12.4840 +	 pre_test_object_deps_done=yes
 12.4841 +	 continue
 12.4842 +       fi
 12.4843 +
 12.4844 +       if test "$pre_test_object_deps_done" = no; then
 12.4845 +	 if test -z "$_LT_AC_TAGVAR(predep_objects, $1)"; then
 12.4846 +	   _LT_AC_TAGVAR(predep_objects, $1)="$p"
 12.4847 +	 else
 12.4848 +	   _LT_AC_TAGVAR(predep_objects, $1)="$_LT_AC_TAGVAR(predep_objects, $1) $p"
 12.4849 +	 fi
 12.4850 +       else
 12.4851 +	 if test -z "$_LT_AC_TAGVAR(postdep_objects, $1)"; then
 12.4852 +	   _LT_AC_TAGVAR(postdep_objects, $1)="$p"
 12.4853 +	 else
 12.4854 +	   _LT_AC_TAGVAR(postdep_objects, $1)="$_LT_AC_TAGVAR(postdep_objects, $1) $p"
 12.4855 +	 fi
 12.4856 +       fi
 12.4857 +       ;;
 12.4858 +
 12.4859 +    *) ;; # Ignore the rest.
 12.4860 +
 12.4861 +    esac
 12.4862 +  done
 12.4863 +
 12.4864 +  # Clean up.
 12.4865 +  rm -f a.out a.exe
 12.4866 +else
 12.4867 +  echo "libtool.m4: error: problem compiling $1 test program"
 12.4868 +fi
 12.4869 +
 12.4870 +$rm -f confest.$objext
 12.4871 +
 12.4872 +# PORTME: override above test on systems where it is broken
 12.4873 +ifelse([$1],[CXX],
 12.4874 +[case $host_os in
 12.4875 +interix3*)
 12.4876 +  # Interix 3.5 installs completely hosed .la files for C++, so rather than
 12.4877 +  # hack all around it, let's just trust "g++" to DTRT.
 12.4878 +  _LT_AC_TAGVAR(predep_objects,$1)=
 12.4879 +  _LT_AC_TAGVAR(postdep_objects,$1)=
 12.4880 +  _LT_AC_TAGVAR(postdeps,$1)=
 12.4881 +  ;;
 12.4882 +
 12.4883 +solaris*)
 12.4884 +  case $cc_basename in
 12.4885 +  CC*)
 12.4886 +    # Adding this requires a known-good setup of shared libraries for
 12.4887 +    # Sun compiler versions before 5.6, else PIC objects from an old
 12.4888 +    # archive will be linked into the output, leading to subtle bugs.
 12.4889 +    _LT_AC_TAGVAR(postdeps,$1)='-lCstd -lCrun'
 12.4890 +    ;;
 12.4891 +  esac
 12.4892 +  ;;
 12.4893 +esac
 12.4894 +])
 12.4895 +
 12.4896 +case " $_LT_AC_TAGVAR(postdeps, $1) " in
 12.4897 +*" -lc "*) _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no ;;
 12.4898 +esac
 12.4899 +])# AC_LIBTOOL_POSTDEP_PREDEP
 12.4900 +
 12.4901 +# AC_LIBTOOL_LANG_F77_CONFIG
 12.4902 +# --------------------------
 12.4903 +# Ensure that the configuration vars for the C compiler are
 12.4904 +# suitably defined.  Those variables are subsequently used by
 12.4905 +# AC_LIBTOOL_CONFIG to write the compiler configuration to `libtool'.
 12.4906 +AC_DEFUN([AC_LIBTOOL_LANG_F77_CONFIG], [_LT_AC_LANG_F77_CONFIG(F77)])
 12.4907 +AC_DEFUN([_LT_AC_LANG_F77_CONFIG],
 12.4908 +[AC_REQUIRE([AC_PROG_F77])
 12.4909 +AC_LANG_PUSH(Fortran 77)
 12.4910 +
 12.4911 +_LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no
 12.4912 +_LT_AC_TAGVAR(allow_undefined_flag, $1)=
 12.4913 +_LT_AC_TAGVAR(always_export_symbols, $1)=no
 12.4914 +_LT_AC_TAGVAR(archive_expsym_cmds, $1)=
 12.4915 +_LT_AC_TAGVAR(export_dynamic_flag_spec, $1)=
 12.4916 +_LT_AC_TAGVAR(hardcode_direct, $1)=no
 12.4917 +_LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)=
 12.4918 +_LT_AC_TAGVAR(hardcode_libdir_flag_spec_ld, $1)=
 12.4919 +_LT_AC_TAGVAR(hardcode_libdir_separator, $1)=
 12.4920 +_LT_AC_TAGVAR(hardcode_minus_L, $1)=no
 12.4921 +_LT_AC_TAGVAR(hardcode_automatic, $1)=no
 12.4922 +_LT_AC_TAGVAR(module_cmds, $1)=
 12.4923 +_LT_AC_TAGVAR(module_expsym_cmds, $1)=
 12.4924 +_LT_AC_TAGVAR(link_all_deplibs, $1)=unknown
 12.4925 +_LT_AC_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds
 12.4926 +_LT_AC_TAGVAR(no_undefined_flag, $1)=
 12.4927 +_LT_AC_TAGVAR(whole_archive_flag_spec, $1)=
 12.4928 +_LT_AC_TAGVAR(enable_shared_with_static_runtimes, $1)=no
 12.4929 +
 12.4930 +# Source file extension for f77 test sources.
 12.4931 +ac_ext=f
 12.4932 +
 12.4933 +# Object file extension for compiled f77 test sources.
 12.4934 +objext=o
 12.4935 +_LT_AC_TAGVAR(objext, $1)=$objext
 12.4936 +
 12.4937 +# Code to be used in simple compile tests
 12.4938 +lt_simple_compile_test_code="      subroutine t\n      return\n      end\n"
 12.4939 +
 12.4940 +# Code to be used in simple link tests
 12.4941 +lt_simple_link_test_code="      program t\n      end\n"
 12.4942 +
 12.4943 +# ltmain only uses $CC for tagged configurations so make sure $CC is set.
 12.4944 +_LT_AC_SYS_COMPILER
 12.4945 +
 12.4946 +# save warnings/boilerplate of simple test code
 12.4947 +_LT_COMPILER_BOILERPLATE
 12.4948 +_LT_LINKER_BOILERPLATE
 12.4949 +
 12.4950 +# Allow CC to be a program name with arguments.
 12.4951 +lt_save_CC="$CC"
 12.4952 +CC=${F77-"f77"}
 12.4953 +compiler=$CC
 12.4954 +_LT_AC_TAGVAR(compiler, $1)=$CC
 12.4955 +_LT_CC_BASENAME([$compiler])
 12.4956 +
 12.4957 +AC_MSG_CHECKING([if libtool supports shared libraries])
 12.4958 +AC_MSG_RESULT([$can_build_shared])
 12.4959 +
 12.4960 +AC_MSG_CHECKING([whether to build shared libraries])
 12.4961 +test "$can_build_shared" = "no" && enable_shared=no
 12.4962 +
 12.4963 +# On AIX, shared libraries and static libraries use the same namespace, and
 12.4964 +# are all built from PIC.
 12.4965 +case $host_os in
 12.4966 +aix3*)
 12.4967 +  test "$enable_shared" = yes && enable_static=no
 12.4968 +  if test -n "$RANLIB"; then
 12.4969 +    archive_cmds="$archive_cmds~\$RANLIB \$lib"
 12.4970 +    postinstall_cmds='$RANLIB $lib'
 12.4971 +  fi
 12.4972 +  ;;
 12.4973 +aix4* | aix5*)
 12.4974 +  if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then
 12.4975 +    test "$enable_shared" = yes && enable_static=no
 12.4976 +  fi
 12.4977 +  ;;
 12.4978 +esac
 12.4979 +AC_MSG_RESULT([$enable_shared])
 12.4980 +
 12.4981 +AC_MSG_CHECKING([whether to build static libraries])
 12.4982 +# Make sure either enable_shared or enable_static is yes.
 12.4983 +test "$enable_shared" = yes || enable_static=yes
 12.4984 +AC_MSG_RESULT([$enable_static])
 12.4985 +
 12.4986 +_LT_AC_TAGVAR(GCC, $1)="$G77"
 12.4987 +_LT_AC_TAGVAR(LD, $1)="$LD"
 12.4988 +
 12.4989 +AC_LIBTOOL_PROG_COMPILER_PIC($1)
 12.4990 +AC_LIBTOOL_PROG_CC_C_O($1)
 12.4991 +AC_LIBTOOL_SYS_HARD_LINK_LOCKS($1)
 12.4992 +AC_LIBTOOL_PROG_LD_SHLIBS($1)
 12.4993 +AC_LIBTOOL_SYS_DYNAMIC_LINKER($1)
 12.4994 +AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH($1)
 12.4995 +
 12.4996 +AC_LIBTOOL_CONFIG($1)
 12.4997 +
 12.4998 +AC_LANG_POP
 12.4999 +CC="$lt_save_CC"
 12.5000 +])# AC_LIBTOOL_LANG_F77_CONFIG
 12.5001 +
 12.5002 +
 12.5003 +# AC_LIBTOOL_LANG_GCJ_CONFIG
 12.5004 +# --------------------------
 12.5005 +# Ensure that the configuration vars for the C compiler are
 12.5006 +# suitably defined.  Those variables are subsequently used by
 12.5007 +# AC_LIBTOOL_CONFIG to write the compiler configuration to `libtool'.
 12.5008 +AC_DEFUN([AC_LIBTOOL_LANG_GCJ_CONFIG], [_LT_AC_LANG_GCJ_CONFIG(GCJ)])
 12.5009 +AC_DEFUN([_LT_AC_LANG_GCJ_CONFIG],
 12.5010 +[AC_LANG_SAVE
 12.5011 +
 12.5012 +# Source file extension for Java test sources.
 12.5013 +ac_ext=java
 12.5014 +
 12.5015 +# Object file extension for compiled Java test sources.
 12.5016 +objext=o
 12.5017 +_LT_AC_TAGVAR(objext, $1)=$objext
 12.5018 +
 12.5019 +# Code to be used in simple compile tests
 12.5020 +lt_simple_compile_test_code="class foo {}\n"
 12.5021 +
 12.5022 +# Code to be used in simple link tests
 12.5023 +lt_simple_link_test_code='public class conftest { public static void main(String[[]] argv) {}; }\n'
 12.5024 +
 12.5025 +# ltmain only uses $CC for tagged configurations so make sure $CC is set.
 12.5026 +_LT_AC_SYS_COMPILER
 12.5027 +
 12.5028 +# save warnings/boilerplate of simple test code
 12.5029 +_LT_COMPILER_BOILERPLATE
 12.5030 +_LT_LINKER_BOILERPLATE
 12.5031 +
 12.5032 +# Allow CC to be a program name with arguments.
 12.5033 +lt_save_CC="$CC"
 12.5034 +CC=${GCJ-"gcj"}
 12.5035 +compiler=$CC
 12.5036 +_LT_AC_TAGVAR(compiler, $1)=$CC
 12.5037 +_LT_CC_BASENAME([$compiler])
 12.5038 +
 12.5039 +# GCJ did not exist at the time GCC didn't implicitly link libc in.
 12.5040 +_LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no
 12.5041 +
 12.5042 +_LT_AC_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds
 12.5043 +
 12.5044 +AC_LIBTOOL_PROG_COMPILER_NO_RTTI($1)
 12.5045 +AC_LIBTOOL_PROG_COMPILER_PIC($1)
 12.5046 +AC_LIBTOOL_PROG_CC_C_O($1)
 12.5047 +AC_LIBTOOL_SYS_HARD_LINK_LOCKS($1)
 12.5048 +AC_LIBTOOL_PROG_LD_SHLIBS($1)
 12.5049 +AC_LIBTOOL_SYS_DYNAMIC_LINKER($1)
 12.5050 +AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH($1)
 12.5051 +
 12.5052 +AC_LIBTOOL_CONFIG($1)
 12.5053 +
 12.5054 +AC_LANG_RESTORE
 12.5055 +CC="$lt_save_CC"
 12.5056 +])# AC_LIBTOOL_LANG_GCJ_CONFIG
 12.5057 +
 12.5058 +
 12.5059 +# AC_LIBTOOL_LANG_RC_CONFIG
 12.5060 +# -------------------------
 12.5061 +# Ensure that the configuration vars for the Windows resource compiler are
 12.5062 +# suitably defined.  Those variables are subsequently used by
 12.5063 +# AC_LIBTOOL_CONFIG to write the compiler configuration to `libtool'.
 12.5064 +AC_DEFUN([AC_LIBTOOL_LANG_RC_CONFIG], [_LT_AC_LANG_RC_CONFIG(RC)])
 12.5065 +AC_DEFUN([_LT_AC_LANG_RC_CONFIG],
 12.5066 +[AC_LANG_SAVE
 12.5067 +
 12.5068 +# Source file extension for RC test sources.
 12.5069 +ac_ext=rc
 12.5070 +
 12.5071 +# Object file extension for compiled RC test sources.
 12.5072 +objext=o
 12.5073 +_LT_AC_TAGVAR(objext, $1)=$objext
 12.5074 +
 12.5075 +# Code to be used in simple compile tests
 12.5076 +lt_simple_compile_test_code='sample MENU { MENUITEM "&Soup", 100, CHECKED }\n'
 12.5077 +
 12.5078 +# Code to be used in simple link tests
 12.5079 +lt_simple_link_test_code="$lt_simple_compile_test_code"
 12.5080 +
 12.5081 +# ltmain only uses $CC for tagged configurations so make sure $CC is set.
 12.5082 +_LT_AC_SYS_COMPILER
 12.5083 +
 12.5084 +# save warnings/boilerplate of simple test code
 12.5085 +_LT_COMPILER_BOILERPLATE
 12.5086 +_LT_LINKER_BOILERPLATE
 12.5087 +
 12.5088 +# Allow CC to be a program name with arguments.
 12.5089 +lt_save_CC="$CC"
 12.5090 +CC=${RC-"windres"}
 12.5091 +compiler=$CC
 12.5092 +_LT_AC_TAGVAR(compiler, $1)=$CC
 12.5093 +_LT_CC_BASENAME([$compiler])
 12.5094 +_LT_AC_TAGVAR(lt_cv_prog_compiler_c_o, $1)=yes
 12.5095 +
 12.5096 +AC_LIBTOOL_CONFIG($1)
 12.5097 +
 12.5098 +AC_LANG_RESTORE
 12.5099 +CC="$lt_save_CC"
 12.5100 +])# AC_LIBTOOL_LANG_RC_CONFIG
 12.5101 +
 12.5102 +
 12.5103 +# AC_LIBTOOL_CONFIG([TAGNAME])
 12.5104 +# ----------------------------
 12.5105 +# If TAGNAME is not passed, then create an initial libtool script
 12.5106 +# with a default configuration from the untagged config vars.  Otherwise
 12.5107 +# add code to config.status for appending the configuration named by
 12.5108 +# TAGNAME from the matching tagged config vars.
 12.5109 +AC_DEFUN([AC_LIBTOOL_CONFIG],
 12.5110 +[# The else clause should only fire when bootstrapping the
 12.5111 +# libtool distribution, otherwise you forgot to ship ltmain.sh
 12.5112 +# with your package, and you will get complaints that there are
 12.5113 +# no rules to generate ltmain.sh.
 12.5114 +if test -f "$ltmain"; then
 12.5115 +  # See if we are running on zsh, and set the options which allow our commands through
 12.5116 +  # without removal of \ escapes.
 12.5117 +  if test -n "${ZSH_VERSION+set}" ; then
 12.5118 +    setopt NO_GLOB_SUBST
 12.5119 +  fi
 12.5120 +  # Now quote all the things that may contain metacharacters while being
 12.5121 +  # careful not to overquote the AC_SUBSTed values.  We take copies of the
 12.5122 +  # variables and quote the copies for generation of the libtool script.
 12.5123 +  for var in echo old_CC old_CFLAGS AR AR_FLAGS EGREP RANLIB LN_S LTCC LTCFLAGS NM \
 12.5124 +    SED SHELL STRIP \
 12.5125 +    libname_spec library_names_spec soname_spec extract_expsyms_cmds \
 12.5126 +    old_striplib striplib file_magic_cmd finish_cmds finish_eval \
 12.5127 +    deplibs_check_method reload_flag reload_cmds need_locks \
 12.5128 +    lt_cv_sys_global_symbol_pipe lt_cv_sys_global_symbol_to_cdecl \
 12.5129 +    lt_cv_sys_global_symbol_to_c_name_address \
 12.5130 +    sys_lib_search_path_spec sys_lib_dlsearch_path_spec \
 12.5131 +    old_postinstall_cmds old_postuninstall_cmds \
 12.5132 +    _LT_AC_TAGVAR(compiler, $1) \
 12.5133 +    _LT_AC_TAGVAR(CC, $1) \
 12.5134 +    _LT_AC_TAGVAR(LD, $1) \
 12.5135 +    _LT_AC_TAGVAR(lt_prog_compiler_wl, $1) \
 12.5136 +    _LT_AC_TAGVAR(lt_prog_compiler_pic, $1) \
 12.5137 +    _LT_AC_TAGVAR(lt_prog_compiler_static, $1) \
 12.5138 +    _LT_AC_TAGVAR(lt_prog_compiler_no_builtin_flag, $1) \
 12.5139 +    _LT_AC_TAGVAR(export_dynamic_flag_spec, $1) \
 12.5140 +    _LT_AC_TAGVAR(thread_safe_flag_spec, $1) \
 12.5141 +    _LT_AC_TAGVAR(whole_archive_flag_spec, $1) \
 12.5142 +    _LT_AC_TAGVAR(enable_shared_with_static_runtimes, $1) \
 12.5143 +    _LT_AC_TAGVAR(old_archive_cmds, $1) \
 12.5144 +    _LT_AC_TAGVAR(old_archive_from_new_cmds, $1) \
 12.5145 +    _LT_AC_TAGVAR(predep_objects, $1) \
 12.5146 +    _LT_AC_TAGVAR(postdep_objects, $1) \
 12.5147 +    _LT_AC_TAGVAR(predeps, $1) \
 12.5148 +    _LT_AC_TAGVAR(postdeps, $1) \
 12.5149 +    _LT_AC_TAGVAR(compiler_lib_search_path, $1) \
 12.5150 +    _LT_AC_TAGVAR(archive_cmds, $1) \
 12.5151 +    _LT_AC_TAGVAR(archive_expsym_cmds, $1) \
 12.5152 +    _LT_AC_TAGVAR(postinstall_cmds, $1) \
 12.5153 +    _LT_AC_TAGVAR(postuninstall_cmds, $1) \
 12.5154 +    _LT_AC_TAGVAR(old_archive_from_expsyms_cmds, $1) \
 12.5155 +    _LT_AC_TAGVAR(allow_undefined_flag, $1) \
 12.5156 +    _LT_AC_TAGVAR(no_undefined_flag, $1) \
 12.5157 +    _LT_AC_TAGVAR(export_symbols_cmds, $1) \
 12.5158 +    _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1) \
 12.5159 +    _LT_AC_TAGVAR(hardcode_libdir_flag_spec_ld, $1) \
 12.5160 +    _LT_AC_TAGVAR(hardcode_libdir_separator, $1) \
 12.5161 +    _LT_AC_TAGVAR(hardcode_automatic, $1) \
 12.5162 +    _LT_AC_TAGVAR(module_cmds, $1) \
 12.5163 +    _LT_AC_TAGVAR(module_expsym_cmds, $1) \
 12.5164 +    _LT_AC_TAGVAR(lt_cv_prog_compiler_c_o, $1) \
 12.5165 +    _LT_AC_TAGVAR(exclude_expsyms, $1) \
 12.5166 +    _LT_AC_TAGVAR(include_expsyms, $1); do
 12.5167 +
 12.5168 +    case $var in
 12.5169 +    _LT_AC_TAGVAR(old_archive_cmds, $1) | \
 12.5170 +    _LT_AC_TAGVAR(old_archive_from_new_cmds, $1) | \
 12.5171 +    _LT_AC_TAGVAR(archive_cmds, $1) | \
 12.5172 +    _LT_AC_TAGVAR(archive_expsym_cmds, $1) | \
 12.5173 +    _LT_AC_TAGVAR(module_cmds, $1) | \
 12.5174 +    _LT_AC_TAGVAR(module_expsym_cmds, $1) | \
 12.5175 +    _LT_AC_TAGVAR(old_archive_from_expsyms_cmds, $1) | \
 12.5176 +    _LT_AC_TAGVAR(export_symbols_cmds, $1) | \
 12.5177 +    extract_expsyms_cmds | reload_cmds | finish_cmds | \
 12.5178 +    postinstall_cmds | postuninstall_cmds | \
 12.5179 +    old_postinstall_cmds | old_postuninstall_cmds | \
 12.5180 +    sys_lib_search_path_spec | sys_lib_dlsearch_path_spec)
 12.5181 +      # Double-quote double-evaled strings.
 12.5182 +      eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$double_quote_subst\" -e \"\$sed_quote_subst\" -e \"\$delay_variable_subst\"\`\\\""
 12.5183 +      ;;
 12.5184 +    *)
 12.5185 +      eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$sed_quote_subst\"\`\\\""
 12.5186 +      ;;
 12.5187 +    esac
 12.5188 +  done
 12.5189 +
 12.5190 +  case $lt_echo in
 12.5191 +  *'\[$]0 --fallback-echo"')
 12.5192 +    lt_echo=`$echo "X$lt_echo" | $Xsed -e 's/\\\\\\\[$]0 --fallback-echo"[$]/[$]0 --fallback-echo"/'`
 12.5193 +    ;;
 12.5194 +  esac
 12.5195 +
 12.5196 +ifelse([$1], [],
 12.5197 +  [cfgfile="${ofile}T"
 12.5198 +  trap "$rm \"$cfgfile\"; exit 1" 1 2 15
 12.5199 +  $rm -f "$cfgfile"
 12.5200 +  AC_MSG_NOTICE([creating $ofile])],
 12.5201 +  [cfgfile="$ofile"])
 12.5202 +
 12.5203 +  cat <<__EOF__ >> "$cfgfile"
 12.5204 +ifelse([$1], [],
 12.5205 +[#! $SHELL
 12.5206 +
 12.5207 +# `$echo "$cfgfile" | sed 's%^.*/%%'` - Provide generalized library-building support services.
 12.5208 +# Generated automatically by $PROGRAM (GNU $PACKAGE $VERSION$TIMESTAMP)
 12.5209 +# NOTE: Changes made to this file will be lost: look at ltmain.sh.
 12.5210 +#
 12.5211 +# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001
 12.5212 +# Free Software Foundation, Inc.
 12.5213 +#
 12.5214 +# This file is part of GNU Libtool:
 12.5215 +# Originally by Gordon Matzigkeit <gord@gnu.ai.mit.edu>, 1996
 12.5216 +#
 12.5217 +# This program is free software; you can redistribute it and/or modify
 12.5218 +# it under the terms of the GNU General Public License as published by
 12.5219 +# the Free Software Foundation; either version 2 of the License, or
 12.5220 +# (at your option) any later version.
 12.5221 +#
 12.5222 +# This program is distributed in the hope that it will be useful, but
 12.5223 +# WITHOUT ANY WARRANTY; without even the implied warranty of
 12.5224 +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 12.5225 +# General Public License for more details.
 12.5226 +#
 12.5227 +# You should have received a copy of the GNU General Public License
 12.5228 +# along with this program; if not, write to the Free Software
 12.5229 +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
 12.5230 +#
 12.5231 +# As a special exception to the GNU General Public License, if you
 12.5232 +# distribute this file as part of a program that contains a
 12.5233 +# configuration script generated by Autoconf, you may include it under
 12.5234 +# the same distribution terms that you use for the rest of that program.
 12.5235 +
 12.5236 +# A sed program that does not truncate output.
 12.5237 +SED=$lt_SED
 12.5238 +
 12.5239 +# Sed that helps us avoid accidentally triggering echo(1) options like -n.
 12.5240 +Xsed="$SED -e 1s/^X//"
 12.5241 +
 12.5242 +# The HP-UX ksh and POSIX shell print the target directory to stdout
 12.5243 +# if CDPATH is set.
 12.5244 +(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
 12.5245 +
 12.5246 +# The names of the tagged configurations supported by this script.
 12.5247 +available_tags=
 12.5248 +
 12.5249 +# ### BEGIN LIBTOOL CONFIG],
 12.5250 +[# ### BEGIN LIBTOOL TAG CONFIG: $tagname])
 12.5251 +
 12.5252 +# Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`:
 12.5253 +
 12.5254 +# Shell to use when invoking shell scripts.
 12.5255 +SHELL=$lt_SHELL
 12.5256 +
 12.5257 +# Whether or not to build shared libraries.
 12.5258 +build_libtool_libs=$enable_shared
 12.5259 +
 12.5260 +# Whether or not to build static libraries.
 12.5261 +build_old_libs=$enable_static
 12.5262 +
 12.5263 +# Whether or not to add -lc for building shared libraries.
 12.5264 +build_libtool_need_lc=$_LT_AC_TAGVAR(archive_cmds_need_lc, $1)
 12.5265 +
 12.5266 +# Whether or not to disallow shared libs when runtime libs are static
 12.5267 +allow_libtool_libs_with_static_runtimes=$_LT_AC_TAGVAR(enable_shared_with_static_runtimes, $1)
 12.5268 +
 12.5269 +# Whether or not to optimize for fast installation.
 12.5270 +fast_install=$enable_fast_install
 12.5271 +
 12.5272 +# The host system.
 12.5273 +host_alias=$host_alias
 12.5274 +host=$host
 12.5275 +host_os=$host_os
 12.5276 +
 12.5277 +# The build system.
 12.5278 +build_alias=$build_alias
 12.5279 +build=$build
 12.5280 +build_os=$build_os
 12.5281 +
 12.5282 +# An echo program that does not interpret backslashes.
 12.5283 +echo=$lt_echo
 12.5284 +
 12.5285 +# The archiver.
 12.5286 +AR=$lt_AR
 12.5287 +AR_FLAGS=$lt_AR_FLAGS
 12.5288 +
 12.5289 +# A C compiler.
 12.5290 +LTCC=$lt_LTCC
 12.5291 +
 12.5292 +# LTCC compiler flags.
 12.5293 +LTCFLAGS=$lt_LTCFLAGS
 12.5294 +
 12.5295 +# A language-specific compiler.
 12.5296 +CC=$lt_[]_LT_AC_TAGVAR(compiler, $1)
 12.5297 +
 12.5298 +# Is the compiler the GNU C compiler?
 12.5299 +with_gcc=$_LT_AC_TAGVAR(GCC, $1)
 12.5300 +
 12.5301 +# An ERE matcher.
 12.5302 +EGREP=$lt_EGREP
 12.5303 +
 12.5304 +# The linker used to build libraries.
 12.5305 +LD=$lt_[]_LT_AC_TAGVAR(LD, $1)
 12.5306 +
 12.5307 +# Whether we need hard or soft links.
 12.5308 +LN_S=$lt_LN_S
 12.5309 +
 12.5310 +# A BSD-compatible nm program.
 12.5311 +NM=$lt_NM
 12.5312 +
 12.5313 +# A symbol stripping program
 12.5314 +STRIP=$lt_STRIP
 12.5315 +
 12.5316 +# Used to examine libraries when file_magic_cmd begins "file"
 12.5317 +MAGIC_CMD=$MAGIC_CMD
 12.5318 +
 12.5319 +# Used on cygwin: DLL creation program.
 12.5320 +DLLTOOL="$DLLTOOL"
 12.5321 +
 12.5322 +# Used on cygwin: object dumper.
 12.5323 +OBJDUMP="$OBJDUMP"
 12.5324 +
 12.5325 +# Used on cygwin: assembler.
 12.5326 +AS="$AS"
 12.5327 +
 12.5328 +# The name of the directory that contains temporary libtool files.
 12.5329 +objdir=$objdir
 12.5330 +
 12.5331 +# How to create reloadable object files.
 12.5332 +reload_flag=$lt_reload_flag
 12.5333 +reload_cmds=$lt_reload_cmds
 12.5334 +
 12.5335 +# How to pass a linker flag through the compiler.
 12.5336 +wl=$lt_[]_LT_AC_TAGVAR(lt_prog_compiler_wl, $1)
 12.5337 +
 12.5338 +# Object file suffix (normally "o").
 12.5339 +objext="$ac_objext"
 12.5340 +
 12.5341 +# Old archive suffix (normally "a").
 12.5342 +libext="$libext"
 12.5343 +
 12.5344 +# Shared library suffix (normally ".so").
 12.5345 +shrext_cmds='$shrext_cmds'
 12.5346 +
 12.5347 +# Executable file suffix (normally "").
 12.5348 +exeext="$exeext"
 12.5349 +
 12.5350 +# Additional compiler flags for building library objects.
 12.5351 +pic_flag=$lt_[]_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)
 12.5352 +pic_mode=$pic_mode
 12.5353 +
 12.5354 +# What is the maximum length of a command?
 12.5355 +max_cmd_len=$lt_cv_sys_max_cmd_len
 12.5356 +
 12.5357 +# Does compiler simultaneously support -c and -o options?
 12.5358 +compiler_c_o=$lt_[]_LT_AC_TAGVAR(lt_cv_prog_compiler_c_o, $1)
 12.5359 +
 12.5360 +# Must we lock files when doing compilation?
 12.5361 +need_locks=$lt_need_locks
 12.5362 +
 12.5363 +# Do we need the lib prefix for modules?
 12.5364 +need_lib_prefix=$need_lib_prefix
 12.5365 +
 12.5366 +# Do we need a version for libraries?
 12.5367 +need_version=$need_version
 12.5368 +
 12.5369 +# Whether dlopen is supported.
 12.5370 +dlopen_support=$enable_dlopen
 12.5371 +
 12.5372 +# Whether dlopen of programs is supported.
 12.5373 +dlopen_self=$enable_dlopen_self
 12.5374 +
 12.5375 +# Whether dlopen of statically linked programs is supported.
 12.5376 +dlopen_self_static=$enable_dlopen_self_static
 12.5377 +
 12.5378 +# Compiler flag to prevent dynamic linking.
 12.5379 +link_static_flag=$lt_[]_LT_AC_TAGVAR(lt_prog_compiler_static, $1)
 12.5380 +
 12.5381 +# Compiler flag to turn off builtin functions.
 12.5382 +no_builtin_flag=$lt_[]_LT_AC_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)
 12.5383 +
 12.5384 +# Compiler flag to allow reflexive dlopens.
 12.5385 +export_dynamic_flag_spec=$lt_[]_LT_AC_TAGVAR(export_dynamic_flag_spec, $1)
 12.5386 +
 12.5387 +# Compiler flag to generate shared objects directly from archives.
 12.5388 +whole_archive_flag_spec=$lt_[]_LT_AC_TAGVAR(whole_archive_flag_spec, $1)
 12.5389 +
 12.5390 +# Compiler flag to generate thread-safe objects.
 12.5391 +thread_safe_flag_spec=$lt_[]_LT_AC_TAGVAR(thread_safe_flag_spec, $1)
 12.5392 +
 12.5393 +# Library versioning type.
 12.5394 +version_type=$version_type
 12.5395 +
 12.5396 +# Format of library name prefix.
 12.5397 +libname_spec=$lt_libname_spec
 12.5398 +
 12.5399 +# List of archive names.  First name is the real one, the rest are links.
 12.5400 +# The last name is the one that the linker finds with -lNAME.
 12.5401 +library_names_spec=$lt_library_names_spec
 12.5402 +
 12.5403 +# The coded name of the library, if different from the real name.
 12.5404 +soname_spec=$lt_soname_spec
 12.5405 +
 12.5406 +# Commands used to build and install an old-style archive.
 12.5407 +RANLIB=$lt_RANLIB
 12.5408 +old_archive_cmds=$lt_[]_LT_AC_TAGVAR(old_archive_cmds, $1)
 12.5409 +old_postinstall_cmds=$lt_old_postinstall_cmds
 12.5410 +old_postuninstall_cmds=$lt_old_postuninstall_cmds
 12.5411 +
 12.5412 +# Create an old-style archive from a shared archive.
 12.5413 +old_archive_from_new_cmds=$lt_[]_LT_AC_TAGVAR(old_archive_from_new_cmds, $1)
 12.5414 +
 12.5415 +# Create a temporary old-style archive to link instead of a shared archive.
 12.5416 +old_archive_from_expsyms_cmds=$lt_[]_LT_AC_TAGVAR(old_archive_from_expsyms_cmds, $1)
 12.5417 +
 12.5418 +# Commands used to build and install a shared archive.
 12.5419 +archive_cmds=$lt_[]_LT_AC_TAGVAR(archive_cmds, $1)
 12.5420 +archive_expsym_cmds=$lt_[]_LT_AC_TAGVAR(archive_expsym_cmds, $1)
 12.5421 +postinstall_cmds=$lt_postinstall_cmds
 12.5422 +postuninstall_cmds=$lt_postuninstall_cmds
 12.5423 +
 12.5424 +# Commands used to build a loadable module (assumed same as above if empty)
 12.5425 +module_cmds=$lt_[]_LT_AC_TAGVAR(module_cmds, $1)
 12.5426 +module_expsym_cmds=$lt_[]_LT_AC_TAGVAR(module_expsym_cmds, $1)
 12.5427 +
 12.5428 +# Commands to strip libraries.
 12.5429 +old_striplib=$lt_old_striplib
 12.5430 +striplib=$lt_striplib
 12.5431 +
 12.5432 +# Dependencies to place before the objects being linked to create a
 12.5433 +# shared library.
 12.5434 +predep_objects=$lt_[]_LT_AC_TAGVAR(predep_objects, $1)
 12.5435 +
 12.5436 +# Dependencies to place after the objects being linked to create a
 12.5437 +# shared library.
 12.5438 +postdep_objects=$lt_[]_LT_AC_TAGVAR(postdep_objects, $1)
 12.5439 +
 12.5440 +# Dependencies to place before the objects being linked to create a
 12.5441 +# shared library.
 12.5442 +predeps=$lt_[]_LT_AC_TAGVAR(predeps, $1)
 12.5443 +
 12.5444 +# Dependencies to place after the objects being linked to create a
 12.5445 +# shared library.
 12.5446 +postdeps=$lt_[]_LT_AC_TAGVAR(postdeps, $1)
 12.5447 +
 12.5448 +# The library search path used internally by the compiler when linking
 12.5449 +# a shared library.
 12.5450 +compiler_lib_search_path=$lt_[]_LT_AC_TAGVAR(compiler_lib_search_path, $1)
 12.5451 +
 12.5452 +# Method to check whether dependent libraries are shared objects.
 12.5453 +deplibs_check_method=$lt_deplibs_check_method
 12.5454 +
 12.5455 +# Command to use when deplibs_check_method == file_magic.
 12.5456 +file_magic_cmd=$lt_file_magic_cmd
 12.5457 +
 12.5458 +# Flag that allows shared libraries with undefined symbols to be built.
 12.5459 +allow_undefined_flag=$lt_[]_LT_AC_TAGVAR(allow_undefined_flag, $1)
 12.5460 +
 12.5461 +# Flag that forces no undefined symbols.
 12.5462 +no_undefined_flag=$lt_[]_LT_AC_TAGVAR(no_undefined_flag, $1)
 12.5463 +
 12.5464 +# Commands used to finish a libtool library installation in a directory.
 12.5465 +finish_cmds=$lt_finish_cmds
 12.5466 +
 12.5467 +# Same as above, but a single script fragment to be evaled but not shown.
 12.5468 +finish_eval=$lt_finish_eval
 12.5469 +
 12.5470 +# Take the output of nm and produce a listing of raw symbols and C names.
 12.5471 +global_symbol_pipe=$lt_lt_cv_sys_global_symbol_pipe
 12.5472 +
 12.5473 +# Transform the output of nm in a proper C declaration
 12.5474 +global_symbol_to_cdecl=$lt_lt_cv_sys_global_symbol_to_cdecl
 12.5475 +
 12.5476 +# Transform the output of nm in a C name address pair
 12.5477 +global_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address
 12.5478 +
 12.5479 +# This is the shared library runtime path variable.
 12.5480 +runpath_var=$runpath_var
 12.5481 +
 12.5482 +# This is the shared library path variable.
 12.5483 +shlibpath_var=$shlibpath_var
 12.5484 +
 12.5485 +# Is shlibpath searched before the hard-coded library search path?
 12.5486 +shlibpath_overrides_runpath=$shlibpath_overrides_runpath
 12.5487 +
 12.5488 +# How to hardcode a shared library path into an executable.
 12.5489 +hardcode_action=$_LT_AC_TAGVAR(hardcode_action, $1)
 12.5490 +
 12.5491 +# Whether we should hardcode library paths into libraries.
 12.5492 +hardcode_into_libs=$hardcode_into_libs
 12.5493 +
 12.5494 +# Flag to hardcode \$libdir into a binary during linking.
 12.5495 +# This must work even if \$libdir does not exist.
 12.5496 +hardcode_libdir_flag_spec=$lt_[]_LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)
 12.5497 +
 12.5498 +# If ld is used when linking, flag to hardcode \$libdir into
 12.5499 +# a binary during linking. This must work even if \$libdir does
 12.5500 +# not exist.
 12.5501 +hardcode_libdir_flag_spec_ld=$lt_[]_LT_AC_TAGVAR(hardcode_libdir_flag_spec_ld, $1)
 12.5502 +
 12.5503 +# Whether we need a single -rpath flag with a separated argument.
 12.5504 +hardcode_libdir_separator=$lt_[]_LT_AC_TAGVAR(hardcode_libdir_separator, $1)
 12.5505 +
 12.5506 +# Set to yes if using DIR/libNAME${shared_ext} during linking hardcodes DIR into the
 12.5507 +# resulting binary.
 12.5508 +hardcode_direct=$_LT_AC_TAGVAR(hardcode_direct, $1)
 12.5509 +
 12.5510 +# Set to yes if using the -LDIR flag during linking hardcodes DIR into the
 12.5511 +# resulting binary.
 12.5512 +hardcode_minus_L=$_LT_AC_TAGVAR(hardcode_minus_L, $1)
 12.5513 +
 12.5514 +# Set to yes if using SHLIBPATH_VAR=DIR during linking hardcodes DIR into
 12.5515 +# the resulting binary.
 12.5516 +hardcode_shlibpath_var=$_LT_AC_TAGVAR(hardcode_shlibpath_var, $1)
 12.5517 +
 12.5518 +# Set to yes if building a shared library automatically hardcodes DIR into the library
 12.5519 +# and all subsequent libraries and executables linked against it.
 12.5520 +hardcode_automatic=$_LT_AC_TAGVAR(hardcode_automatic, $1)
 12.5521 +
 12.5522 +# Variables whose values should be saved in libtool wrapper scripts and
 12.5523 +# restored at relink time.
 12.5524 +variables_saved_for_relink="$variables_saved_for_relink"
 12.5525 +
 12.5526 +# Whether libtool must link a program against all its dependency libraries.
 12.5527 +link_all_deplibs=$_LT_AC_TAGVAR(link_all_deplibs, $1)
 12.5528 +
 12.5529 +# Compile-time system search path for libraries
 12.5530 +sys_lib_search_path_spec=$lt_sys_lib_search_path_spec
 12.5531 +
 12.5532 +# Run-time system search path for libraries
 12.5533 +sys_lib_dlsearch_path_spec=$lt_sys_lib_dlsearch_path_spec
 12.5534 +
 12.5535 +# Fix the shell variable \$srcfile for the compiler.
 12.5536 +fix_srcfile_path="$_LT_AC_TAGVAR(fix_srcfile_path, $1)"
 12.5537 +
 12.5538 +# Set to yes if exported symbols are required.
 12.5539 +always_export_symbols=$_LT_AC_TAGVAR(always_export_symbols, $1)
 12.5540 +
 12.5541 +# The commands to list exported symbols.
 12.5542 +export_symbols_cmds=$lt_[]_LT_AC_TAGVAR(export_symbols_cmds, $1)
 12.5543 +
 12.5544 +# The commands to extract the exported symbol list from a shared archive.
 12.5545 +extract_expsyms_cmds=$lt_extract_expsyms_cmds
 12.5546 +
 12.5547 +# Symbols that should not be listed in the preloaded symbols.
 12.5548 +exclude_expsyms=$lt_[]_LT_AC_TAGVAR(exclude_expsyms, $1)
 12.5549 +
 12.5550 +# Symbols that must always be exported.
 12.5551 +include_expsyms=$lt_[]_LT_AC_TAGVAR(include_expsyms, $1)
 12.5552 +
 12.5553 +ifelse([$1],[],
 12.5554 +[# ### END LIBTOOL CONFIG],
 12.5555 +[# ### END LIBTOOL TAG CONFIG: $tagname])
 12.5556 +
 12.5557 +__EOF__
 12.5558 +
 12.5559 +ifelse([$1],[], [
 12.5560 +  case $host_os in
 12.5561 +  aix3*)
 12.5562 +    cat <<\EOF >> "$cfgfile"
 12.5563 +
 12.5564 +# AIX sometimes has problems with the GCC collect2 program.  For some
 12.5565 +# reason, if we set the COLLECT_NAMES environment variable, the problems
 12.5566 +# vanish in a puff of smoke.
 12.5567 +if test "X${COLLECT_NAMES+set}" != Xset; then
 12.5568 +  COLLECT_NAMES=
 12.5569 +  export COLLECT_NAMES
 12.5570 +fi
 12.5571 +EOF
 12.5572 +    ;;
 12.5573 +  esac
 12.5574 +
 12.5575 +  # We use sed instead of cat because bash on DJGPP gets confused if
 12.5576 +  # if finds mixed CR/LF and LF-only lines.  Since sed operates in
 12.5577 +  # text mode, it properly converts lines to CR/LF.  This bash problem
 12.5578 +  # is reportedly fixed, but why not run on old versions too?
 12.5579 +  sed '$q' "$ltmain" >> "$cfgfile" || (rm -f "$cfgfile"; exit 1)
 12.5580 +
 12.5581 +  mv -f "$cfgfile" "$ofile" || \
 12.5582 +    (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile")
 12.5583 +  chmod +x "$ofile"
 12.5584 +])
 12.5585 +else
 12.5586 +  # If there is no Makefile yet, we rely on a make rule to execute
 12.5587 +  # `config.status --recheck' to rerun these tests and create the
 12.5588 +  # libtool script then.
 12.5589 +  ltmain_in=`echo $ltmain | sed -e 's/\.sh$/.in/'`
 12.5590 +  if test -f "$ltmain_in"; then
 12.5591 +    test -f Makefile && make "$ltmain"
 12.5592 +  fi
 12.5593 +fi
 12.5594 +])# AC_LIBTOOL_CONFIG
 12.5595 +
 12.5596 +
 12.5597 +# AC_LIBTOOL_PROG_COMPILER_NO_RTTI([TAGNAME])
 12.5598 +# -------------------------------------------
 12.5599 +AC_DEFUN([AC_LIBTOOL_PROG_COMPILER_NO_RTTI],
 12.5600 +[AC_REQUIRE([_LT_AC_SYS_COMPILER])dnl
 12.5601 +
 12.5602 +_LT_AC_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=
 12.5603 +
 12.5604 +if test "$GCC" = yes; then
 12.5605 +  _LT_AC_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -fno-builtin'
 12.5606 +
 12.5607 +  AC_LIBTOOL_COMPILER_OPTION([if $compiler supports -fno-rtti -fno-exceptions],
 12.5608 +    lt_cv_prog_compiler_rtti_exceptions,
 12.5609 +    [-fno-rtti -fno-exceptions], [],
 12.5610 +    [_LT_AC_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)="$_LT_AC_TAGVAR(lt_prog_compiler_no_builtin_flag, $1) -fno-rtti -fno-exceptions"])
 12.5611 +fi
 12.5612 +])# AC_LIBTOOL_PROG_COMPILER_NO_RTTI
 12.5613 +
 12.5614 +
 12.5615 +# AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE
 12.5616 +# ---------------------------------
 12.5617 +AC_DEFUN([AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE],
 12.5618 +[AC_REQUIRE([AC_CANONICAL_HOST])
 12.5619 +AC_REQUIRE([AC_PROG_NM])
 12.5620 +AC_REQUIRE([AC_OBJEXT])
 12.5621 +# Check for command to grab the raw symbol name followed by C symbol from nm.
 12.5622 +AC_MSG_CHECKING([command to parse $NM output from $compiler object])
 12.5623 +AC_CACHE_VAL([lt_cv_sys_global_symbol_pipe],
 12.5624 +[
 12.5625 +# These are sane defaults that work on at least a few old systems.
 12.5626 +# [They come from Ultrix.  What could be older than Ultrix?!! ;)]
 12.5627 +
 12.5628 +# Character class describing NM global symbol codes.
 12.5629 +symcode='[[BCDEGRST]]'
 12.5630 +
 12.5631 +# Regexp to match symbols that can be accessed directly from C.
 12.5632 +sympat='\([[_A-Za-z]][[_A-Za-z0-9]]*\)'
 12.5633 +
 12.5634 +# Transform an extracted symbol line into a proper C declaration
 12.5635 +lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^. .* \(.*\)$/extern int \1;/p'"
 12.5636 +
 12.5637 +# Transform an extracted symbol line into symbol name and symbol address
 12.5638 +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'"
 12.5639 +
 12.5640 +# Define system-specific variables.
 12.5641 +case $host_os in
 12.5642 +aix*)
 12.5643 +  symcode='[[BCDT]]'
 12.5644 +  ;;
 12.5645 +cygwin* | mingw* | pw32*)
 12.5646 +  symcode='[[ABCDGISTW]]'
 12.5647 +  ;;
 12.5648 +hpux*) # Its linker distinguishes data from code symbols
 12.5649 +  if test "$host_cpu" = ia64; then
 12.5650 +    symcode='[[ABCDEGRST]]'
 12.5651 +  fi
 12.5652 +  lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern int \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'"
 12.5653 +  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'"
 12.5654 +  ;;
 12.5655 +linux*)
 12.5656 +  if test "$host_cpu" = ia64; then
 12.5657 +    symcode='[[ABCDGIRSTW]]'
 12.5658 +    lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern int \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'"
 12.5659 +    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'"
 12.5660 +  fi
 12.5661 +  ;;
 12.5662 +irix* | nonstopux*)
 12.5663 +  symcode='[[BCDEGRST]]'
 12.5664 +  ;;
 12.5665 +osf*)
 12.5666 +  symcode='[[BCDEGQRST]]'
 12.5667 +  ;;
 12.5668 +solaris*)
 12.5669 +  symcode='[[BDRT]]'
 12.5670 +  ;;
 12.5671 +sco3.2v5*)
 12.5672 +  symcode='[[DT]]'
 12.5673 +  ;;
 12.5674 +sysv4.2uw2*)
 12.5675 +  symcode='[[DT]]'
 12.5676 +  ;;
 12.5677 +sysv5* | sco5v6* | unixware* | OpenUNIX*)
 12.5678 +  symcode='[[ABDT]]'
 12.5679 +  ;;
 12.5680 +sysv4)
 12.5681 +  symcode='[[DFNSTU]]'
 12.5682 +  ;;
 12.5683 +esac
 12.5684 +
 12.5685 +# Handle CRLF in mingw tool chain
 12.5686 +opt_cr=
 12.5687 +case $build_os in
 12.5688 +mingw*)
 12.5689 +  opt_cr=`echo 'x\{0,1\}' | tr x '\015'` # option cr in regexp
 12.5690 +  ;;
 12.5691 +esac
 12.5692 +
 12.5693 +# If we're using GNU nm, then use its standard symbol codes.
 12.5694 +case `$NM -V 2>&1` in
 12.5695 +*GNU* | *'with BFD'*)
 12.5696 +  symcode='[[ABCDGIRSTW]]' ;;
 12.5697 +esac
 12.5698 +
 12.5699 +# Try without a prefix undercore, then with it.
 12.5700 +for ac_symprfx in "" "_"; do
 12.5701 +
 12.5702 +  # Transform symcode, sympat, and symprfx into a raw symbol and a C symbol.
 12.5703 +  symxfrm="\\1 $ac_symprfx\\2 \\2"
 12.5704 +
 12.5705 +  # Write the raw and C identifiers.
 12.5706 +  lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[[ 	]]\($symcode$symcode*\)[[ 	]][[ 	]]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'"
 12.5707 +
 12.5708 +  # Check to see that the pipe works correctly.
 12.5709 +  pipe_works=no
 12.5710 +
 12.5711 +  rm -f conftest*
 12.5712 +  cat > conftest.$ac_ext <<EOF
 12.5713 +#ifdef __cplusplus
 12.5714 +extern "C" {
 12.5715 +#endif
 12.5716 +char nm_test_var;
 12.5717 +void nm_test_func(){}
 12.5718 +#ifdef __cplusplus
 12.5719 +}
 12.5720 +#endif
 12.5721 +int main(){nm_test_var='a';nm_test_func();return(0);}
 12.5722 +EOF
 12.5723 +
 12.5724 +  if AC_TRY_EVAL(ac_compile); then
 12.5725 +    # Now try to grab the symbols.
 12.5726 +    nlist=conftest.nm
 12.5727 +    if AC_TRY_EVAL(NM conftest.$ac_objext \| $lt_cv_sys_global_symbol_pipe \> $nlist) && test -s "$nlist"; then
 12.5728 +      # Try sorting and uniquifying the output.
 12.5729 +      if sort "$nlist" | uniq > "$nlist"T; then
 12.5730 +	mv -f "$nlist"T "$nlist"
 12.5731 +      else
 12.5732 +	rm -f "$nlist"T
 12.5733 +      fi
 12.5734 +
 12.5735 +      # Make sure that we snagged all the symbols we need.
 12.5736 +      if grep ' nm_test_var$' "$nlist" >/dev/null; then
 12.5737 +	if grep ' nm_test_func$' "$nlist" >/dev/null; then
 12.5738 +	  cat <<EOF > conftest.$ac_ext
 12.5739 +#ifdef __cplusplus
 12.5740 +extern "C" {
 12.5741 +#endif
 12.5742 +
 12.5743 +EOF
 12.5744 +	  # Now generate the symbol file.
 12.5745 +	  eval "$lt_cv_sys_global_symbol_to_cdecl"' < "$nlist" | grep -v main >> conftest.$ac_ext'
 12.5746 +
 12.5747 +	  cat <<EOF >> conftest.$ac_ext
 12.5748 +#if defined (__STDC__) && __STDC__
 12.5749 +# define lt_ptr_t void *
 12.5750 +#else
 12.5751 +# define lt_ptr_t char *
 12.5752 +# define const
 12.5753 +#endif
 12.5754 +
 12.5755 +/* The mapping between symbol names and symbols. */
 12.5756 +const struct {
 12.5757 +  const char *name;
 12.5758 +  lt_ptr_t address;
 12.5759 +}
 12.5760 +lt_preloaded_symbols[[]] =
 12.5761 +{
 12.5762 +EOF
 12.5763 +	  $SED "s/^$symcode$symcode* \(.*\) \(.*\)$/  {\"\2\", (lt_ptr_t) \&\2},/" < "$nlist" | grep -v main >> conftest.$ac_ext
 12.5764 +	  cat <<\EOF >> conftest.$ac_ext
 12.5765 +  {0, (lt_ptr_t) 0}
 12.5766 +};
 12.5767 +
 12.5768 +#ifdef __cplusplus
 12.5769 +}
 12.5770 +#endif
 12.5771 +EOF
 12.5772 +	  # Now try linking the two files.
 12.5773 +	  mv conftest.$ac_objext conftstm.$ac_objext
 12.5774 +	  lt_save_LIBS="$LIBS"
 12.5775 +	  lt_save_CFLAGS="$CFLAGS"
 12.5776 +	  LIBS="conftstm.$ac_objext"
 12.5777 +	  CFLAGS="$CFLAGS$_LT_AC_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)"
 12.5778 +	  if AC_TRY_EVAL(ac_link) && test -s conftest${ac_exeext}; then
 12.5779 +	    pipe_works=yes
 12.5780 +	  fi
 12.5781 +	  LIBS="$lt_save_LIBS"
 12.5782 +	  CFLAGS="$lt_save_CFLAGS"
 12.5783 +	else
 12.5784 +	  echo "cannot find nm_test_func in $nlist" >&AS_MESSAGE_LOG_FD
 12.5785 +	fi
 12.5786 +      else
 12.5787 +	echo "cannot find nm_test_var in $nlist" >&AS_MESSAGE_LOG_FD
 12.5788 +      fi
 12.5789 +    else
 12.5790 +      echo "cannot run $lt_cv_sys_global_symbol_pipe" >&AS_MESSAGE_LOG_FD
 12.5791 +    fi
 12.5792 +  else
 12.5793 +    echo "$progname: failed program was:" >&AS_MESSAGE_LOG_FD
 12.5794 +    cat conftest.$ac_ext >&5
 12.5795 +  fi
 12.5796 +  rm -f conftest* conftst*
 12.5797 +
 12.5798 +  # Do not use the global_symbol_pipe unless it works.
 12.5799 +  if test "$pipe_works" = yes; then
 12.5800 +    break
 12.5801 +  else
 12.5802 +    lt_cv_sys_global_symbol_pipe=
 12.5803 +  fi
 12.5804 +done
 12.5805 +])
 12.5806 +if test -z "$lt_cv_sys_global_symbol_pipe"; then
 12.5807 +  lt_cv_sys_global_symbol_to_cdecl=
 12.5808 +fi
 12.5809 +if test -z "$lt_cv_sys_global_symbol_pipe$lt_cv_sys_global_symbol_to_cdecl"; then
 12.5810 +  AC_MSG_RESULT(failed)
 12.5811 +else
 12.5812 +  AC_MSG_RESULT(ok)
 12.5813 +fi
 12.5814 +]) # AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE
 12.5815 +
 12.5816 +
 12.5817 +# AC_LIBTOOL_PROG_COMPILER_PIC([TAGNAME])
 12.5818 +# ---------------------------------------
 12.5819 +AC_DEFUN([AC_LIBTOOL_PROG_COMPILER_PIC],
 12.5820 +[_LT_AC_TAGVAR(lt_prog_compiler_wl, $1)=
 12.5821 +_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)=
 12.5822 +_LT_AC_TAGVAR(lt_prog_compiler_static, $1)=
 12.5823 +
 12.5824 +AC_MSG_CHECKING([for $compiler option to produce PIC])
 12.5825 + ifelse([$1],[CXX],[
 12.5826 +  # C++ specific cases for pic, static, wl, etc.
 12.5827 +  if test "$GXX" = yes; then
 12.5828 +    _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
 12.5829 +    _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-static'
 12.5830 +
 12.5831 +    case $host_os in
 12.5832 +    aix*)
 12.5833 +      # All AIX code is PIC.
 12.5834 +      if test "$host_cpu" = ia64; then
 12.5835 +	# AIX 5 now supports IA64 processor
 12.5836 +	_LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
 12.5837 +      fi
 12.5838 +      ;;
 12.5839 +    amigaos*)
 12.5840 +      # FIXME: we need at least 68020 code to build shared libraries, but
 12.5841 +      # adding the `-m68020' flag to GCC prevents building anything better,
 12.5842 +      # like `-m68040'.
 12.5843 +      _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-m68020 -resident32 -malways-restore-a4'
 12.5844 +      ;;
 12.5845 +    beos* | cygwin* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*)
 12.5846 +      # PIC is the default for these OSes.
 12.5847 +      ;;
 12.5848 +    mingw* | os2* | pw32*)
 12.5849 +      # This hack is so that the source file can tell whether it is being
 12.5850 +      # built for inclusion in a dll (and should export symbols for example).
 12.5851 +      _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT'
 12.5852 +      ;;
 12.5853 +    darwin* | rhapsody*)
 12.5854 +      # PIC is the default on this platform
 12.5855 +      # Common symbols not allowed in MH_DYLIB files
 12.5856 +      _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common'
 12.5857 +      ;;
 12.5858 +    *djgpp*)
 12.5859 +      # DJGPP does not support shared libraries at all
 12.5860 +      _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)=
 12.5861 +      ;;
 12.5862 +    interix3*)
 12.5863 +      # Interix 3.x gcc -fpic/-fPIC options generate broken code.
 12.5864 +      # Instead, we relocate shared libraries at runtime.
 12.5865 +      ;;
 12.5866 +    sysv4*MP*)
 12.5867 +      if test -d /usr/nec; then
 12.5868 +	_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)=-Kconform_pic
 12.5869 +      fi
 12.5870 +      ;;
 12.5871 +    hpux*)
 12.5872 +      # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but
 12.5873 +      # not for PA HP-UX.
 12.5874 +      case $host_cpu in
 12.5875 +      hppa*64*|ia64*)
 12.5876 +	;;
 12.5877 +      *)
 12.5878 +	_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
 12.5879 +	;;
 12.5880 +      esac
 12.5881 +      ;;
 12.5882 +    *)
 12.5883 +      _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
 12.5884 +      ;;
 12.5885 +    esac
 12.5886 +  else
 12.5887 +    case $host_os in
 12.5888 +      aix4* | aix5*)
 12.5889 +	# All AIX code is PIC.
 12.5890 +	if test "$host_cpu" = ia64; then
 12.5891 +	  # AIX 5 now supports IA64 processor
 12.5892 +	  _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
 12.5893 +	else
 12.5894 +	  _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-bnso -bI:/lib/syscalls.exp'
 12.5895 +	fi
 12.5896 +	;;
 12.5897 +      chorus*)
 12.5898 +	case $cc_basename in
 12.5899 +	cxch68*)
 12.5900 +	  # Green Hills C++ Compiler
 12.5901 +	  # _LT_AC_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"
 12.5902 +	  ;;
 12.5903 +	esac
 12.5904 +	;;
 12.5905 +       darwin*)
 12.5906 +         # PIC is the default on this platform
 12.5907 +         # Common symbols not allowed in MH_DYLIB files
 12.5908 +         case $cc_basename in
 12.5909 +           xlc*)
 12.5910 +           _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-qnocommon'
 12.5911 +           _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
 12.5912 +           ;;
 12.5913 +         esac
 12.5914 +       ;;
 12.5915 +      dgux*)
 12.5916 +	case $cc_basename in
 12.5917 +	  ec++*)
 12.5918 +	    _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
 12.5919 +	    ;;
 12.5920 +	  ghcx*)
 12.5921 +	    # Green Hills C++ Compiler
 12.5922 +	    _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-pic'
 12.5923 +	    ;;
 12.5924 +	  *)
 12.5925 +	    ;;
 12.5926 +	esac
 12.5927 +	;;
 12.5928 +      freebsd* | kfreebsd*-gnu | dragonfly*)
 12.5929 +	# FreeBSD uses GNU C++
 12.5930 +	;;
 12.5931 +      hpux9* | hpux10* | hpux11*)
 12.5932 +	case $cc_basename in
 12.5933 +	  CC*)
 12.5934 +	    _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
 12.5935 +	    _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive'
 12.5936 +	    if test "$host_cpu" != ia64; then
 12.5937 +	      _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='+Z'
 12.5938 +	    fi
 12.5939 +	    ;;
 12.5940 +	  aCC*)
 12.5941 +	    _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
 12.5942 +	    _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive'
 12.5943 +	    case $host_cpu in
 12.5944 +	    hppa*64*|ia64*)
 12.5945 +	      # +Z the default
 12.5946 +	      ;;
 12.5947 +	    *)
 12.5948 +	      _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='+Z'
 12.5949 +	      ;;
 12.5950 +	    esac
 12.5951 +	    ;;
 12.5952 +	  *)
 12.5953 +	    ;;
 12.5954 +	esac
 12.5955 +	;;
 12.5956 +      interix*)
 12.5957 +	# This is c89, which is MS Visual C++ (no shared libs)
 12.5958 +	# Anyone wants to do a port?
 12.5959 +	;;
 12.5960 +      irix5* | irix6* | nonstopux*)
 12.5961 +	case $cc_basename in
 12.5962 +	  CC*)
 12.5963 +	    _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
 12.5964 +	    _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
 12.5965 +	    # CC pic flag -KPIC is the default.
 12.5966 +	    ;;
 12.5967 +	  *)
 12.5968 +	    ;;
 12.5969 +	esac
 12.5970 +	;;
 12.5971 +      linux*)
 12.5972 +	case $cc_basename in
 12.5973 +	  KCC*)
 12.5974 +	    # KAI C++ Compiler
 12.5975 +	    _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='--backend -Wl,'
 12.5976 +	    _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
 12.5977 +	    ;;
 12.5978 +	  icpc* | ecpc*)
 12.5979 +	    # Intel C++
 12.5980 +	    _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
 12.5981 +	    _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
 12.5982 +	    _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-static'
 12.5983 +	    ;;
 12.5984 +	  pgCC*)
 12.5985 +	    # Portland Group C++ compiler.
 12.5986 +	    _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
 12.5987 +	    _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-fpic'
 12.5988 +	    _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
 12.5989 +	    ;;
 12.5990 +	  cxx*)
 12.5991 +	    # Compaq C++
 12.5992 +	    # Make sure the PIC flag is empty.  It appears that all Alpha
 12.5993 +	    # Linux and Compaq Tru64 Unix objects are PIC.
 12.5994 +	    _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)=
 12.5995 +	    _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
 12.5996 +	    ;;
 12.5997 +	  *)
 12.5998 +	    ;;
 12.5999 +	esac
 12.6000 +	;;
 12.6001 +      lynxos*)
 12.6002 +	;;
 12.6003 +      m88k*)
 12.6004 +	;;
 12.6005 +      mvs*)
 12.6006 +	case $cc_basename in
 12.6007 +	  cxx*)
 12.6008 +	    _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-W c,exportall'
 12.6009 +	    ;;
 12.6010 +	  *)
 12.6011 +	    ;;
 12.6012 +	esac
 12.6013 +	;;
 12.6014 +      netbsd* | netbsdelf*-gnu | knetbsd*-gnu)
 12.6015 +	;;
 12.6016 +      osf3* | osf4* | osf5*)
 12.6017 +	case $cc_basename in
 12.6018 +	  KCC*)
 12.6019 +	    _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='--backend -Wl,'
 12.6020 +	    ;;
 12.6021 +	  RCC*)
 12.6022 +	    # Rational C++ 2.4.1
 12.6023 +	    _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-pic'
 12.6024 +	    ;;
 12.6025 +	  cxx*)
 12.6026 +	    # Digital/Compaq C++
 12.6027 +	    _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
 12.6028 +	    # Make sure the PIC flag is empty.  It appears that all Alpha
 12.6029 +	    # Linux and Compaq Tru64 Unix objects are PIC.
 12.6030 +	    _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)=
 12.6031 +	    _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
 12.6032 +	    ;;
 12.6033 +	  *)
 12.6034 +	    ;;
 12.6035 +	esac
 12.6036 +	;;
 12.6037 +      psos*)
 12.6038 +	;;
 12.6039 +      solaris*)
 12.6040 +	case $cc_basename in
 12.6041 +	  CC*)
 12.6042 +	    # Sun C++ 4.2, 5.x and Centerline C++
 12.6043 +	    _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
 12.6044 +	    _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
 12.6045 +	    _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld '
 12.6046 +	    ;;
 12.6047 +	  gcx*)
 12.6048 +	    # Green Hills C++ Compiler
 12.6049 +	    _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-PIC'
 12.6050 +	    ;;
 12.6051 +	  *)
 12.6052 +	    ;;
 12.6053 +	esac
 12.6054 +	;;
 12.6055 +      sunos4*)
 12.6056 +	case $cc_basename in
 12.6057 +	  CC*)
 12.6058 +	    # Sun C++ 4.x
 12.6059 +	    _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-pic'
 12.6060 +	    _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
 12.6061 +	    ;;
 12.6062 +	  lcc*)
 12.6063 +	    # Lucid
 12.6064 +	    _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-pic'
 12.6065 +	    ;;
 12.6066 +	  *)
 12.6067 +	    ;;
 12.6068 +	esac
 12.6069 +	;;
 12.6070 +      tandem*)
 12.6071 +	case $cc_basename in
 12.6072 +	  NCC*)
 12.6073 +	    # NonStop-UX NCC 3.20
 12.6074 +	    _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
 12.6075 +	    ;;
 12.6076 +	  *)
 12.6077 +	    ;;
 12.6078 +	esac
 12.6079 +	;;
 12.6080 +      sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*)
 12.6081 +	case $cc_basename in
 12.6082 +	  CC*)
 12.6083 +	    _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
 12.6084 +	    _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
 12.6085 +	    _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
 12.6086 +	    ;;
 12.6087 +	esac
 12.6088 +	;;
 12.6089 +      vxworks*)
 12.6090 +	;;
 12.6091 +      *)
 12.6092 +	_LT_AC_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no
 12.6093 +	;;
 12.6094 +    esac
 12.6095 +  fi
 12.6096 +],
 12.6097 +[
 12.6098 +  if test "$GCC" = yes; then
 12.6099 +    _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
 12.6100 +    _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-static'
 12.6101 +
 12.6102 +    case $host_os in
 12.6103 +      aix*)
 12.6104 +      # All AIX code is PIC.
 12.6105 +      if test "$host_cpu" = ia64; then
 12.6106 +	# AIX 5 now supports IA64 processor
 12.6107 +	_LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
 12.6108 +      fi
 12.6109 +      ;;
 12.6110 +
 12.6111 +    amigaos*)
 12.6112 +      # FIXME: we need at least 68020 code to build shared libraries, but
 12.6113 +      # adding the `-m68020' flag to GCC prevents building anything better,
 12.6114 +      # like `-m68040'.
 12.6115 +      _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-m68020 -resident32 -malways-restore-a4'
 12.6116 +      ;;
 12.6117 +
 12.6118 +    beos* | cygwin* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*)
 12.6119 +      # PIC is the default for these OSes.
 12.6120 +      ;;
 12.6121 +
 12.6122 +    mingw* | pw32* | os2*)
 12.6123 +      # This hack is so that the source file can tell whether it is being
 12.6124 +      # built for inclusion in a dll (and should export symbols for example).
 12.6125 +      _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT'
 12.6126 +      ;;
 12.6127 +
 12.6128 +    darwin* | rhapsody*)
 12.6129 +      # PIC is the default on this platform
 12.6130 +      # Common symbols not allowed in MH_DYLIB files
 12.6131 +      _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common'
 12.6132 +      ;;
 12.6133 +
 12.6134 +    interix3*)
 12.6135 +      # Interix 3.x gcc -fpic/-fPIC options generate broken code.
 12.6136 +      # Instead, we relocate shared libraries at runtime.
 12.6137 +      ;;
 12.6138 +
 12.6139 +    msdosdjgpp*)
 12.6140 +      # Just because we use GCC doesn't mean we suddenly get shared libraries
 12.6141 +      # on systems that don't support them.
 12.6142 +      _LT_AC_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no
 12.6143 +      enable_shared=no
 12.6144 +      ;;
 12.6145 +
 12.6146 +    sysv4*MP*)
 12.6147 +      if test -d /usr/nec; then
 12.6148 +	_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)=-Kconform_pic
 12.6149 +      fi
 12.6150 +      ;;
 12.6151 +
 12.6152 +    hpux*)
 12.6153 +      # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but
 12.6154 +      # not for PA HP-UX.
 12.6155 +      case $host_cpu in
 12.6156 +      hppa*64*|ia64*)
 12.6157 +	# +Z the default
 12.6158 +	;;
 12.6159 +      *)
 12.6160 +	_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
 12.6161 +	;;
 12.6162 +      esac
 12.6163 +      ;;
 12.6164 +
 12.6165 +    *)
 12.6166 +      _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
 12.6167 +      ;;
 12.6168 +    esac
 12.6169 +  else
 12.6170 +    # PORTME Check for flag to pass linker flags through the system compiler.
 12.6171 +    case $host_os in
 12.6172 +    aix*)
 12.6173 +      _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
 12.6174 +      if test "$host_cpu" = ia64; then
 12.6175 +	# AIX 5 now supports IA64 processor
 12.6176 +	_LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
 12.6177 +      else
 12.6178 +	_LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-bnso -bI:/lib/syscalls.exp'
 12.6179 +      fi
 12.6180 +      ;;
 12.6181 +      darwin*)
 12.6182 +        # PIC is the default on this platform
 12.6183 +        # Common symbols not allowed in MH_DYLIB files
 12.6184 +       case $cc_basename in
 12.6185 +         xlc*)
 12.6186 +         _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-qnocommon'
 12.6187 +         _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
 12.6188 +         ;;
 12.6189 +       esac
 12.6190 +       ;;
 12.6191 +
 12.6192 +    mingw* | pw32* | os2*)
 12.6193 +      # This hack is so that the source file can tell whether it is being
 12.6194 +      # built for inclusion in a dll (and should export symbols for example).
 12.6195 +      _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT'
 12.6196 +      ;;
 12.6197 +
 12.6198 +    hpux9* | hpux10* | hpux11*)
 12.6199 +      _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
 12.6200 +      # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but
 12.6201 +      # not for PA HP-UX.
 12.6202 +      case $host_cpu in
 12.6203 +      hppa*64*|ia64*)
 12.6204 +	# +Z the default
 12.6205 +	;;
 12.6206 +      *)
 12.6207 +	_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='+Z'
 12.6208 +	;;
 12.6209 +      esac
 12.6210 +      # Is there a better lt_prog_compiler_static that works with the bundled CC?
 12.6211 +      _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive'
 12.6212 +      ;;
 12.6213 +
 12.6214 +    irix5* | irix6* | nonstopux*)
 12.6215 +      _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
 12.6216 +      # PIC (with -KPIC) is the default.
 12.6217 +      _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
 12.6218 +      ;;
 12.6219 +
 12.6220 +    newsos6)
 12.6221 +      _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
 12.6222 +      _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
 12.6223 +      ;;
 12.6224 +
 12.6225 +    linux*)
 12.6226 +      case $cc_basename in
 12.6227 +      icc* | ecc*)
 12.6228 +	_LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
 12.6229 +	_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
 12.6230 +	_LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-static'
 12.6231 +        ;;
 12.6232 +      pgcc* | pgf77* | pgf90* | pgf95*)
 12.6233 +        # Portland Group compilers (*not* the Pentium gcc compiler,
 12.6234 +	# which looks to be a dead project)
 12.6235 +	_LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
 12.6236 +	_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-fpic'
 12.6237 +	_LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
 12.6238 +        ;;
 12.6239 +      ccc*)
 12.6240 +        _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
 12.6241 +        # All Alpha code is PIC.
 12.6242 +        _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
 12.6243 +        ;;
 12.6244 +      esac
 12.6245 +      ;;
 12.6246 +
 12.6247 +    osf3* | osf4* | osf5*)
 12.6248 +      _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
 12.6249 +      # All OSF/1 code is PIC.
 12.6250 +      _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
 12.6251 +      ;;
 12.6252 +
 12.6253 +    solaris*)
 12.6254 +      _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
 12.6255 +      _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
 12.6256 +      case $cc_basename in
 12.6257 +      f77* | f90* | f95*)
 12.6258 +	_LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ';;
 12.6259 +      *)
 12.6260 +	_LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,';;
 12.6261 +      esac
 12.6262 +      ;;
 12.6263 +
 12.6264 +    sunos4*)
 12.6265 +      _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld '
 12.6266 +      _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-PIC'
 12.6267 +      _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
 12.6268 +      ;;
 12.6269 +
 12.6270 +    sysv4 | sysv4.2uw2* | sysv4.3*)
 12.6271 +      _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
 12.6272 +      _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
 12.6273 +      _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
 12.6274 +      ;;
 12.6275 +
 12.6276 +    sysv4*MP*)
 12.6277 +      if test -d /usr/nec ;then
 12.6278 +	_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-Kconform_pic'
 12.6279 +	_LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
 12.6280 +      fi
 12.6281 +      ;;
 12.6282 +
 12.6283 +    sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*)
 12.6284 +      _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
 12.6285 +      _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
 12.6286 +      _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
 12.6287 +      ;;
 12.6288 +
 12.6289 +    unicos*)
 12.6290 +      _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
 12.6291 +      _LT_AC_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no
 12.6292 +      ;;
 12.6293 +
 12.6294 +    uts4*)
 12.6295 +      _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-pic'
 12.6296 +      _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
 12.6297 +      ;;
 12.6298 +
 12.6299 +    *)
 12.6300 +      _LT_AC_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no
 12.6301 +      ;;
 12.6302 +    esac
 12.6303 +  fi
 12.6304 +])
 12.6305 +AC_MSG_RESULT([$_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)])
 12.6306 +
 12.6307 +#
 12.6308 +# Check to make sure the PIC flag actually works.
 12.6309 +#
 12.6310 +if test -n "$_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)"; then
 12.6311 +  AC_LIBTOOL_COMPILER_OPTION([if $compiler PIC flag $_LT_AC_TAGVAR(lt_prog_compiler_pic, $1) works],
 12.6312 +    _LT_AC_TAGVAR(lt_prog_compiler_pic_works, $1),
 12.6313 +    [$_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)ifelse([$1],[],[ -DPIC],[ifelse([$1],[CXX],[ -DPIC],[])])], [],
 12.6314 +    [case $_LT_AC_TAGVAR(lt_prog_compiler_pic, $1) in
 12.6315 +     "" | " "*) ;;
 12.6316 +     *) _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)=" $_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)" ;;
 12.6317 +     esac],
 12.6318 +    [_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)=
 12.6319 +     _LT_AC_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no])
 12.6320 +fi
 12.6321 +case $host_os in
 12.6322 +  # For platforms which do not support PIC, -DPIC is meaningless:
 12.6323 +  *djgpp*)
 12.6324 +    _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)=
 12.6325 +    ;;
 12.6326 +  *)
 12.6327 +    _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)="$_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)ifelse([$1],[],[ -DPIC],[ifelse([$1],[CXX],[ -DPIC],[])])"
 12.6328 +    ;;
 12.6329 +esac
 12.6330 +
 12.6331 +#
 12.6332 +# Check to make sure the static flag actually works.
 12.6333 +#
 12.6334 +wl=$_LT_AC_TAGVAR(lt_prog_compiler_wl, $1) eval lt_tmp_static_flag=\"$_LT_AC_TAGVAR(lt_prog_compiler_static, $1)\"
 12.6335 +AC_LIBTOOL_LINKER_OPTION([if $compiler static flag $lt_tmp_static_flag works],
 12.6336 +  _LT_AC_TAGVAR(lt_prog_compiler_static_works, $1),
 12.6337 +  $lt_tmp_static_flag,
 12.6338 +  [],
 12.6339 +  [_LT_AC_TAGVAR(lt_prog_compiler_static, $1)=])
 12.6340 +])
 12.6341 +
 12.6342 +
 12.6343 +# AC_LIBTOOL_PROG_LD_SHLIBS([TAGNAME])
 12.6344 +# ------------------------------------
 12.6345 +# See if the linker supports building shared libraries.
 12.6346 +AC_DEFUN([AC_LIBTOOL_PROG_LD_SHLIBS],
 12.6347 +[AC_MSG_CHECKING([whether the $compiler linker ($LD) supports shared libraries])
 12.6348 +ifelse([$1],[CXX],[
 12.6349 +  _LT_AC_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols'
 12.6350 +  case $host_os in
 12.6351 +  aix4* | aix5*)
 12.6352 +    # If we're using GNU nm, then we don't want the "-C" option.
 12.6353 +    # -C means demangle to AIX nm, but means don't demangle with GNU nm
 12.6354 +    if $NM -V 2>&1 | grep 'GNU' > /dev/null; then
 12.6355 +      _LT_AC_TAGVAR(export_symbols_cmds, $1)='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\[$]2 == "T") || (\[$]2 == "D") || (\[$]2 == "B")) && ([substr](\[$]3,1,1) != ".")) { print \[$]3 } }'\'' | sort -u > $export_symbols'
 12.6356 +    else
 12.6357 +      _LT_AC_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'
 12.6358 +    fi
 12.6359 +    ;;
 12.6360 +  pw32*)
 12.6361 +    _LT_AC_TAGVAR(export_symbols_cmds, $1)="$ltdll_cmds"
 12.6362 +  ;;
 12.6363 +  cygwin* | mingw*)
 12.6364 +    _LT_AC_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]] /s/.* \([[^ ]]*\)/\1 DATA/;/^.* __nm__/s/^.* __nm__\([[^ ]]*\) [[^ ]]*/\1 DATA/;/^I /d;/^[[AITW]] /s/.* //'\'' | sort | uniq > $export_symbols'
 12.6365 +  ;;
 12.6366 +  kfreebsd*-gnu)
 12.6367 +    _LT_AC_TAGVAR(link_all_deplibs, $1)=no
 12.6368 +  ;;
 12.6369 +  linux*)
 12.6370 +    _LT_AC_TAGVAR(link_all_deplibs, $1)=no
 12.6371 +  ;;
 12.6372 +  *)
 12.6373 +    _LT_AC_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols'
 12.6374 +  ;;
 12.6375 +  esac
 12.6376 +],[
 12.6377 +  runpath_var=
 12.6378 +  _LT_AC_TAGVAR(allow_undefined_flag, $1)=
 12.6379 +  _LT_AC_TAGVAR(enable_shared_with_static_runtimes, $1)=no
 12.6380 +  _LT_AC_TAGVAR(archive_cmds, $1)=
 12.6381 +  _LT_AC_TAGVAR(archive_expsym_cmds, $1)=
 12.6382 +  _LT_AC_TAGVAR(old_archive_From_new_cmds, $1)=
 12.6383 +  _LT_AC_TAGVAR(old_archive_from_expsyms_cmds, $1)=
 12.6384 +  _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)=
 12.6385 +  _LT_AC_TAGVAR(whole_archive_flag_spec, $1)=
 12.6386 +  _LT_AC_TAGVAR(thread_safe_flag_spec, $1)=
 12.6387 +  _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)=
 12.6388 +  _LT_AC_TAGVAR(hardcode_libdir_flag_spec_ld, $1)=
 12.6389 +  _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=
 12.6390 +  _LT_AC_TAGVAR(hardcode_direct, $1)=no
 12.6391 +  _LT_AC_TAGVAR(hardcode_minus_L, $1)=no
 12.6392 +  _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=unsupported
 12.6393 +  _LT_AC_TAGVAR(link_all_deplibs, $1)=unknown
 12.6394 +  _LT_AC_TAGVAR(hardcode_automatic, $1)=no
 12.6395 +  _LT_AC_TAGVAR(module_cmds, $1)=
 12.6396 +  _LT_AC_TAGVAR(module_expsym_cmds, $1)=
 12.6397 +  _LT_AC_TAGVAR(always_export_symbols, $1)=no
 12.6398 +  _LT_AC_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols'
 12.6399 +  # include_expsyms should be a list of space-separated symbols to be *always*
 12.6400 +  # included in the symbol list
 12.6401 +  _LT_AC_TAGVAR(include_expsyms, $1)=
 12.6402 +  # exclude_expsyms can be an extended regexp of symbols to exclude
 12.6403 +  # it will be wrapped by ` (' and `)$', so one must not match beginning or
 12.6404 +  # end of line.  Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc',
 12.6405 +  # as well as any symbol that contains `d'.
 12.6406 +  _LT_AC_TAGVAR(exclude_expsyms, $1)="_GLOBAL_OFFSET_TABLE_"
 12.6407 +  # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out
 12.6408 +  # platforms (ab)use it in PIC code, but their linkers get confused if
 12.6409 +  # the symbol is explicitly referenced.  Since portable code cannot
 12.6410 +  # rely on this symbol name, it's probably fine to never include it in
 12.6411 +  # preloaded symbol tables.
 12.6412 +  extract_expsyms_cmds=
 12.6413 +  # Just being paranoid about ensuring that cc_basename is set.
 12.6414 +  _LT_CC_BASENAME([$compiler])
 12.6415 +  case $host_os in
 12.6416 +  cygwin* | mingw* | pw32*)
 12.6417 +    # FIXME: the MSVC++ port hasn't been tested in a loooong time
 12.6418 +    # When not using gcc, we currently assume that we are using
 12.6419 +    # Microsoft Visual C++.
 12.6420 +    if test "$GCC" != yes; then
 12.6421 +      with_gnu_ld=no
 12.6422 +    fi
 12.6423 +    ;;
 12.6424 +  interix*)
 12.6425 +    # we just hope/assume this is gcc and not c89 (= MSVC++)
 12.6426 +    with_gnu_ld=yes
 12.6427 +    ;;
 12.6428 +  openbsd*)
 12.6429 +    with_gnu_ld=no
 12.6430 +    ;;
 12.6431 +  esac
 12.6432 +
 12.6433 +  _LT_AC_TAGVAR(ld_shlibs, $1)=yes
 12.6434 +  if test "$with_gnu_ld" = yes; then
 12.6435 +    # If archive_cmds runs LD, not CC, wlarc should be empty
 12.6436 +    wlarc='${wl}'
 12.6437 +
 12.6438 +    # Set some defaults for GNU ld with shared library support. These
 12.6439 +    # are reset later if shared libraries are not supported. Putting them
 12.6440 +    # here allows them to be overridden if necessary.
 12.6441 +    runpath_var=LD_RUN_PATH
 12.6442 +    _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}--rpath ${wl}$libdir'
 12.6443 +    _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic'
 12.6444 +    # ancient GNU ld didn't support --whole-archive et. al.
 12.6445 +    if $LD --help 2>&1 | grep 'no-whole-archive' > /dev/null; then
 12.6446 +	_LT_AC_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive'
 12.6447 +      else
 12.6448 +  	_LT_AC_TAGVAR(whole_archive_flag_spec, $1)=
 12.6449 +    fi
 12.6450 +    supports_anon_versioning=no
 12.6451 +    case `$LD -v 2>/dev/null` in
 12.6452 +      *\ [[01]].* | *\ 2.[[0-9]].* | *\ 2.10.*) ;; # catch versions < 2.11
 12.6453 +      *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ...
 12.6454 +      *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ...
 12.6455 +      *\ 2.11.*) ;; # other 2.11 versions
 12.6456 +      *) supports_anon_versioning=yes ;;
 12.6457 +    esac
 12.6458 +
 12.6459 +    # See if GNU ld supports shared libraries.
 12.6460 +    case $host_os in
 12.6461 +    aix3* | aix4* | aix5*)
 12.6462 +      # On AIX/PPC, the GNU linker is very broken
 12.6463 +      if test "$host_cpu" != ia64; then
 12.6464 +	_LT_AC_TAGVAR(ld_shlibs, $1)=no
 12.6465 +	cat <<EOF 1>&2
 12.6466 +
 12.6467 +*** Warning: the GNU linker, at least up to release 2.9.1, is reported
 12.6468 +*** to be unable to reliably create shared libraries on AIX.
 12.6469 +*** Therefore, libtool is disabling shared libraries support.  If you
 12.6470 +*** really care for shared libraries, you may want to modify your PATH
 12.6471 +*** so that a non-GNU linker is found, and then restart.
 12.6472 +
 12.6473 +EOF
 12.6474 +      fi
 12.6475 +      ;;
 12.6476 +
 12.6477 +    amigaos*)
 12.6478 +      _LT_AC_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)'
 12.6479 +      _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
 12.6480 +      _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes
 12.6481 +
 12.6482 +      # Samuel A. Falvo II <kc5tja@dolphin.openprojects.net> reports
 12.6483 +      # that the semantics of dynamic libraries on AmigaOS, at least up
 12.6484 +      # to version 4, is to share data among multiple programs linked
 12.6485 +      # with the same dynamic library.  Since this doesn't match the
 12.6486 +      # behavior of shared libraries on other platforms, we can't use
 12.6487 +      # them.
 12.6488 +      _LT_AC_TAGVAR(ld_shlibs, $1)=no
 12.6489 +      ;;
 12.6490 +
 12.6491 +    beos*)
 12.6492 +      if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
 12.6493 +	_LT_AC_TAGVAR(allow_undefined_flag, $1)=unsupported
 12.6494 +	# Joseph Beckenbach <jrb3@best.com> says some releases of gcc
 12.6495 +	# support --undefined.  This deserves some investigation.  FIXME
 12.6496 +	_LT_AC_TAGVAR(archive_cmds, $1)='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
 12.6497 +      else
 12.6498 +	_LT_AC_TAGVAR(ld_shlibs, $1)=no
 12.6499 +      fi
 12.6500 +      ;;
 12.6501 +
 12.6502 +    cygwin* | mingw* | pw32*)
 12.6503 +      # _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1) is actually meaningless,
 12.6504 +      # as there is no search path for DLLs.
 12.6505 +      _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
 12.6506 +      _LT_AC_TAGVAR(allow_undefined_flag, $1)=unsupported
 12.6507 +      _LT_AC_TAGVAR(always_export_symbols, $1)=no
 12.6508 +      _LT_AC_TAGVAR(enable_shared_with_static_runtimes, $1)=yes
 12.6509 +      _LT_AC_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'
 12.6510 +
 12.6511 +      if $LD --help 2>&1 | grep 'auto-import' > /dev/null; then
 12.6512 +        _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
 12.6513 +	# If the export-symbols file already is a .def file (1st line
 12.6514 +	# is EXPORTS), use it as is; otherwise, prepend...
 12.6515 +	_LT_AC_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then
 12.6516 +	  cp $export_symbols $output_objdir/$soname.def;
 12.6517 +	else
 12.6518 +	  echo EXPORTS > $output_objdir/$soname.def;
 12.6519 +	  cat $export_symbols >> $output_objdir/$soname.def;
 12.6520 +	fi~
 12.6521 +	$CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
 12.6522 +      else
 12.6523 +	_LT_AC_TAGVAR(ld_shlibs, $1)=no
 12.6524 +      fi
 12.6525 +      ;;
 12.6526 +
 12.6527 +    interix3*)
 12.6528 +      _LT_AC_TAGVAR(hardcode_direct, $1)=no
 12.6529 +      _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
 12.6530 +      _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
 12.6531 +      _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
 12.6532 +      # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc.
 12.6533 +      # Instead, shared libraries are loaded at an image base (0x10000000 by
 12.6534 +      # default) and relocated if they conflict, which is a slow very memory
 12.6535 +      # consuming and fragmenting process.  To avoid this, we pick a random,
 12.6536 +      # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link
 12.6537 +      # time.  Moving up from 0x10000000 also allows more sbrk(2) space.
 12.6538 +      _LT_AC_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'
 12.6539 +      _LT_AC_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'
 12.6540 +      ;;
 12.6541 +
 12.6542 +    linux*)
 12.6543 +      if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
 12.6544 +	tmp_addflag=
 12.6545 +	case $cc_basename,$host_cpu in
 12.6546 +	pgcc*)				# Portland Group C compiler
 12.6547 +	  _LT_AC_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test  -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $echo \"$new_convenience\"` ${wl}--no-whole-archive'
 12.6548 +	  tmp_addflag=' $pic_flag'
 12.6549 +	  ;;
 12.6550 +	pgf77* | pgf90* | pgf95*)	# Portland Group f77 and f90 compilers
 12.6551 +	  _LT_AC_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test  -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $echo \"$new_convenience\"` ${wl}--no-whole-archive'
 12.6552 +	  tmp_addflag=' $pic_flag -Mnomain' ;;
 12.6553 +	ecc*,ia64* | icc*,ia64*)		# Intel C compiler on ia64
 12.6554 +	  tmp_addflag=' -i_dynamic' ;;
 12.6555 +	efc*,ia64* | ifort*,ia64*)	# Intel Fortran compiler on ia64
 12.6556 +	  tmp_addflag=' -i_dynamic -nofor_main' ;;
 12.6557 +	ifc* | ifort*)			# Intel Fortran compiler
 12.6558 +	  tmp_addflag=' -nofor_main' ;;
 12.6559 +	esac
 12.6560 +	_LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared'"$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
 12.6561 +
 12.6562 +	if test $supports_anon_versioning = yes; then
 12.6563 +	  _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$echo "{ global:" > $output_objdir/$libname.ver~
 12.6564 +  cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~
 12.6565 +  $echo "local: *; };" >> $output_objdir/$libname.ver~
 12.6566 +	  $CC -shared'"$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib'
 12.6567 +	fi
 12.6568 +	_LT_AC_TAGVAR(link_all_deplibs, $1)=no
 12.6569 +      else
 12.6570 +	_LT_AC_TAGVAR(ld_shlibs, $1)=no
 12.6571 +      fi
 12.6572 +      ;;
 12.6573 +
 12.6574 +    netbsd* | netbsdelf*-gnu | knetbsd*-gnu)
 12.6575 +      if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then
 12.6576 +	_LT_AC_TAGVAR(archive_cmds, $1)='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib'
 12.6577 +	wlarc=
 12.6578 +      else
 12.6579 +	_LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
 12.6580 +	_LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
 12.6581 +      fi
 12.6582 +      ;;
 12.6583 +
 12.6584 +    solaris*)
 12.6585 +      if $LD -v 2>&1 | grep 'BFD 2\.8' > /dev/null; then
 12.6586 +	_LT_AC_TAGVAR(ld_shlibs, $1)=no
 12.6587 +	cat <<EOF 1>&2
 12.6588 +
 12.6589 +*** Warning: The releases 2.8.* of the GNU linker cannot reliably
 12.6590 +*** create shared libraries on Solaris systems.  Therefore, libtool
 12.6591 +*** is disabling shared libraries support.  We urge you to upgrade GNU
 12.6592 +*** binutils to release 2.9.1 or newer.  Another option is to modify
 12.6593 +*** your PATH or compiler configuration so that the native linker is
 12.6594 +*** used, and then restart.
 12.6595 +
 12.6596 +EOF
 12.6597 +      elif $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
 12.6598 +	_LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
 12.6599 +	_LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
 12.6600 +      else
 12.6601 +	_LT_AC_TAGVAR(ld_shlibs, $1)=no
 12.6602 +      fi
 12.6603 +      ;;
 12.6604 +
 12.6605 +    sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*)
 12.6606 +      case `$LD -v 2>&1` in
 12.6607 +        *\ [[01]].* | *\ 2.[[0-9]].* | *\ 2.1[[0-5]].*) 
 12.6608 +	_LT_AC_TAGVAR(ld_shlibs, $1)=no
 12.6609 +	cat <<_LT_EOF 1>&2
 12.6610 +
 12.6611 +*** Warning: Releases of the GNU linker prior to 2.16.91.0.3 can not
 12.6612 +*** reliably create shared libraries on SCO systems.  Therefore, libtool
 12.6613 +*** is disabling shared libraries support.  We urge you to upgrade GNU
 12.6614 +*** binutils to release 2.16.91.0.3 or newer.  Another option is to modify
 12.6615 +*** your PATH or compiler configuration so that the native linker is
 12.6616 +*** used, and then restart.
 12.6617 +
 12.6618 +_LT_EOF
 12.6619 +	;;
 12.6620 +	*)
 12.6621 +	  if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
 12.6622 +	    _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='`test -z "$SCOABSPATH" && echo ${wl}-rpath,$libdir`'
 12.6623 +	    _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib'
 12.6624 +	    _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname,\${SCOABSPATH:+${install_libdir}/}$soname,-retain-symbols-file,$export_symbols -o $lib'
 12.6625 +	  else
 12.6626 +	    _LT_AC_TAGVAR(ld_shlibs, $1)=no
 12.6627 +	  fi
 12.6628 +	;;
 12.6629 +      esac
 12.6630 +      ;;
 12.6631 +
 12.6632 +    sunos4*)
 12.6633 +      _LT_AC_TAGVAR(archive_cmds, $1)='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags'
 12.6634 +      wlarc=
 12.6635 +      _LT_AC_TAGVAR(hardcode_direct, $1)=yes
 12.6636 +      _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
 12.6637 +      ;;
 12.6638 +
 12.6639 +    *)
 12.6640 +      if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
 12.6641 +	_LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
 12.6642 +	_LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
 12.6643 +      else
 12.6644 +	_LT_AC_TAGVAR(ld_shlibs, $1)=no
 12.6645 +      fi
 12.6646 +      ;;
 12.6647 +    esac
 12.6648 +
 12.6649 +    if test "$_LT_AC_TAGVAR(ld_shlibs, $1)" = no; then
 12.6650 +      runpath_var=
 12.6651 +      _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)=
 12.6652 +      _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)=
 12.6653 +      _LT_AC_TAGVAR(whole_archive_flag_spec, $1)=
 12.6654 +    fi
 12.6655 +  else
 12.6656 +    # PORTME fill in a description of your system's linker (not GNU ld)
 12.6657 +    case $host_os in
 12.6658 +    aix3*)
 12.6659 +      _LT_AC_TAGVAR(allow_undefined_flag, $1)=unsupported
 12.6660 +      _LT_AC_TAGVAR(always_export_symbols, $1)=yes
 12.6661 +      _LT_AC_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'
 12.6662 +      # Note: this linker hardcodes the directories in LIBPATH if there
 12.6663 +      # are no directories specified by -L.
 12.6664 +      _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes
 12.6665 +      if test "$GCC" = yes && test -z "$lt_prog_compiler_static"; then
 12.6666 +	# Neither direct hardcoding nor static linking is supported with a
 12.6667 +	# broken collect2.
 12.6668 +	_LT_AC_TAGVAR(hardcode_direct, $1)=unsupported
 12.6669 +      fi
 12.6670 +      ;;
 12.6671 +
 12.6672 +    aix4* | aix5*)
 12.6673 +      if test "$host_cpu" = ia64; then
 12.6674 +	# On IA64, the linker does run time linking by default, so we don't
 12.6675 +	# have to do anything special.
 12.6676 +	aix_use_runtimelinking=no
 12.6677 +	exp_sym_flag='-Bexport'
 12.6678 +	no_entry_flag=""
 12.6679 +      else
 12.6680 +	# If we're using GNU nm, then we don't want the "-C" option.
 12.6681 +	# -C means demangle to AIX nm, but means don't demangle with GNU nm
 12.6682 +	if $NM -V 2>&1 | grep 'GNU' > /dev/null; then
 12.6683 +	  _LT_AC_TAGVAR(export_symbols_cmds, $1)='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\[$]2 == "T") || (\[$]2 == "D") || (\[$]2 == "B")) && ([substr](\[$]3,1,1) != ".")) { print \[$]3 } }'\'' | sort -u > $export_symbols'
 12.6684 +	else
 12.6685 +	  _LT_AC_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'
 12.6686 +	fi
 12.6687 +	aix_use_runtimelinking=no
 12.6688 +
 12.6689 +	# Test if we are trying to use run time linking or normal
 12.6690 +	# AIX style linking. If -brtl is somewhere in LDFLAGS, we
 12.6691 +	# need to do runtime linking.
 12.6692 +	case $host_os in aix4.[[23]]|aix4.[[23]].*|aix5*)
 12.6693 +	  for ld_flag in $LDFLAGS; do
 12.6694 +  	  if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then
 12.6695 +  	    aix_use_runtimelinking=yes
 12.6696 +  	    break
 12.6697 +  	  fi
 12.6698 +	  done
 12.6699 +	  ;;
 12.6700 +	esac
 12.6701 +
 12.6702 +	exp_sym_flag='-bexport'
 12.6703 +	no_entry_flag='-bnoentry'
 12.6704 +      fi
 12.6705 +
 12.6706 +      # When large executables or shared objects are built, AIX ld can
 12.6707 +      # have problems creating the table of contents.  If linking a library
 12.6708 +      # or program results in "error TOC overflow" add -mminimal-toc to
 12.6709 +      # CXXFLAGS/CFLAGS for g++/gcc.  In the cases where that is not
 12.6710 +      # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS.
 12.6711 +
 12.6712 +      _LT_AC_TAGVAR(archive_cmds, $1)=''
 12.6713 +      _LT_AC_TAGVAR(hardcode_direct, $1)=yes
 12.6714 +      _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=':'
 12.6715 +      _LT_AC_TAGVAR(link_all_deplibs, $1)=yes
 12.6716 +
 12.6717 +      if test "$GCC" = yes; then
 12.6718 +	case $host_os in aix4.[[012]]|aix4.[[012]].*)
 12.6719 +	# We only want to do this on AIX 4.2 and lower, the check
 12.6720 +	# below for broken collect2 doesn't work under 4.3+
 12.6721 +	  collect2name=`${CC} -print-prog-name=collect2`
 12.6722 +	  if test -f "$collect2name" && \
 12.6723 +  	   strings "$collect2name" | grep resolve_lib_name >/dev/null
 12.6724 +	  then
 12.6725 +  	  # We have reworked collect2
 12.6726 +  	  _LT_AC_TAGVAR(hardcode_direct, $1)=yes
 12.6727 +	  else
 12.6728 +  	  # We have old collect2
 12.6729 +  	  _LT_AC_TAGVAR(hardcode_direct, $1)=unsupported
 12.6730 +  	  # It fails to find uninstalled libraries when the uninstalled
 12.6731 +  	  # path is not listed in the libpath.  Setting hardcode_minus_L
 12.6732 +  	  # to unsupported forces relinking
 12.6733 +  	  _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes
 12.6734 +  	  _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
 12.6735 +  	  _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=
 12.6736 +	  fi
 12.6737 +	  ;;
 12.6738 +	esac
 12.6739 +	shared_flag='-shared'
 12.6740 +	if test "$aix_use_runtimelinking" = yes; then
 12.6741 +	  shared_flag="$shared_flag "'${wl}-G'
 12.6742 +	fi
 12.6743 +      else
 12.6744 +	# not using gcc
 12.6745 +	if test "$host_cpu" = ia64; then
 12.6746 +  	# VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release
 12.6747 +  	# chokes on -Wl,-G. The following line is correct:
 12.6748 +	  shared_flag='-G'
 12.6749 +	else
 12.6750 +	  if test "$aix_use_runtimelinking" = yes; then
 12.6751 +	    shared_flag='${wl}-G'
 12.6752 +	  else
 12.6753 +	    shared_flag='${wl}-bM:SRE'
 12.6754 +	  fi
 12.6755 +	fi
 12.6756 +      fi
 12.6757 +
 12.6758 +      # It seems that -bexpall does not export symbols beginning with
 12.6759 +      # underscore (_), so it is better to generate a list of symbols to export.
 12.6760 +      _LT_AC_TAGVAR(always_export_symbols, $1)=yes
 12.6761 +      if test "$aix_use_runtimelinking" = yes; then
 12.6762 +	# Warning - without using the other runtime loading flags (-brtl),
 12.6763 +	# -berok will link without error, but may produce a broken library.
 12.6764 +	_LT_AC_TAGVAR(allow_undefined_flag, $1)='-berok'
 12.6765 +       # Determine the default libpath from the value encoded in an empty executable.
 12.6766 +       _LT_AC_SYS_LIBPATH_AIX
 12.6767 +       _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath"
 12.6768 +	_LT_AC_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 echo "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag"
 12.6769 +       else
 12.6770 +	if test "$host_cpu" = ia64; then
 12.6771 +	  _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $libdir:/usr/lib:/lib'
 12.6772 +	  _LT_AC_TAGVAR(allow_undefined_flag, $1)="-z nodefs"
 12.6773 +	  _LT_AC_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"
 12.6774 +	else
 12.6775 +	 # Determine the default libpath from the value encoded in an empty executable.
 12.6776 +	 _LT_AC_SYS_LIBPATH_AIX
 12.6777 +	 _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath"
 12.6778 +	  # Warning - without using the other run time loading flags,
 12.6779 +	  # -berok will link without error, but may produce a broken library.
 12.6780 +	  _LT_AC_TAGVAR(no_undefined_flag, $1)=' ${wl}-bernotok'
 12.6781 +	  _LT_AC_TAGVAR(allow_undefined_flag, $1)=' ${wl}-berok'
 12.6782 +	  # Exported symbols can be pulled into shared objects from archives
 12.6783 +	  _LT_AC_TAGVAR(whole_archive_flag_spec, $1)='$convenience'
 12.6784 +	  _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=yes
 12.6785 +	  # This is similar to how AIX traditionally builds its shared libraries.
 12.6786 +	  _LT_AC_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'
 12.6787 +	fi
 12.6788 +      fi
 12.6789 +      ;;
 12.6790 +
 12.6791 +    amigaos*)
 12.6792 +      _LT_AC_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)'
 12.6793 +      _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
 12.6794 +      _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes
 12.6795 +      # see comment about different semantics on the GNU ld section
 12.6796 +      _LT_AC_TAGVAR(ld_shlibs, $1)=no
 12.6797 +      ;;
 12.6798 +
 12.6799 +    bsdi[[45]]*)
 12.6800 +      _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)=-rdynamic
 12.6801 +      ;;
 12.6802 +
 12.6803 +    cygwin* | mingw* | pw32*)
 12.6804 +      # When not using gcc, we currently assume that we are using
 12.6805 +      # Microsoft Visual C++.
 12.6806 +      # hardcode_libdir_flag_spec is actually meaningless, as there is
 12.6807 +      # no search path for DLLs.
 12.6808 +      _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)=' '
 12.6809 +      _LT_AC_TAGVAR(allow_undefined_flag, $1)=unsupported
 12.6810 +      # Tell ltmain to make .lib files, not .a files.
 12.6811 +      libext=lib
 12.6812 +      # Tell ltmain to make .dll files, not .so files.
 12.6813 +      shrext_cmds=".dll"
 12.6814 +      # FIXME: Setting linknames here is a bad hack.
 12.6815 +      _LT_AC_TAGVAR(archive_cmds, $1)='$CC -o $lib $libobjs $compiler_flags `echo "$deplibs" | $SED -e '\''s/ -lc$//'\''` -link -dll~linknames='
 12.6816 +      # The linker will automatically build a .lib file if we build a DLL.
 12.6817 +      _LT_AC_TAGVAR(old_archive_From_new_cmds, $1)='true'
 12.6818 +      # FIXME: Should let the user specify the lib program.
 12.6819 +      _LT_AC_TAGVAR(old_archive_cmds, $1)='lib /OUT:$oldlib$oldobjs$old_deplibs'
 12.6820 +      _LT_AC_TAGVAR(fix_srcfile_path, $1)='`cygpath -w "$srcfile"`'
 12.6821 +      _LT_AC_TAGVAR(enable_shared_with_static_runtimes, $1)=yes
 12.6822 +      ;;
 12.6823 +
 12.6824 +    darwin* | rhapsody*)
 12.6825 +      case $host_os in
 12.6826 +        rhapsody* | darwin1.[[012]])
 12.6827 +         _LT_AC_TAGVAR(allow_undefined_flag, $1)='${wl}-undefined ${wl}suppress'
 12.6828 +         ;;
 12.6829 +       *) # Darwin 1.3 on
 12.6830 +         if test -z ${MACOSX_DEPLOYMENT_TARGET} ; then
 12.6831 +           _LT_AC_TAGVAR(allow_undefined_flag, $1)='${wl}-flat_namespace ${wl}-undefined ${wl}suppress'
 12.6832 +         else
 12.6833 +           case ${MACOSX_DEPLOYMENT_TARGET} in
 12.6834 +             10.[[012]])
 12.6835 +               _LT_AC_TAGVAR(allow_undefined_flag, $1)='${wl}-flat_namespace ${wl}-undefined ${wl}suppress'
 12.6836 +               ;;
 12.6837 +             10.*)
 12.6838 +               _LT_AC_TAGVAR(allow_undefined_flag, $1)='${wl}-undefined ${wl}dynamic_lookup'
 12.6839 +               ;;
 12.6840 +           esac
 12.6841 +         fi
 12.6842 +         ;;
 12.6843 +      esac
 12.6844 +      _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no
 12.6845 +      _LT_AC_TAGVAR(hardcode_direct, $1)=no
 12.6846 +      _LT_AC_TAGVAR(hardcode_automatic, $1)=yes
 12.6847 +      _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=unsupported
 12.6848 +      _LT_AC_TAGVAR(whole_archive_flag_spec, $1)=''
 12.6849 +      _LT_AC_TAGVAR(link_all_deplibs, $1)=yes
 12.6850 +    if test "$GCC" = yes ; then
 12.6851 +    	output_verbose_link_cmd='echo'
 12.6852 +        _LT_AC_TAGVAR(archive_cmds, $1)='$CC -dynamiclib $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring'
 12.6853 +      _LT_AC_TAGVAR(module_cmds, $1)='$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags'
 12.6854 +      # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin lds
 12.6855 +      _LT_AC_TAGVAR(archive_expsym_cmds, $1)='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}'
 12.6856 +      _LT_AC_TAGVAR(module_expsym_cmds, $1)='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}'
 12.6857 +    else
 12.6858 +      case $cc_basename in
 12.6859 +        xlc*)
 12.6860 +         output_verbose_link_cmd='echo'
 12.6861 +         _LT_AC_TAGVAR(archive_cmds, $1)='$CC -qmkshrobj $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}`echo $rpath/$soname` $verstring'
 12.6862 +         _LT_AC_TAGVAR(module_cmds, $1)='$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags'
 12.6863 +          # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin lds
 12.6864 +         _LT_AC_TAGVAR(archive_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[    ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -qmkshrobj $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}$rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
 12.6865 +          _LT_AC_TAGVAR(module_expsym_cmds, $1)='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}'
 12.6866 +          ;;
 12.6867 +       *)
 12.6868 +         _LT_AC_TAGVAR(ld_shlibs, $1)=no
 12.6869 +          ;;
 12.6870 +      esac
 12.6871 +    fi
 12.6872 +      ;;
 12.6873 +
 12.6874 +    dgux*)
 12.6875 +      _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
 12.6876 +      _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
 12.6877 +      _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
 12.6878 +      ;;
 12.6879 +
 12.6880 +    freebsd1*)
 12.6881 +      _LT_AC_TAGVAR(ld_shlibs, $1)=no
 12.6882 +      ;;
 12.6883 +
 12.6884 +    # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor
 12.6885 +    # support.  Future versions do this automatically, but an explicit c++rt0.o
 12.6886 +    # does not break anything, and helps significantly (at the cost of a little
 12.6887 +    # extra space).
 12.6888 +    freebsd2.2*)
 12.6889 +      _LT_AC_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o'
 12.6890 +      _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
 12.6891 +      _LT_AC_TAGVAR(hardcode_direct, $1)=yes
 12.6892 +      _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
 12.6893 +      ;;
 12.6894 +
 12.6895 +    # Unfortunately, older versions of FreeBSD 2 do not have this feature.
 12.6896 +    freebsd2*)
 12.6897 +      _LT_AC_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'
 12.6898 +      _LT_AC_TAGVAR(hardcode_direct, $1)=yes
 12.6899 +      _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes
 12.6900 +      _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
 12.6901 +      ;;
 12.6902 +
 12.6903 +    # FreeBSD 3 and greater uses gcc -shared to do shared libraries.
 12.6904 +    freebsd* | dragonfly*)
 12.6905 +      _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -o $lib $libobjs $deplibs $compiler_flags'
 12.6906 +      _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
 12.6907 +      _LT_AC_TAGVAR(hardcode_direct, $1)=yes
 12.6908 +      _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
 12.6909 +      ;;
 12.6910 +      
 12.6911 +    # GNU/kFreeBSD uses gcc -shared to do shared libraries.
 12.6912 +    kfreebsd*-gnu)
 12.6913 +      _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -o $lib $libobjs $deplibs $compiler_flags'
 12.6914 +      _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
 12.6915 +      _LT_AC_TAGVAR(hardcode_direct, $1)=yes
 12.6916 +      _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
 12.6917 +      _LT_AC_TAGVAR(link_all_deplibs, $1)=no
 12.6918 +      ;;
 12.6919 +
 12.6920 +    hpux9*)
 12.6921 +      if test "$GCC" = yes; then
 12.6922 +	_LT_AC_TAGVAR(archive_cmds, $1)='$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'
 12.6923 +      else
 12.6924 +	_LT_AC_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'
 12.6925 +      fi
 12.6926 +      _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir'
 12.6927 +      _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=:
 12.6928 +      _LT_AC_TAGVAR(hardcode_direct, $1)=yes
 12.6929 +
 12.6930 +      # hardcode_minus_L: Not really in the search PATH,
 12.6931 +      # but as the default location of the library.
 12.6932 +      _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes
 12.6933 +      _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
 12.6934 +      ;;
 12.6935 +
 12.6936 +    hpux10*)
 12.6937 +      if test "$GCC" = yes -a "$with_gnu_ld" = no; then
 12.6938 +	_LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
 12.6939 +      else
 12.6940 +	_LT_AC_TAGVAR(archive_cmds, $1)='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags'
 12.6941 +      fi
 12.6942 +      if test "$with_gnu_ld" = no; then
 12.6943 +	_LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir'
 12.6944 +	_LT_AC_TAGVAR(hardcode_libdir_separator, $1)=:
 12.6945 +
 12.6946 +	_LT_AC_TAGVAR(hardcode_direct, $1)=yes
 12.6947 +	_LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
 12.6948 +
 12.6949 +	# hardcode_minus_L: Not really in the search PATH,
 12.6950 +	# but as the default location of the library.
 12.6951 +	_LT_AC_TAGVAR(hardcode_minus_L, $1)=yes
 12.6952 +      fi
 12.6953 +      ;;
 12.6954 +
 12.6955 +    hpux11*)
 12.6956 +      if test "$GCC" = yes -a "$with_gnu_ld" = no; then
 12.6957 +	case $host_cpu in
 12.6958 +	hppa*64*)
 12.6959 +	  _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
 12.6960 +	  ;;
 12.6961 +	ia64*)
 12.6962 +	  _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags'
 12.6963 +	  ;;
 12.6964 +	*)
 12.6965 +	  _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
 12.6966 +	  ;;
 12.6967 +	esac
 12.6968 +      else
 12.6969 +	case $host_cpu in
 12.6970 +	hppa*64*)
 12.6971 +	  _LT_AC_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
 12.6972 +	  ;;
 12.6973 +	ia64*)
 12.6974 +	  _LT_AC_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags'
 12.6975 +	  ;;
 12.6976 +	*)
 12.6977 +	  _LT_AC_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
 12.6978 +	  ;;
 12.6979 +	esac
 12.6980 +      fi
 12.6981 +      if test "$with_gnu_ld" = no; then
 12.6982 +	_LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir'
 12.6983 +	_LT_AC_TAGVAR(hardcode_libdir_separator, $1)=:
 12.6984 +
 12.6985 +	case $host_cpu in
 12.6986 +	hppa*64*|ia64*)
 12.6987 +	  _LT_AC_TAGVAR(hardcode_libdir_flag_spec_ld, $1)='+b $libdir'
 12.6988 +	  _LT_AC_TAGVAR(hardcode_direct, $1)=no
 12.6989 +	  _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
 12.6990 +	  ;;
 12.6991 +	*)
 12.6992 +	  _LT_AC_TAGVAR(hardcode_direct, $1)=yes
 12.6993 +	  _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
 12.6994 +
 12.6995 +	  # hardcode_minus_L: Not really in the search PATH,
 12.6996 +	  # but as the default location of the library.
 12.6997 +	  _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes
 12.6998 +	  ;;
 12.6999 +	esac
 12.7000 +      fi
 12.7001 +      ;;
 12.7002 +
 12.7003 +    irix5* | irix6* | nonstopux*)
 12.7004 +      if test "$GCC" = yes; then
 12.7005 +	_LT_AC_TAGVAR(archive_cmds, $1)='$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'
 12.7006 +      else
 12.7007 +	_LT_AC_TAGVAR(archive_cmds, $1)='$LD -shared $libobjs $deplibs $linker_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib'
 12.7008 +	_LT_AC_TAGVAR(hardcode_libdir_flag_spec_ld, $1)='-rpath $libdir'
 12.7009 +      fi
 12.7010 +      _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
 12.7011 +      _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=:
 12.7012 +      _LT_AC_TAGVAR(link_all_deplibs, $1)=yes
 12.7013 +      ;;
 12.7014 +
 12.7015 +    netbsd* | netbsdelf*-gnu | knetbsd*-gnu)
 12.7016 +      if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then
 12.7017 +	_LT_AC_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'  # a.out
 12.7018 +      else
 12.7019 +	_LT_AC_TAGVAR(archive_cmds, $1)='$LD -shared -o $lib $libobjs $deplibs $linker_flags'      # ELF
 12.7020 +      fi
 12.7021 +      _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
 12.7022 +      _LT_AC_TAGVAR(hardcode_direct, $1)=yes
 12.7023 +      _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
 12.7024 +      ;;
 12.7025 +
 12.7026 +    newsos6)
 12.7027 +      _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
 12.7028 +      _LT_AC_TAGVAR(hardcode_direct, $1)=yes
 12.7029 +      _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
 12.7030 +      _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=:
 12.7031 +      _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
 12.7032 +      ;;
 12.7033 +
 12.7034 +    openbsd*)
 12.7035 +      _LT_AC_TAGVAR(hardcode_direct, $1)=yes
 12.7036 +      _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
 12.7037 +      if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
 12.7038 +	_LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
 12.7039 +	_LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-retain-symbols-file,$export_symbols'
 12.7040 +	_LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
 12.7041 +	_LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
 12.7042 +      else
 12.7043 +       case $host_os in
 12.7044 +	 openbsd[[01]].* | openbsd2.[[0-7]] | openbsd2.[[0-7]].*)
 12.7045 +	   _LT_AC_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'
 12.7046 +	   _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
 12.7047 +	   ;;
 12.7048 +	 *)
 12.7049 +	   _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
 12.7050 +	   _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
 12.7051 +	   ;;
 12.7052 +       esac
 12.7053 +      fi
 12.7054 +      ;;
 12.7055 +
 12.7056 +    os2*)
 12.7057 +      _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
 12.7058 +      _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes
 12.7059 +      _LT_AC_TAGVAR(allow_undefined_flag, $1)=unsupported
 12.7060 +      _LT_AC_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'
 12.7061 +      _LT_AC_TAGVAR(old_archive_From_new_cmds, $1)='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def'
 12.7062 +      ;;
 12.7063 +
 12.7064 +    osf3*)
 12.7065 +      if test "$GCC" = yes; then
 12.7066 +	_LT_AC_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*'
 12.7067 +	_LT_AC_TAGVAR(archive_cmds, $1)='$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'
 12.7068 +      else
 12.7069 +	_LT_AC_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*'
 12.7070 +	_LT_AC_TAGVAR(archive_cmds, $1)='$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'
 12.7071 +      fi
 12.7072 +      _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
 12.7073 +      _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=:
 12.7074 +      ;;
 12.7075 +
 12.7076 +    osf4* | osf5*)	# as osf3* with the addition of -msym flag
 12.7077 +      if test "$GCC" = yes; then
 12.7078 +	_LT_AC_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*'
 12.7079 +	_LT_AC_TAGVAR(archive_cmds, $1)='$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'
 12.7080 +	_LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
 12.7081 +      else
 12.7082 +	_LT_AC_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*'
 12.7083 +	_LT_AC_TAGVAR(archive_cmds, $1)='$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'
 12.7084 +	_LT_AC_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~
 12.7085 +	$LD -shared${allow_undefined_flag} -input $lib.exp $linker_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib~$rm $lib.exp'
 12.7086 +
 12.7087 +	# Both c and cxx compiler support -rpath directly
 12.7088 +	_LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir'
 12.7089 +      fi
 12.7090 +      _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=:
 12.7091 +      ;;
 12.7092 +
 12.7093 +    solaris*)
 12.7094 +      _LT_AC_TAGVAR(no_undefined_flag, $1)=' -z text'
 12.7095 +      if test "$GCC" = yes; then
 12.7096 +	wlarc='${wl}'
 12.7097 +	_LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
 12.7098 +	_LT_AC_TAGVAR(archive_expsym_cmds, $1)='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~
 12.7099 +	  $CC -shared ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$rm $lib.exp'
 12.7100 +      else
 12.7101 +	wlarc=''
 12.7102 +	_LT_AC_TAGVAR(archive_cmds, $1)='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags'
 12.7103 +	_LT_AC_TAGVAR(archive_expsym_cmds, $1)='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~
 12.7104 +  	$LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$rm $lib.exp'
 12.7105 +      fi
 12.7106 +      _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
 12.7107 +      _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
 12.7108 +      case $host_os in
 12.7109 +      solaris2.[[0-5]] | solaris2.[[0-5]].*) ;;
 12.7110 +      *)
 12.7111 + 	# The compiler driver will combine linker options so we
 12.7112 + 	# cannot just pass the convience library names through
 12.7113 + 	# without $wl, iff we do not link with $LD.
 12.7114 + 	# Luckily, gcc supports the same syntax we need for Sun Studio.
 12.7115 + 	# Supported since Solaris 2.6 (maybe 2.5.1?)
 12.7116 + 	case $wlarc in
 12.7117 + 	'')
 12.7118 + 	  _LT_AC_TAGVAR(whole_archive_flag_spec, $1)='-z allextract$convenience -z defaultextract' ;;
 12.7119 + 	*)
 12.7120 + 	  _LT_AC_TAGVAR(whole_archive_flag_spec, $1)='${wl}-z ${wl}allextract`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $echo \"$new_convenience\"` ${wl}-z ${wl}defaultextract' ;;
 12.7121 + 	esac ;;
 12.7122 +      esac
 12.7123 +      _LT_AC_TAGVAR(link_all_deplibs, $1)=yes
 12.7124 +      ;;
 12.7125 +
 12.7126 +    sunos4*)
 12.7127 +      if test "x$host_vendor" = xsequent; then
 12.7128 +	# Use $CC to link under sequent, because it throws in some extra .o
 12.7129 +	# files that make .init and .fini sections work.
 12.7130 +	_LT_AC_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags'
 12.7131 +      else
 12.7132 +	_LT_AC_TAGVAR(archive_cmds, $1)='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags'
 12.7133 +      fi
 12.7134 +      _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
 12.7135 +      _LT_AC_TAGVAR(hardcode_direct, $1)=yes
 12.7136 +      _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes
 12.7137 +      _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
 12.7138 +      ;;
 12.7139 +
 12.7140 +    sysv4)
 12.7141 +      case $host_vendor in
 12.7142 +	sni)
 12.7143 +	  _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
 12.7144 +	  _LT_AC_TAGVAR(hardcode_direct, $1)=yes # is this really true???
 12.7145 +	;;
 12.7146 +	siemens)
 12.7147 +	  ## LD is ld it makes a PLAMLIB
 12.7148 +	  ## CC just makes a GrossModule.
 12.7149 +	  _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -o $lib $libobjs $deplibs $linker_flags'
 12.7150 +	  _LT_AC_TAGVAR(reload_cmds, $1)='$CC -r -o $output$reload_objs'
 12.7151 +	  _LT_AC_TAGVAR(hardcode_direct, $1)=no
 12.7152 +        ;;
 12.7153 +	motorola)
 12.7154 +	  _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
 12.7155 +	  _LT_AC_TAGVAR(hardcode_direct, $1)=no #Motorola manual says yes, but my tests say they lie
 12.7156 +	;;
 12.7157 +      esac
 12.7158 +      runpath_var='LD_RUN_PATH'
 12.7159 +      _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
 12.7160 +      ;;
 12.7161 +
 12.7162 +    sysv4.3*)
 12.7163 +      _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
 12.7164 +      _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
 12.7165 +      _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='-Bexport'
 12.7166 +      ;;
 12.7167 +
 12.7168 +    sysv4*MP*)
 12.7169 +      if test -d /usr/nec; then
 12.7170 +	_LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
 12.7171 +	_LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
 12.7172 +	runpath_var=LD_RUN_PATH
 12.7173 +	hardcode_runpath_var=yes
 12.7174 +	_LT_AC_TAGVAR(ld_shlibs, $1)=yes
 12.7175 +      fi
 12.7176 +      ;;
 12.7177 +
 12.7178 +    sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[[01]].[[10]]* | unixware7*)
 12.7179 +      _LT_AC_TAGVAR(no_undefined_flag, $1)='${wl}-z,text'
 12.7180 +      _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no
 12.7181 +      _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
 12.7182 +      runpath_var='LD_RUN_PATH'
 12.7183 +
 12.7184 +      if test "$GCC" = yes; then
 12.7185 +	_LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
 12.7186 +	_LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
 12.7187 +      else
 12.7188 +	_LT_AC_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
 12.7189 +	_LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
 12.7190 +      fi
 12.7191 +      ;;
 12.7192 +
 12.7193 +    sysv5* | sco3.2v5* | sco5v6*)
 12.7194 +      # Note: We can NOT use -z defs as we might desire, because we do not
 12.7195 +      # link with -lc, and that would cause any symbols used from libc to
 12.7196 +      # always be unresolved, which means just about no library would
 12.7197 +      # ever link correctly.  If we're not using GNU ld we use -z text
 12.7198 +      # though, which does catch some bad symbols but isn't as heavy-handed
 12.7199 +      # as -z defs.
 12.7200 +      _LT_AC_TAGVAR(no_undefined_flag, $1)='${wl}-z,text'
 12.7201 +      _LT_AC_TAGVAR(allow_undefined_flag, $1)='${wl}-z,nodefs'
 12.7202 +      _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no
 12.7203 +      _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
 12.7204 +      _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='`test -z "$SCOABSPATH" && echo ${wl}-R,$libdir`'
 12.7205 +      _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=':'
 12.7206 +      _LT_AC_TAGVAR(link_all_deplibs, $1)=yes
 12.7207 +      _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-Bexport'
 12.7208 +      runpath_var='LD_RUN_PATH'
 12.7209 +
 12.7210 +      if test "$GCC" = yes; then
 12.7211 +	_LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags'
 12.7212 +	_LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags'
 12.7213 +      else
 12.7214 +	_LT_AC_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags'
 12.7215 +	_LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags'
 12.7216 +      fi
 12.7217 +      ;;
 12.7218 +
 12.7219 +    uts4*)
 12.7220 +      _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
 12.7221 +      _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
 12.7222 +      _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no
 12.7223 +      ;;
 12.7224 +
 12.7225 +    *)
 12.7226 +      _LT_AC_TAGVAR(ld_shlibs, $1)=no
 12.7227 +      ;;
 12.7228 +    esac
 12.7229 +  fi
 12.7230 +])
 12.7231 +AC_MSG_RESULT([$_LT_AC_TAGVAR(ld_shlibs, $1)])
 12.7232 +test "$_LT_AC_TAGVAR(ld_shlibs, $1)" = no && can_build_shared=no
 12.7233 +
 12.7234 +#
 12.7235 +# Do we need to explicitly link libc?
 12.7236 +#
 12.7237 +case "x$_LT_AC_TAGVAR(archive_cmds_need_lc, $1)" in
 12.7238 +x|xyes)
 12.7239 +  # Assume -lc should be added
 12.7240 +  _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=yes
 12.7241 +
 12.7242 +  if test "$enable_shared" = yes && test "$GCC" = yes; then
 12.7243 +    case $_LT_AC_TAGVAR(archive_cmds, $1) in
 12.7244 +    *'~'*)
 12.7245 +      # FIXME: we may have to deal with multi-command sequences.
 12.7246 +      ;;
 12.7247 +    '$CC '*)
 12.7248 +      # Test whether the compiler implicitly links with -lc since on some
 12.7249 +      # systems, -lgcc has to come before -lc. If gcc already passes -lc
 12.7250 +      # to ld, don't add -lc before -lgcc.
 12.7251 +      AC_MSG_CHECKING([whether -lc should be explicitly linked in])
 12.7252 +      $rm conftest*
 12.7253 +      printf "$lt_simple_compile_test_code" > conftest.$ac_ext
 12.7254 +
 12.7255 +      if AC_TRY_EVAL(ac_compile) 2>conftest.err; then
 12.7256 +        soname=conftest
 12.7257 +        lib=conftest
 12.7258 +        libobjs=conftest.$ac_objext
 12.7259 +        deplibs=
 12.7260 +        wl=$_LT_AC_TAGVAR(lt_prog_compiler_wl, $1)
 12.7261 +	pic_flag=$_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)
 12.7262 +        compiler_flags=-v
 12.7263 +        linker_flags=-v
 12.7264 +        verstring=
 12.7265 +        output_objdir=.
 12.7266 +        libname=conftest
 12.7267 +        lt_save_allow_undefined_flag=$_LT_AC_TAGVAR(allow_undefined_flag, $1)
 12.7268 +        _LT_AC_TAGVAR(allow_undefined_flag, $1)=
 12.7269 +        if AC_TRY_EVAL(_LT_AC_TAGVAR(archive_cmds, $1) 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1)
 12.7270 +        then
 12.7271 +	  _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no
 12.7272 +        else
 12.7273 +	  _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=yes
 12.7274 +        fi
 12.7275 +        _LT_AC_TAGVAR(allow_undefined_flag, $1)=$lt_save_allow_undefined_flag
 12.7276 +      else
 12.7277 +        cat conftest.err 1>&5
 12.7278 +      fi
 12.7279 +      $rm conftest*
 12.7280 +      AC_MSG_RESULT([$_LT_AC_TAGVAR(archive_cmds_need_lc, $1)])
 12.7281 +      ;;
 12.7282 +    esac
 12.7283 +  fi
 12.7284 +  ;;
 12.7285 +esac
 12.7286 +])# AC_LIBTOOL_PROG_LD_SHLIBS
 12.7287 +
 12.7288 +
 12.7289 +# _LT_AC_FILE_LTDLL_C
 12.7290 +# -------------------
 12.7291 +# Be careful that the start marker always follows a newline.
 12.7292 +AC_DEFUN([_LT_AC_FILE_LTDLL_C], [
 12.7293 +# /* ltdll.c starts here */
 12.7294 +# #define WIN32_LEAN_AND_MEAN
 12.7295 +# #include <windows.h>
 12.7296 +# #undef WIN32_LEAN_AND_MEAN
 12.7297 +# #include <stdio.h>
 12.7298 +#
 12.7299 +# #ifndef __CYGWIN__
 12.7300 +# #  ifdef __CYGWIN32__
 12.7301 +# #    define __CYGWIN__ __CYGWIN32__
 12.7302 +# #  endif
 12.7303 +# #endif
 12.7304 +#
 12.7305 +# #ifdef __cplusplus
 12.7306 +# extern "C" {
 12.7307 +# #endif
 12.7308 +# BOOL APIENTRY DllMain (HINSTANCE hInst, DWORD reason, LPVOID reserved);
 12.7309 +# #ifdef __cplusplus
 12.7310 +# }
 12.7311 +# #endif
 12.7312 +#
 12.7313 +# #ifdef __CYGWIN__
 12.7314 +# #include <cygwin/cygwin_dll.h>
 12.7315 +# DECLARE_CYGWIN_DLL( DllMain );
 12.7316 +# #endif
 12.7317 +# HINSTANCE __hDllInstance_base;
 12.7318 +#
 12.7319 +# BOOL APIENTRY
 12.7320 +# DllMain (HINSTANCE hInst, DWORD reason, LPVOID reserved)
 12.7321 +# {
 12.7322 +#   __hDllInstance_base = hInst;
 12.7323 +#   return TRUE;
 12.7324 +# }
 12.7325 +# /* ltdll.c ends here */
 12.7326 +])# _LT_AC_FILE_LTDLL_C
 12.7327 +
 12.7328 +
 12.7329 +# _LT_AC_TAGVAR(VARNAME, [TAGNAME])
 12.7330 +# ---------------------------------
 12.7331 +AC_DEFUN([_LT_AC_TAGVAR], [ifelse([$2], [], [$1], [$1_$2])])
 12.7332 +
 12.7333 +
 12.7334 +# old names
 12.7335 +AC_DEFUN([AM_PROG_LIBTOOL],   [AC_PROG_LIBTOOL])
 12.7336 +AC_DEFUN([AM_ENABLE_SHARED],  [AC_ENABLE_SHARED($@)])
 12.7337 +AC_DEFUN([AM_ENABLE_STATIC],  [AC_ENABLE_STATIC($@)])
 12.7338 +AC_DEFUN([AM_DISABLE_SHARED], [AC_DISABLE_SHARED($@)])
 12.7339 +AC_DEFUN([AM_DISABLE_STATIC], [AC_DISABLE_STATIC($@)])
 12.7340 +AC_DEFUN([AM_PROG_LD],        [AC_PROG_LD])
 12.7341 +AC_DEFUN([AM_PROG_NM],        [AC_PROG_NM])
 12.7342 +
 12.7343 +# This is just to silence aclocal about the macro not being used
 12.7344 +ifelse([AC_DISABLE_FAST_INSTALL])
 12.7345 +
 12.7346 +AC_DEFUN([LT_AC_PROG_GCJ],
 12.7347 +[AC_CHECK_TOOL(GCJ, gcj, no)
 12.7348 +  test "x${GCJFLAGS+set}" = xset || GCJFLAGS="-g -O2"
 12.7349 +  AC_SUBST(GCJFLAGS)
 12.7350 +])
 12.7351 +
 12.7352 +AC_DEFUN([LT_AC_PROG_RC],
 12.7353 +[AC_CHECK_TOOL(RC, windres, no)
 12.7354 +])
 12.7355 +
 12.7356 +# NOTE: This macro has been submitted for inclusion into   #
 12.7357 +#  GNU Autoconf as AC_PROG_SED.  When it is available in   #
 12.7358 +#  a released version of Autoconf we should remove this    #
 12.7359 +#  macro and use it instead.                               #
 12.7360 +# LT_AC_PROG_SED
 12.7361 +# --------------
 12.7362 +# Check for a fully-functional sed program, that truncates
 12.7363 +# as few characters as possible.  Prefer GNU sed if found.
 12.7364 +AC_DEFUN([LT_AC_PROG_SED],
 12.7365 +[AC_MSG_CHECKING([for a sed that does not truncate output])
 12.7366 +AC_CACHE_VAL(lt_cv_path_SED,
 12.7367 +[# Loop through the user's path and test for sed and gsed.
 12.7368 +# Then use that list of sed's as ones to test for truncation.
 12.7369 +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
 12.7370 +for as_dir in $PATH
 12.7371 +do
 12.7372 +  IFS=$as_save_IFS
 12.7373 +  test -z "$as_dir" && as_dir=.
 12.7374 +  for lt_ac_prog in sed gsed; do
 12.7375 +    for ac_exec_ext in '' $ac_executable_extensions; do
 12.7376 +      if $as_executable_p "$as_dir/$lt_ac_prog$ac_exec_ext"; then
 12.7377 +        lt_ac_sed_list="$lt_ac_sed_list $as_dir/$lt_ac_prog$ac_exec_ext"
 12.7378 +      fi
 12.7379 +    done
 12.7380 +  done
 12.7381 +done
 12.7382 +lt_ac_max=0
 12.7383 +lt_ac_count=0
 12.7384 +# Add /usr/xpg4/bin/sed as it is typically found on Solaris
 12.7385 +# along with /bin/sed that truncates output.
 12.7386 +for lt_ac_sed in $lt_ac_sed_list /usr/xpg4/bin/sed; do
 12.7387 +  test ! -f $lt_ac_sed && continue
 12.7388 +  cat /dev/null > conftest.in
 12.7389 +  lt_ac_count=0
 12.7390 +  echo $ECHO_N "0123456789$ECHO_C" >conftest.in
 12.7391 +  # Check for GNU sed and select it if it is found.
 12.7392 +  if "$lt_ac_sed" --version 2>&1 < /dev/null | grep 'GNU' > /dev/null; then
 12.7393 +    lt_cv_path_SED=$lt_ac_sed
 12.7394 +    break
 12.7395 +  fi
 12.7396 +  while true; do
 12.7397 +    cat conftest.in conftest.in >conftest.tmp
 12.7398 +    mv conftest.tmp conftest.in
 12.7399 +    cp conftest.in conftest.nl
 12.7400 +    echo >>conftest.nl
 12.7401 +    $lt_ac_sed -e 's/a$//' < conftest.nl >conftest.out || break
 12.7402 +    cmp -s conftest.out conftest.nl || break
 12.7403 +    # 10000 chars as input seems more than enough
 12.7404 +    test $lt_ac_count -gt 10 && break
 12.7405 +    lt_ac_count=`expr $lt_ac_count + 1`
 12.7406 +    if test $lt_ac_count -gt $lt_ac_max; then
 12.7407 +      lt_ac_max=$lt_ac_count
 12.7408 +      lt_cv_path_SED=$lt_ac_sed
 12.7409 +    fi
 12.7410 +  done
 12.7411 +done
 12.7412 +])
 12.7413 +SED=$lt_cv_path_SED
 12.7414 +AC_MSG_RESULT([$SED])
 12.7415 +])
 12.7416 +
 12.7417 +
 12.7418 +dnl
 12.7419 +dnl OPENBSD_LIBTOOL_WORKAROUND
 12.7420 +dnl
 12.7421 +dnl Work-around a problem caused by the -avoid-version libtool option.  Can
 12.7422 +dnl anyone come up with a better way?
 12.7423 +dnl
 12.7424 +
 12.7425 +AC_DEFUN([OPENBSD_LIBTOOL_WORKAROUND],
 12.7426 +         [case "${host_os}" in
 12.7427 +            openbsd*)
 12.7428 +              sed 's/^need_version=no$/need_version=yes/' < libtool > libtool.tmp && mv -f libtool.tmp libtool
 12.7429 +            ;;
 12.7430 +          esac
 12.7431 +          ])
 12.7432 +
 12.7433 +
 12.7434 +AC_DEFUN([GIFT_PLUGIN_PKGCONFIG],
 12.7435 +  [AC_PATH_PROG(PKG_CONFIG, pkg-config)
 12.7436 +
 12.7437 +   if test x$prefix != xNONE; then
 12.7438 +     PKG_CONFIG_PATH="$PKG_CONFIG_PATH:$prefix/lib/pkgconfig"
 12.7439 +   fi
 12.7440 +
 12.7441 +   PKG_CONFIG_PATH="$PKG_CONFIG_PATH:/usr/local/lib/pkgconfig"
 12.7442 +   export PKG_CONFIG_PATH
 12.7443 +
 12.7444 +   PKG_CHECK_MODULES([$1], libgift >= $2 libgift < $3)
 12.7445 +
 12.7446 +   # fudge libgiftproto in there which doesnt have any pkg-config entry
 12.7447 +   AS_VAR_SET($1_LIBS, "AS_VAR_GET($1_LIBS) -lgiftproto")
 12.7448 +
 12.7449 +   # hack to set libgift_version
 12.7450 +   libgift_version=`pkg-config libgift --modversion`
 12.7451 +
 12.7452 +   AC_SUBST($1_CFLAGS)
 12.7453 +   AC_SUBST($1_LIBS)
 12.7454 +  ])
 12.7455 +
 12.7456 +
 12.7457 +dnl PKG_CHECK_MODULES(GSTUFF, gtk+-2.0 >= 1.3 glib = 1.3.4, action-if, action-not)
 12.7458 +dnl defines GSTUFF_LIBS, GSTUFF_CFLAGS, see pkg-config man page
 12.7459 +dnl also defines GSTUFF_PKG_ERRORS on error
 12.7460 +AC_DEFUN(PKG_CHECK_MODULES, [
 12.7461 +  succeeded=no
 12.7462 +
 12.7463 +  if test -z "$PKG_CONFIG"; then
 12.7464 +    AC_PATH_PROG(PKG_CONFIG, pkg-config, no)
 12.7465 +  fi
 12.7466 +
 12.7467 +  if test "$PKG_CONFIG" = "no" ; then
 12.7468 +     echo "*** The pkg-config script could not be found. Make sure it is"
 12.7469 +     echo "*** in your path, or set the PKG_CONFIG environment variable"
 12.7470 +     echo "*** to the full path to pkg-config."
 12.7471 +     echo "*** Or see http://www.freedesktop.org/software/pkgconfig to get pkg-config."
 12.7472 +  else
 12.7473 +     PKG_CONFIG_MIN_VERSION=0.9.0
 12.7474 +     if $PKG_CONFIG --atleast-pkgconfig-version $PKG_CONFIG_MIN_VERSION; then
 12.7475 +        AC_MSG_CHECKING(for $2)
 12.7476 +
 12.7477 +        if $PKG_CONFIG --exists "$2" ; then
 12.7478 +            AC_MSG_RESULT(yes)
 12.7479 +            succeeded=yes
 12.7480 +
 12.7481 +            AC_MSG_CHECKING($1_CFLAGS)
 12.7482 +            $1_CFLAGS=`$PKG_CONFIG --cflags "$2"`
 12.7483 +            AC_MSG_RESULT($$1_CFLAGS)
 12.7484 +
 12.7485 +            AC_MSG_CHECKING($1_LIBS)
 12.7486 +            $1_LIBS=`$PKG_CONFIG --libs "$2"`
 12.7487 +            AC_MSG_RESULT($$1_LIBS)
 12.7488 +        else
 12.7489 +            $1_CFLAGS=""
 12.7490 +            $1_LIBS=""
 12.7491 +            ## If we have a custom action on failure, don't print errors, but 
 12.7492 +            ## do set a variable so people can do so.
 12.7493 +            $1_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "$2"`
 12.7494 +            ifelse([$4], ,echo $$1_PKG_ERRORS,)
 12.7495 +        fi
 12.7496 +
 12.7497 +        AC_SUBST($1_CFLAGS)
 12.7498 +        AC_SUBST($1_LIBS)
 12.7499 +     else
 12.7500 +        echo "*** Your version of pkg-config is too old. You need version $PKG_CONFIG_MIN_VERSION or newer."
 12.7501 +        echo "*** See http://www.freedesktop.org/software/pkgconfig"
 12.7502 +     fi
 12.7503 +  fi
 12.7504 +
 12.7505 +  if test $succeeded = yes; then
 12.7506 +     ifelse([$3], , :, [$3])
 12.7507 +  else
 12.7508 +     ifelse([$4], , AC_MSG_ERROR([Library requirements ($2) not met; consider adjusting the PKG_CONFIG_PATH environment variable if your libraries are in a nonstandard prefix so pkg-config can find them.]), [$4])
 12.7509 +  fi
 12.7510 +])
 12.7511 +
 12.7512 +
 12.7513 +
 12.7514 +
 12.7515 +dnl
 12.7516 +dnl Check for zlib in some bizarre locations...
 12.7517 +dnl
 12.7518 +AC_DEFUN([GIFT_PLUGIN_CHECK_ZLIB], 
 12.7519 +[
 12.7520 +   # set the minimum ZLIB_VER we're willing to link against...
 12.7521 +   ZLIB_VER=1.1.4
 12.7522 +
 12.7523 +   # for some reason Darwin has a 1.1.3 version with the 1.1.4 security fix
 12.7524 +   # applied backwards...
 12.7525 +   case "${host}" in
 12.7526 +   *-*-darwin* )
 12.7527 +     ZLIB_VER=1.1.3
 12.7528 +   ;;
 12.7529 +   esac
 12.7530 +
 12.7531 +   if test x"$OPT_ZLIB" = xno; then
 12.7532 +      zlib_ok=no
 12.7533 +   else
 12.7534 +      ZLIB_DIRS="$OPT_ZLIB /usr /usr/local /sw"
 12.7535 +      for ZLIB_DIR in $ZLIB_DIRS;
 12.7536 +      do
 12.7537 +         LIBS_SAVE="$LIBS"
 12.7538 +         CPPFLAGS_SAVE="$CPPFLAGS"
 12.7539 +         LIBS="$LIBS -L${ZLIB_DIR}/lib"
 12.7540 +         CPPFLAGS="$CPPFLAGS -I${ZLIB_DIR}/include"
 12.7541 +         AC_CACHE_CHECK(
 12.7542 +            [for zlib version ${ZLIB_VER}+ in ${ZLIB_DIR}],
 12.7543 +            zlib_ok,
 12.7544 +            AC_TRY_RUN(
 12.7545 +              [#include <zlib.h>
 12.7546 +               #include <string.h>
 12.7547 +               void main() {
 12.7548 +                 exit(strcmp(ZLIB_VERSION, "${ZLIB_VER}") < 0);
 12.7549 +               }
 12.7550 +               ],
 12.7551 +              [zlib_ok=yes],
 12.7552 +              [zlib_ok=no],
 12.7553 +              [zlib_ok=yes]))
 12.7554 +
 12.7555 +         if test "$zlib_ok" != "no"; then
 12.7556 +            AC_CHECK_FUNC(gzread, , AC_CHECK_LIB(z, gzread))
 12.7557 +            AC_DEFINE(USE_ZLIB)
 12.7558 +            AC_SUBST(USE_ZLIB)
 12.7559 +            break
 12.7560 +         fi
 12.7561 +         LIBS="$LIBS_SAVE"
 12.7562 +         CPPFLAGS="$CPPFLAGS_SAVE"
 12.7563 +      done
 12.7564 +
 12.7565 +      if test "$zlib_ok" = "no"; then
 12.7566 +         AC_MSG_ERROR([
 12.7567 +NOTE: The zlib compression library version ${ZLIB_VER} or greater was not found
 12.7568 +      on your system.
 12.7569 +
 12.7570 +      If zlib ${ZLIB_VER}+ is not installed, install it.
 12.7571 +         ])
 12.7572 +      fi
 12.7573 +   fi
 12.7574 +])
 12.7575 +
 12.7576 +
 12.7577 +AC_DEFUN([GIFT_GNUTELLA_CHECK_LIBXML],[
 12.7578 +   #
 12.7579 +   # Check on the user's PATH if no path was specified in OPT_LIBXML,
 12.7580 +   # when the user has passed --with-libxml without a directory,
 12.7581 +   # or check the directory if one was supplied.
 12.7582 +   #
 12.7583 +   if test x"$OPT_LIBXML" = xyes; then 
 12.7584 +      AC_PATH_PROG(XML2_CONFIG, xml2-config, [no])
 12.7585 +   else
 12.7586 +      XMLPATH="$OPT_LIBXML/bin"
 12.7587 +      AC_PATH_PROG(XML2_CONFIG, xml2-config, [no], [$XMLPATH])
 12.7588 +   fi
 12.7589 +
 12.7590 +   if test x"$XML2_CONFIG" != xno; then
 12.7591 +      LIBXML2_CFLAGS=`$XML2_CONFIG --cflags`
 12.7592 +      LIBXML2_LIBS=`$XML2_CONFIG --libs`
 12.7593 +
 12.7594 +      AC_SUBST(LIBXML2_CFLAGS) 
 12.7595 +      AC_SUBST(LIBXML2_LIBS) 
 12.7596 +      AC_DEFINE(USE_LIBXML2) 
 12.7597 +   else
 12.7598 +      AC_MSG_ERROR([
 12.7599 +Couldn't run ${OPT_LIBXML}/bin/xml2-config
 12.7600 +
 12.7601 +])
 12.7602 +   fi
 12.7603 +])
 12.7604 +
 12.7605 +
 12.7606 +AC_DEFUN([GIFT_PLUGIN_CHECK_PREFIX],[
 12.7607 +   libgift_prefix=`pkg-config --variable=prefix libgift`
 12.7608 +
 12.7609 +   gift_plugin_prefix=$prefix
 12.7610 +   if test x"$prefix" = xNONE; then
 12.7611 +      gift_plugin_prefix=/usr/local
 12.7612 +   fi
 12.7613 +
 12.7614 +   if test x"$libgift_prefix" != x"$gift_plugin_prefix"; then
 12.7615 +      AC_MSG_WARN([
 12.7616 +   You are trying to install in $gift_plugin_prefix, but I only
 12.7617 +   detected a giFT installation in $libgift_prefix. 
 12.7618 +   You may be installing in the wrong place.
 12.7619 +
 12.7620 +   You should probably supply --prefix=$libgift_prefix 
 12.7621 +   to configure. Or, if you have a giFT installation in
 12.7622 +   $gift_plugin_prefix, you could add ${gift_plugin_prefix}/lib/pkgconfig 
 12.7623 +   to the PKG_CONFIG_PATH environment variable, so I can detect it.
 12.7624 +])
 12.7625 +   fi
 12.7626 +])
 12.7627 +
    13.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    13.2 +++ b/autogen.sh	Sat Feb 20 21:18:28 2010 -0800
    13.3 @@ -0,0 +1,62 @@
    13.4 +#! /bin/sh
    13.5 +# Run this to generate all the initial makefiles, etc.
    13.6 +
    13.7 +# Stolen from the GNU Midnight Commander. Customized for giFTcurs. Stolen from
    13.8 +# giFTcurs. Customized for giFT. Stolen from giFT. Customized for OpenFT.
    13.9 +# Stolen from OpenFT.
   13.10 +
   13.11 +# Make it possible to specify path in the environment
   13.12 +: ${AUTOCONF=autoconf}
   13.13 +: ${AUTOHEADER=autoheader}
   13.14 +: ${AUTOMAKE=automake}
   13.15 +: ${ACLOCAL=aclocal}
   13.16 +: ${LIBTOOLIZE=libtoolize}
   13.17 +
   13.18 +srcdir=`dirname $0`
   13.19 +test -z "$srcdir" && srcdir=.
   13.20 +
   13.21 +(
   13.22 +cd $srcdir
   13.23 +
   13.24 +# The autoconf cache (version after 2.52) is not reliable yet.
   13.25 +rm -rf autom4te.cache
   13.26 +
   13.27 +rm -f aclocal.m4
   13.28 +ACLOCAL_INCLUDES="-I m4"
   13.29 +
   13.30 +# Some old version of GNU build tools fail to set error codes.
   13.31 +# Check that they generate some of the files they should.
   13.32 +
   13.33 +echo "Running $ACLOCAL..."
   13.34 +$ACLOCAL $ACLOCAL_INCLUDES $ACLOCAL_FLAGS || exit 1
   13.35 +test -f aclocal.m4 || \
   13.36 +  { echo "aclocal failed to generate aclocal.m4" 2>&1; exit 1; }
   13.37 +
   13.38 +echo "Running $AUTOHEADER..."
   13.39 +$AUTOHEADER || exit 1
   13.40 +test -f config.h.in || \
   13.41 +  { echo "autoheader failed to generate config.h.in" 2>&1; exit 1; }
   13.42 +
   13.43 +echo "Running $AUTOCONF..."
   13.44 +$AUTOCONF || exit 1
   13.45 +test -f configure || \
   13.46 +  { echo "autoconf failed to generate configure" 2>&1; exit 1; }
   13.47 +
   13.48 +# hack hack hack...i hate autotools.
   13.49 +echo "Running $LIBTOOLIZE --automake..."
   13.50 +$LIBTOOLIZE --automake || exit 1
   13.51 +test -f ltmain.sh || \
   13.52 +  { echo "libtoolize failed to generate ltmain.sh" 2>&1; exit 1; }
   13.53 +
   13.54 +# Workaround for Automake 1.5 to ensure that depcomp is distributed.
   13.55 +echo "Running $AUTOMAKE..."
   13.56 +$AUTOMAKE -a src/Makefile || exit 1
   13.57 +$AUTOMAKE -a || exit 1
   13.58 +test -f Makefile.in || \
   13.59 +  { echo "automake failed to generate Makefile.in" 2>&1; exit 1; }
   13.60 +
   13.61 +) || exit 1
   13.62 +
   13.63 +#conf_flags="--enable-maintainer-mode --enable-compile-warnings"
   13.64 +echo Running $srcdir/configure $conf_flags "$@" ...
   13.65 +$srcdir/configure --cache-file=config.cache $conf_flags "$@"
    14.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    14.2 +++ b/config.guess	Sat Feb 20 21:18:28 2010 -0800
    14.3 @@ -0,0 +1,1400 @@
    14.4 +#! /bin/sh
    14.5 +# Attempt to guess a canonical system name.
    14.6 +#   Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
    14.7 +#   2000, 2001, 2002 Free Software Foundation, Inc.
    14.8 +
    14.9 +timestamp='2002-11-30'
   14.10 +
   14.11 +# This file is free software; you can redistribute it and/or modify it
   14.12 +# under the terms of the GNU General Public License as published by
   14.13 +# the Free Software Foundation; either version 2 of the License, or
   14.14 +# (at your option) any later version.
   14.15 +#
   14.16 +# This program is distributed in the hope that it will be useful, but
   14.17 +# WITHOUT ANY WARRANTY; without even the implied warranty of
   14.18 +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
   14.19 +# General Public License for more details.
   14.20 +#
   14.21 +# You should have received a copy of the GNU General Public License
   14.22 +# along with this program; if not, write to the Free Software
   14.23 +# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
   14.24 +#
   14.25 +# As a special exception to the GNU General Public License, if you
   14.26 +# distribute this file as part of a program that contains a
   14.27 +# configuration script generated by Autoconf, you may include it under
   14.28 +# the same distribution terms that you use for the rest of that program.
   14.29 +
   14.30 +# Originally written by Per Bothner <per@bothner.com>.
   14.31 +# Please send patches to <config-patches@gnu.org>.  Submit a context
   14.32 +# diff and a properly formatted ChangeLog entry.
   14.33 +#
   14.34 +# This script attempts to guess a canonical system name similar to
   14.35 +# config.sub.  If it succeeds, it prints the system name on stdout, and
   14.36 +# exits with 0.  Otherwise, it exits with 1.
   14.37 +#
   14.38 +# The plan is that this can be called by configure scripts if you
   14.39 +# don't specify an explicit build system type.
   14.40 +
   14.41 +me=`echo "$0" | sed -e 's,.*/,,'`
   14.42 +
   14.43 +usage="\
   14.44 +Usage: $0 [OPTION]
   14.45 +
   14.46 +Output the configuration name of the system \`$me' is run on.
   14.47 +
   14.48 +Operation modes:
   14.49 +  -h, --help         print this help, then exit
   14.50 +  -t, --time-stamp   print date of last modification, then exit
   14.51 +  -v, --version      print version number, then exit
   14.52 +
   14.53 +Report bugs and patches to <config-patches@gnu.org>."
   14.54 +
   14.55 +version="\
   14.56 +GNU config.guess ($timestamp)
   14.57 +
   14.58 +Originally written by Per Bothner.
   14.59 +Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001
   14.60 +Free Software Foundation, Inc.
   14.61 +
   14.62 +This is free software; see the source for copying conditions.  There is NO
   14.63 +warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
   14.64 +
   14.65 +help="
   14.66 +Try \`$me --help' for more information."
   14.67 +
   14.68 +# Parse command line
   14.69 +while test $# -gt 0 ; do
   14.70 +  case $1 in
   14.71 +    --time-stamp | --time* | -t )
   14.72 +       echo "$timestamp" ; exit 0 ;;
   14.73 +    --version | -v )
   14.74 +       echo "$version" ; exit 0 ;;
   14.75 +    --help | --h* | -h )
   14.76 +       echo "$usage"; exit 0 ;;
   14.77 +    -- )     # Stop option processing
   14.78 +       shift; break ;;
   14.79 +    - )	# Use stdin as input.
   14.80 +       break ;;
   14.81 +    -* )
   14.82 +       echo "$me: invalid option $1$help" >&2
   14.83 +       exit 1 ;;
   14.84 +    * )
   14.85 +       break ;;
   14.86 +  esac
   14.87 +done
   14.88 +
   14.89 +if test $# != 0; then
   14.90 +  echo "$me: too many arguments$help" >&2
   14.91 +  exit 1
   14.92 +fi
   14.93 +
   14.94 +trap 'exit 1' 1 2 15
   14.95 +
   14.96 +# CC_FOR_BUILD -- compiler used by this script. Note that the use of a
   14.97 +# compiler to aid in system detection is discouraged as it requires
   14.98 +# temporary files to be created and, as you can see below, it is a
   14.99 +# headache to deal with in a portable fashion.
  14.100 +
  14.101 +# Historically, `CC_FOR_BUILD' used to be named `HOST_CC'. We still
  14.102 +# use `HOST_CC' if defined, but it is deprecated.
  14.103 +
  14.104 +# This shell variable is my proudest work .. or something. --bje
  14.105 +
  14.106 +set_cc_for_build='tmpdir=${TMPDIR-/tmp}/config-guess-$$ ;
  14.107 +(old=`umask` && umask 077 && mkdir $tmpdir && umask $old && unset old)
  14.108 +   || (echo "$me: cannot create $tmpdir" >&2 && exit 1) ;
  14.109 +dummy=$tmpdir/dummy ;
  14.110 +files="$dummy.c $dummy.o $dummy.rel $dummy" ;
  14.111 +trap '"'"'rm -f $files; rmdir $tmpdir; exit 1'"'"' 1 2 15 ;
  14.112 +case $CC_FOR_BUILD,$HOST_CC,$CC in
  14.113 + ,,)    echo "int x;" > $dummy.c ;
  14.114 +	for c in cc gcc c89 c99 ; do
  14.115 +	  if ($c -c -o $dummy.o $dummy.c) >/dev/null 2>&1 ; then
  14.116 +	     CC_FOR_BUILD="$c"; break ;
  14.117 +	  fi ;
  14.118 +	done ;
  14.119 +	rm -f $files ;
  14.120 +	if test x"$CC_FOR_BUILD" = x ; then
  14.121 +	  CC_FOR_BUILD=no_compiler_found ;
  14.122 +	fi
  14.123 +	;;
  14.124 + ,,*)   CC_FOR_BUILD=$CC ;;
  14.125 + ,*,*)  CC_FOR_BUILD=$HOST_CC ;;
  14.126 +esac ;
  14.127 +unset files'
  14.128 +
  14.129 +# This is needed to find uname on a Pyramid OSx when run in the BSD universe.
  14.130 +# (ghazi@noc.rutgers.edu 1994-08-24)
  14.131 +if (test -f /.attbin/uname) >/dev/null 2>&1 ; then
  14.132 +	PATH=$PATH:/.attbin ; export PATH
  14.133 +fi
  14.134 +
  14.135 +UNAME_MACHINE=`(uname -m) 2>/dev/null` || UNAME_MACHINE=unknown
  14.136 +UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown
  14.137 +UNAME_SYSTEM=`(uname -s) 2>/dev/null`  || UNAME_SYSTEM=unknown
  14.138 +UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown
  14.139 +
  14.140 +# Note: order is significant - the case branches are not exclusive.
  14.141 +
  14.142 +case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
  14.143 +    *:NetBSD:*:*)
  14.144 +	# NetBSD (nbsd) targets should (where applicable) match one or
  14.145 +	# more of the tupples: *-*-netbsdelf*, *-*-netbsdaout*,
  14.146 +	# *-*-netbsdecoff* and *-*-netbsd*.  For targets that recently
  14.147 +	# switched to ELF, *-*-netbsd* would select the old
  14.148 +	# object file format.  This provides both forward
  14.149 +	# compatibility and a consistent mechanism for selecting the
  14.150 +	# object file format.
  14.151 +	#
  14.152 +	# Note: NetBSD doesn't particularly care about the vendor
  14.153 +	# portion of the name.  We always set it to "unknown".
  14.154 +	sysctl="sysctl -n hw.machine_arch"
  14.155 +	UNAME_MACHINE_ARCH=`(/sbin/$sysctl 2>/dev/null || \
  14.156 +	    /usr/sbin/$sysctl 2>/dev/null || echo unknown)`
  14.157 +	case "${UNAME_MACHINE_ARCH}" in
  14.158 +	    armeb) machine=armeb-unknown ;;
  14.159 +	    arm*) machine=arm-unknown ;;
  14.160 +	    sh3el) machine=shl-unknown ;;
  14.161 +	    sh3eb) machine=sh-unknown ;;
  14.162 +	    *) machine=${UNAME_MACHINE_ARCH}-unknown ;;
  14.163 +	esac
  14.164 +	# The Operating System including object format, if it has switched
  14.165 +	# to ELF recently, or will in the future.
  14.166 +	case "${UNAME_MACHINE_ARCH}" in
  14.167 +	    arm*|i386|m68k|ns32k|sh3*|sparc|vax)
  14.168 +		eval $set_cc_for_build
  14.169 +		if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \
  14.170 +			| grep __ELF__ >/dev/null
  14.171 +		then
  14.172 +		    # Once all utilities can be ECOFF (netbsdecoff) or a.out (netbsdaout).
  14.173 +		    # Return netbsd for either.  FIX?
  14.174 +		    os=netbsd
  14.175 +		else
  14.176 +		    os=netbsdelf
  14.177 +		fi
  14.178 +		;;
  14.179 +	    *)
  14.180 +	        os=netbsd
  14.181 +		;;
  14.182 +	esac
  14.183 +	# The OS release
  14.184 +	# Debian GNU/NetBSD machines have a different userland, and
  14.185 +	# thus, need a distinct triplet. However, they do not need
  14.186 +	# kernel version information, so it can be replaced with a
  14.187 +	# suitable tag, in the style of linux-gnu.
  14.188 +	case "${UNAME_VERSION}" in
  14.189 +	    Debian*)
  14.190 +		release='-gnu'
  14.191 +		;;
  14.192 +	    *)
  14.193 +		release=`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'`
  14.194 +		;;
  14.195 +	esac
  14.196 +	# Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM:
  14.197 +	# contains redundant information, the shorter form:
  14.198 +	# CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used.
  14.199 +	echo "${machine}-${os}${release}"
  14.200 +	exit 0 ;;
  14.201 +    amiga:OpenBSD:*:*)
  14.202 +	echo m68k-unknown-openbsd${UNAME_RELEASE}
  14.203 +	exit 0 ;;
  14.204 +    arc:OpenBSD:*:*)
  14.205 +	echo mipsel-unknown-openbsd${UNAME_RELEASE}
  14.206 +	exit 0 ;;
  14.207 +    hp300:OpenBSD:*:*)
  14.208 +	echo m68k-unknown-openbsd${UNAME_RELEASE}
  14.209 +	exit 0 ;;
  14.210 +    mac68k:OpenBSD:*:*)
  14.211 +	echo m68k-unknown-openbsd${UNAME_RELEASE}
  14.212 +	exit 0 ;;
  14.213 +    macppc:OpenBSD:*:*)
  14.214 +	echo powerpc-unknown-openbsd${UNAME_RELEASE}
  14.215 +	exit 0 ;;
  14.216 +    mvme68k:OpenBSD:*:*)
  14.217 +	echo m68k-unknown-openbsd${UNAME_RELEASE}
  14.218 +	exit 0 ;;
  14.219 +    mvme88k:OpenBSD:*:*)
  14.220 +	echo m88k-unknown-openbsd${UNAME_RELEASE}
  14.221 +	exit 0 ;;
  14.222 +    mvmeppc:OpenBSD:*:*)
  14.223 +	echo powerpc-unknown-openbsd${UNAME_RELEASE}
  14.224 +	exit 0 ;;
  14.225 +    pmax:OpenBSD:*:*)
  14.226 +	echo mipsel-unknown-openbsd${UNAME_RELEASE}
  14.227 +	exit 0 ;;
  14.228 +    sgi:OpenBSD:*:*)
  14.229 +	echo mipseb-unknown-openbsd${UNAME_RELEASE}
  14.230 +	exit 0 ;;
  14.231 +    sun3:OpenBSD:*:*)
  14.232 +	echo m68k-unknown-openbsd${UNAME_RELEASE}
  14.233 +	exit 0 ;;
  14.234 +    wgrisc:OpenBSD:*:*)
  14.235 +	echo mipsel-unknown-openbsd${UNAME_RELEASE}
  14.236 +	exit 0 ;;
  14.237 +    *:OpenBSD:*:*)
  14.238 +	echo ${UNAME_MACHINE}-unknown-openbsd${UNAME_RELEASE}
  14.239 +	exit 0 ;;
  14.240 +    alpha:OSF1:*:*)
  14.241 +	if test $UNAME_RELEASE = "V4.0"; then
  14.242 +		UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'`
  14.243 +	fi
  14.244 +	# A Vn.n version is a released version.
  14.245 +	# A Tn.n version is a released field test version.
  14.246 +	# A Xn.n version is an unreleased experimental baselevel.
  14.247 +	# 1.2 uses "1.2" for uname -r.
  14.248 +	eval $set_cc_for_build
  14.249 +	cat <<EOF >$dummy.s
  14.250 +	.data
  14.251 +\$Lformat:
  14.252 +	.byte 37,100,45,37,120,10,0	# "%d-%x\n"
  14.253 +
  14.254 +	.text
  14.255 +	.globl main
  14.256 +	.align 4
  14.257 +	.ent main
  14.258 +main:
  14.259 +	.frame \$30,16,\$26,0
  14.260 +	ldgp \$29,0(\$27)
  14.261 +	.prologue 1
  14.262 +	.long 0x47e03d80 # implver \$0
  14.263 +	lda \$2,-1
  14.264 +	.long 0x47e20c21 # amask \$2,\$1
  14.265 +	lda \$16,\$Lformat
  14.266 +	mov \$0,\$17
  14.267 +	not \$1,\$18
  14.268 +	jsr \$26,printf
  14.269 +	ldgp \$29,0(\$26)
  14.270 +	mov 0,\$16
  14.271 +	jsr \$26,exit
  14.272 +	.end main
  14.273 +EOF
  14.274 +	$CC_FOR_BUILD -o $dummy $dummy.s 2>/dev/null
  14.275 +	if test "$?" = 0 ; then
  14.276 +		case `$dummy` in
  14.277 +			0-0)
  14.278 +				UNAME_MACHINE="alpha"
  14.279 +				;;
  14.280 +			1-0)
  14.281 +				UNAME_MACHINE="alphaev5"
  14.282 +				;;
  14.283 +			1-1)
  14.284 +				UNAME_MACHINE="alphaev56"
  14.285 +				;;
  14.286 +			1-101)
  14.287 +				UNAME_MACHINE="alphapca56"
  14.288 +				;;
  14.289 +			2-303)
  14.290 +				UNAME_MACHINE="alphaev6"
  14.291 +				;;
  14.292 +			2-307)
  14.293 +				UNAME_MACHINE="alphaev67"
  14.294 +				;;
  14.295 +			2-1307)
  14.296 +				UNAME_MACHINE="alphaev68"
  14.297 +				;;
  14.298 +			3-1307)
  14.299 +				UNAME_MACHINE="alphaev7"
  14.300 +				;;
  14.301 +		esac
  14.302 +	fi
  14.303 +	rm -f $dummy.s $dummy && rmdir $tmpdir
  14.304 +	echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[VTX]//' | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'`
  14.305 +	exit 0 ;;
  14.306 +    Alpha\ *:Windows_NT*:*)
  14.307 +	# How do we know it's Interix rather than the generic POSIX subsystem?
  14.308 +	# Should we change UNAME_MACHINE based on the output of uname instead
  14.309 +	# of the specific Alpha model?
  14.310 +	echo alpha-pc-interix
  14.311 +	exit 0 ;;
  14.312 +    21064:Windows_NT:50:3)
  14.313 +	echo alpha-dec-winnt3.5
  14.314 +	exit 0 ;;
  14.315 +    Amiga*:UNIX_System_V:4.0:*)
  14.316 +	echo m68k-unknown-sysv4
  14.317 +	exit 0;;
  14.318 +    *:[Aa]miga[Oo][Ss]:*:*)
  14.319 +	echo ${UNAME_MACHINE}-unknown-amigaos
  14.320 +	exit 0 ;;
  14.321 +    *:[Mm]orph[Oo][Ss]:*:*)
  14.322 +	echo ${UNAME_MACHINE}-unknown-morphos
  14.323 +	exit 0 ;;
  14.324 +    *:OS/390:*:*)
  14.325 +	echo i370-ibm-openedition
  14.326 +	exit 0 ;;
  14.327 +    arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*)
  14.328 +	echo arm-acorn-riscix${UNAME_RELEASE}
  14.329 +	exit 0;;
  14.330 +    SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*)
  14.331 +	echo hppa1.1-hitachi-hiuxmpp
  14.332 +	exit 0;;
  14.333 +    Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*)
  14.334 +	# akee@wpdis03.wpafb.af.mil (Earle F. Ake) contributed MIS and NILE.
  14.335 +	if test "`(/bin/universe) 2>/dev/null`" = att ; then
  14.336 +		echo pyramid-pyramid-sysv3
  14.337 +	else
  14.338 +		echo pyramid-pyramid-bsd
  14.339 +	fi
  14.340 +	exit 0 ;;
  14.341 +    NILE*:*:*:dcosx)
  14.342 +	echo pyramid-pyramid-svr4
  14.343 +	exit 0 ;;
  14.344 +    DRS?6000:UNIX_SV:4.2*:7*)
  14.345 +	case `/usr/bin/uname -p` in
  14.346 +	    sparc) echo sparc-icl-nx7 && exit 0 ;;
  14.347 +	esac ;;
  14.348 +    sun4H:SunOS:5.*:*)
  14.349 +	echo sparc-hal-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
  14.350 +	exit 0 ;;
  14.351 +    sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*)
  14.352 +	echo sparc-sun-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
  14.353 +	exit 0 ;;
  14.354 +    i86pc:SunOS:5.*:*)
  14.355 +	echo i386-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
  14.356 +	exit 0 ;;
  14.357 +    sun4*:SunOS:6*:*)
  14.358 +	# According to config.sub, this is the proper way to canonicalize
  14.359 +	# SunOS6.  Hard to guess exactly what SunOS6 will be like, but
  14.360 +	# it's likely to be more like Solaris than SunOS4.
  14.361 +	echo sparc-sun-solaris3`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
  14.362 +	exit 0 ;;
  14.363 +    sun4*:SunOS:*:*)
  14.364 +	case "`/usr/bin/arch -k`" in
  14.365 +	    Series*|S4*)
  14.366 +		UNAME_RELEASE=`uname -v`
  14.367 +		;;
  14.368 +	esac
  14.369 +	# Japanese Language versions have a version number like `4.1.3-JL'.
  14.370 +	echo sparc-sun-sunos`echo ${UNAME_RELEASE}|sed -e 's/-/_/'`
  14.371 +	exit 0 ;;
  14.372 +    sun3*:SunOS:*:*)
  14.373 +	echo m68k-sun-sunos${UNAME_RELEASE}
  14.374 +	exit 0 ;;
  14.375 +    sun*:*:4.2BSD:*)
  14.376 +	UNAME_RELEASE=`(sed 1q /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null`
  14.377 +	test "x${UNAME_RELEASE}" = "x" && UNAME_RELEASE=3
  14.378 +	case "`/bin/arch`" in
  14.379 +	    sun3)
  14.380 +		echo m68k-sun-sunos${UNAME_RELEASE}
  14.381 +		;;
  14.382 +	    sun4)
  14.383 +		echo sparc-sun-sunos${UNAME_RELEASE}
  14.384 +		;;
  14.385 +	esac
  14.386 +	exit 0 ;;
  14.387 +    aushp:SunOS:*:*)
  14.388 +	echo sparc-auspex-sunos${UNAME_RELEASE}
  14.389 +	exit 0 ;;
  14.390 +    # The situation for MiNT is a little confusing.  The machine name
  14.391 +    # can be virtually everything (everything which is not
  14.392 +    # "atarist" or "atariste" at least should have a processor
  14.393 +    # > m68000).  The system name ranges from "MiNT" over "FreeMiNT"
  14.394 +    # to the lowercase version "mint" (or "freemint").  Finally
  14.395 +    # the system name "TOS" denotes a system which is actually not
  14.396 +    # MiNT.  But MiNT is downward compatible to TOS, so this should
  14.397 +    # be no problem.
  14.398 +    atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*)
  14.399 +        echo m68k-atari-mint${UNAME_RELEASE}
  14.400 +	exit 0 ;;
  14.401 +    atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*)
  14.402 +	echo m68k-atari-mint${UNAME_RELEASE}
  14.403 +        exit 0 ;;
  14.404 +    *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*)
  14.405 +        echo m68k-atari-mint${UNAME_RELEASE}
  14.406 +	exit 0 ;;
  14.407 +    milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*)
  14.408 +        echo m68k-milan-mint${UNAME_RELEASE}
  14.409 +        exit 0 ;;
  14.410 +    hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*)
  14.411 +        echo m68k-hades-mint${UNAME_RELEASE}
  14.412 +        exit 0 ;;
  14.413 +    *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*)
  14.414 +        echo m68k-unknown-mint${UNAME_RELEASE}
  14.415 +        exit 0 ;;
  14.416 +    powerpc:machten:*:*)
  14.417 +	echo powerpc-apple-machten${UNAME_RELEASE}
  14.418 +	exit 0 ;;
  14.419 +    RISC*:Mach:*:*)
  14.420 +	echo mips-dec-mach_bsd4.3
  14.421 +	exit 0 ;;
  14.422 +    RISC*:ULTRIX:*:*)
  14.423 +	echo mips-dec-ultrix${UNAME_RELEASE}
  14.424 +	exit 0 ;;
  14.425 +    VAX*:ULTRIX*:*:*)
  14.426 +	echo vax-dec-ultrix${UNAME_RELEASE}
  14.427 +	exit 0 ;;
  14.428 +    2020:CLIX:*:* | 2430:CLIX:*:*)
  14.429 +	echo clipper-intergraph-clix${UNAME_RELEASE}
  14.430 +	exit 0 ;;
  14.431 +    mips:*:*:UMIPS | mips:*:*:RISCos)
  14.432 +	eval $set_cc_for_build
  14.433 +	sed 's/^	//' << EOF >$dummy.c
  14.434 +#ifdef __cplusplus
  14.435 +#include <stdio.h>  /* for printf() prototype */
  14.436 +	int main (int argc, char *argv[]) {
  14.437 +#else
  14.438 +	int main (argc, argv) int argc; char *argv[]; {
  14.439 +#endif
  14.440 +	#if defined (host_mips) && defined (MIPSEB)
  14.441 +	#if defined (SYSTYPE_SYSV)
  14.442 +	  printf ("mips-mips-riscos%ssysv\n", argv[1]); exit (0);
  14.443 +	#endif
  14.444 +	#if defined (SYSTYPE_SVR4)
  14.445 +	  printf ("mips-mips-riscos%ssvr4\n", argv[1]); exit (0);
  14.446 +	#endif
  14.447 +	#if defined (SYSTYPE_BSD43) || defined(SYSTYPE_BSD)
  14.448 +	  printf ("mips-mips-riscos%sbsd\n", argv[1]); exit (0);
  14.449 +	#endif
  14.450 +	#endif
  14.451 +	  exit (-1);
  14.452 +	}
  14.453 +EOF
  14.454 +	$CC_FOR_BUILD -o $dummy $dummy.c \
  14.455 +	  && $dummy `echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` \
  14.456 +	  && rm -f $dummy.c $dummy && rmdir $tmpdir && exit 0
  14.457 +	rm -f $dummy.c $dummy && rmdir $tmpdir
  14.458 +	echo mips-mips-riscos${UNAME_RELEASE}
  14.459 +	exit 0 ;;
  14.460 +    Motorola:PowerMAX_OS:*:*)
  14.461 +	echo powerpc-motorola-powermax
  14.462 +	exit 0 ;;
  14.463 +    Motorola:*:4.3:PL8-*)
  14.464 +	echo powerpc-harris-powermax
  14.465 +	exit 0 ;;
  14.466 +    Night_Hawk:*:*:PowerMAX_OS | Synergy:PowerMAX_OS:*:*)
  14.467 +	echo powerpc-harris-powermax
  14.468 +	exit 0 ;;
  14.469 +    Night_Hawk:Power_UNIX:*:*)
  14.470 +	echo powerpc-harris-powerunix
  14.471 +	exit 0 ;;
  14.472 +    m88k:CX/UX:7*:*)
  14.473 +	echo m88k-harris-cxux7
  14.474 +	exit 0 ;;
  14.475 +    m88k:*:4*:R4*)
  14.476 +	echo m88k-motorola-sysv4
  14.477 +	exit 0 ;;
  14.478 +    m88k:*:3*:R3*)
  14.479 +	echo m88k-motorola-sysv3
  14.480 +	exit 0 ;;
  14.481 +    AViiON:dgux:*:*)
  14.482 +        # DG/UX returns AViiON for all architectures
  14.483 +        UNAME_PROCESSOR=`/usr/bin/uname -p`
  14.484 +	if [ $UNAME_PROCESSOR = mc88100 ] || [ $UNAME_PROCESSOR = mc88110 ]
  14.485 +	then
  14.486 +	    if [ ${TARGET_BINARY_INTERFACE}x = m88kdguxelfx ] || \
  14.487 +	       [ ${TARGET_BINARY_INTERFACE}x = x ]
  14.488 +	    then
  14.489 +		echo m88k-dg-dgux${UNAME_RELEASE}
  14.490 +	    else
  14.491 +		echo m88k-dg-dguxbcs${UNAME_RELEASE}
  14.492 +	    fi
  14.493 +	else
  14.494 +	    echo i586-dg-dgux${UNAME_RELEASE}
  14.495 +	fi
  14.496 + 	exit 0 ;;
  14.497 +    M88*:DolphinOS:*:*)	# DolphinOS (SVR3)
  14.498 +	echo m88k-dolphin-sysv3
  14.499 +	exit 0 ;;
  14.500 +    M88*:*:R3*:*)
  14.501 +	# Delta 88k system running SVR3
  14.502 +	echo m88k-motorola-sysv3
  14.503 +	exit 0 ;;
  14.504 +    XD88*:*:*:*) # Tektronix XD88 system running UTekV (SVR3)
  14.505 +	echo m88k-tektronix-sysv3
  14.506 +	exit 0 ;;
  14.507 +    Tek43[0-9][0-9]:UTek:*:*) # Tektronix 4300 system running UTek (BSD)
  14.508 +	echo m68k-tektronix-bsd
  14.509 +	exit 0 ;;
  14.510 +    *:IRIX*:*:*)
  14.511 +	echo mips-sgi-irix`echo ${UNAME_RELEASE}|sed -e 's/-/_/g'`
  14.512 +	exit 0 ;;
  14.513 +    ????????:AIX?:[12].1:2)   # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX.
  14.514 +	echo romp-ibm-aix      # uname -m gives an 8 hex-code CPU id
  14.515 +	exit 0 ;;              # Note that: echo "'`uname -s`'" gives 'AIX '
  14.516 +    i*86:AIX:*:*)
  14.517 +	echo i386-ibm-aix
  14.518 +	exit 0 ;;
  14.519 +    ia64:AIX:*:*)
  14.520 +	if [ -x /usr/bin/oslevel ] ; then
  14.521 +		IBM_REV=`/usr/bin/oslevel`
  14.522 +	else
  14.523 +		IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE}
  14.524 +	fi
  14.525 +	echo ${UNAME_MACHINE}-ibm-aix${IBM_REV}
  14.526 +	exit 0 ;;
  14.527 +    *:AIX:2:3)
  14.528 +	if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then
  14.529 +		eval $set_cc_for_build
  14.530 +		sed 's/^		//' << EOF >$dummy.c
  14.531 +		#include <sys/systemcfg.h>
  14.532 +
  14.533 +		main()
  14.534 +			{
  14.535 +			if (!__power_pc())
  14.536 +				exit(1);
  14.537 +			puts("powerpc-ibm-aix3.2.5");
  14.538 +			exit(0);
  14.539 +			}
  14.540 +EOF
  14.541 +		$CC_FOR_BUILD -o $dummy $dummy.c && $dummy && rm -f $dummy.c $dummy && rmdir $tmpdir && exit 0
  14.542 +		rm -f $dummy.c $dummy && rmdir $tmpdir
  14.543 +		echo rs6000-ibm-aix3.2.5
  14.544 +	elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then
  14.545 +		echo rs6000-ibm-aix3.2.4
  14.546 +	else
  14.547 +		echo rs6000-ibm-aix3.2
  14.548 +	fi
  14.549 +	exit 0 ;;
  14.550 +    *:AIX:*:[45])
  14.551 +	IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }'`
  14.552 +	if /usr/sbin/lsattr -El ${IBM_CPU_ID} | grep ' POWER' >/dev/null 2>&1; then
  14.553 +		IBM_ARCH=rs6000
  14.554 +	else
  14.555 +		IBM_ARCH=powerpc
  14.556 +	fi
  14.557 +	if [ -x /usr/bin/oslevel ] ; then
  14.558 +		IBM_REV=`/usr/bin/oslevel`
  14.559 +	else
  14.560 +		IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE}
  14.561 +	fi
  14.562 +	echo ${IBM_ARCH}-ibm-aix${IBM_REV}
  14.563 +	exit 0 ;;
  14.564 +    *:AIX:*:*)
  14.565 +	echo rs6000-ibm-aix
  14.566 +	exit 0 ;;
  14.567 +    ibmrt:4.4BSD:*|romp-ibm:BSD:*)
  14.568 +	echo romp-ibm-bsd4.4
  14.569 +	exit 0 ;;
  14.570 +    ibmrt:*BSD:*|romp-ibm:BSD:*)            # covers RT/PC BSD and
  14.571 +	echo romp-ibm-bsd${UNAME_RELEASE}   # 4.3 with uname added to
  14.572 +	exit 0 ;;                           # report: romp-ibm BSD 4.3
  14.573 +    *:BOSX:*:*)
  14.574 +	echo rs6000-bull-bosx
  14.575 +	exit 0 ;;
  14.576 +    DPX/2?00:B.O.S.:*:*)
  14.577 +	echo m68k-bull-sysv3
  14.578 +	exit 0 ;;
  14.579 +    9000/[34]??:4.3bsd:1.*:*)
  14.580 +	echo m68k-hp-bsd
  14.581 +	exit 0 ;;
  14.582 +    hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*)
  14.583 +	echo m68k-hp-bsd4.4
  14.584 +	exit 0 ;;
  14.585 +    9000/[34678]??:HP-UX:*:*)
  14.586 +	HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'`
  14.587 +	case "${UNAME_MACHINE}" in
  14.588 +	    9000/31? )            HP_ARCH=m68000 ;;
  14.589 +	    9000/[34]?? )         HP_ARCH=m68k ;;
  14.590 +	    9000/[678][0-9][0-9])
  14.591 +		if [ -x /usr/bin/getconf ]; then
  14.592 +		    sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null`
  14.593 +                    sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null`
  14.594 +                    case "${sc_cpu_version}" in
  14.595 +                      523) HP_ARCH="hppa1.0" ;; # CPU_PA_RISC1_0
  14.596 +                      528) HP_ARCH="hppa1.1" ;; # CPU_PA_RISC1_1
  14.597 +                      532)                      # CPU_PA_RISC2_0
  14.598 +                        case "${sc_kernel_bits}" in
  14.599 +                          32) HP_ARCH="hppa2.0n" ;;
  14.600 +                          64) HP_ARCH="hppa2.0w" ;;
  14.601 +			  '') HP_ARCH="hppa2.0" ;;   # HP-UX 10.20
  14.602 +                        esac ;;
  14.603 +                    esac
  14.604 +		fi
  14.605 +		if [ "${HP_ARCH}" = "" ]; then
  14.606 +		    eval $set_cc_for_build
  14.607 +		    sed 's/^              //' << EOF >$dummy.c
  14.608 +
  14.609 +              #define _HPUX_SOURCE
  14.610 +              #include <stdlib.h>
  14.611 +              #include <unistd.h>
  14.612 +
  14.613 +              int main ()
  14.614 +              {
  14.615 +              #if defined(_SC_KERNEL_BITS)
  14.616 +                  long bits = sysconf(_SC_KERNEL_BITS);
  14.617 +              #endif
  14.618 +                  long cpu  = sysconf (_SC_CPU_VERSION);
  14.619 +
  14.620 +                  switch (cpu)
  14.621 +              	{
  14.622 +              	case CPU_PA_RISC1_0: puts ("hppa1.0"); break;
  14.623 +              	case CPU_PA_RISC1_1: puts ("hppa1.1"); break;
  14.624 +              	case CPU_PA_RISC2_0:
  14.625 +              #if defined(_SC_KERNEL_BITS)
  14.626 +              	    switch (bits)
  14.627 +              		{
  14.628 +              		case 64: puts ("hppa2.0w"); break;
  14.629 +              		case 32: puts ("hppa2.0n"); break;
  14.630 +              		default: puts ("hppa2.0"); break;
  14.631 +              		} break;
  14.632 +              #else  /* !defined(_SC_KERNEL_BITS) */
  14.633 +              	    puts ("hppa2.0"); break;
  14.634 +              #endif
  14.635 +              	default: puts ("hppa1.0"); break;
  14.636 +              	}
  14.637 +                  exit (0);
  14.638 +              }
  14.639 +EOF
  14.640 +		    (CCOPTS= $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null) && HP_ARCH=`$dummy`
  14.641 +		    if test -z "$HP_ARCH"; then HP_ARCH=hppa; fi
  14.642 +		    rm -f $dummy.c $dummy && rmdir $tmpdir
  14.643 +		fi ;;
  14.644 +	esac
  14.645 +	echo ${HP_ARCH}-hp-hpux${HPUX_REV}
  14.646 +	exit 0 ;;
  14.647 +    ia64:HP-UX:*:*)
  14.648 +	HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'`
  14.649 +	echo ia64-hp-hpux${HPUX_REV}
  14.650 +	exit 0 ;;
  14.651 +    3050*:HI-UX:*:*)
  14.652 +	eval $set_cc_for_build
  14.653 +	sed 's/^	//' << EOF >$dummy.c
  14.654 +	#include <unistd.h>
  14.655 +	int
  14.656 +	main ()
  14.657 +	{
  14.658 +	  long cpu = sysconf (_SC_CPU_VERSION);
  14.659 +	  /* The order matters, because CPU_IS_HP_MC68K erroneously returns
  14.660 +	     true for CPU_PA_RISC1_0.  CPU_IS_PA_RISC returns correct
  14.661 +	     results, however.  */
  14.662 +	  if (CPU_IS_PA_RISC (cpu))
  14.663 +	    {
  14.664 +	      switch (cpu)
  14.665 +		{
  14.666 +		  case CPU_PA_RISC1_0: puts ("hppa1.0-hitachi-hiuxwe2"); break;
  14.667 +		  case CPU_PA_RISC1_1: puts ("hppa1.1-hitachi-hiuxwe2"); break;
  14.668 +		  case CPU_PA_RISC2_0: puts ("hppa2.0-hitachi-hiuxwe2"); break;
  14.669 +		  default: puts ("hppa-hitachi-hiuxwe2"); break;
  14.670 +		}
  14.671 +	    }
  14.672 +	  else if (CPU_IS_HP_MC68K (cpu))
  14.673 +	    puts ("m68k-hitachi-hiuxwe2");
  14.674 +	  else puts ("unknown-hitachi-hiuxwe2");
  14.675 +	  exit (0);
  14.676 +	}
  14.677 +EOF
  14.678 +	$CC_FOR_BUILD -o $dummy $dummy.c && $dummy && rm -f $dummy.c $dummy && rmdir $tmpdir && exit 0
  14.679 +	rm -f $dummy.c $dummy && rmdir $tmpdir
  14.680 +	echo unknown-hitachi-hiuxwe2
  14.681 +	exit 0 ;;
  14.682 +    9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:* )
  14.683 +	echo hppa1.1-hp-bsd
  14.684 +	exit 0 ;;
  14.685 +    9000/8??:4.3bsd:*:*)
  14.686 +	echo hppa1.0-hp-bsd
  14.687 +	exit 0 ;;
  14.688 +    *9??*:MPE/iX:*:* | *3000*:MPE/iX:*:*)
  14.689 +	echo hppa1.0-hp-mpeix
  14.690 +	exit 0 ;;
  14.691 +    hp7??:OSF1:*:* | hp8?[79]:OSF1:*:* )
  14.692 +	echo hppa1.1-hp-osf
  14.693 +	exit 0 ;;
  14.694 +    hp8??:OSF1:*:*)
  14.695 +	echo hppa1.0-hp-osf
  14.696 +	exit 0 ;;
  14.697 +    i*86:OSF1:*:*)
  14.698 +	if [ -x /usr/sbin/sysversion ] ; then
  14.699 +	    echo ${UNAME_MACHINE}-unknown-osf1mk
  14.700 +	else
  14.701 +	    echo ${UNAME_MACHINE}-unknown-osf1
  14.702 +	fi
  14.703 +	exit 0 ;;
  14.704 +    parisc*:Lites*:*:*)
  14.705 +	echo hppa1.1-hp-lites
  14.706 +	exit 0 ;;
  14.707 +    C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*)
  14.708 +	echo c1-convex-bsd
  14.709 +        exit 0 ;;
  14.710 +    C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*)
  14.711 +	if getsysinfo -f scalar_acc
  14.712 +	then echo c32-convex-bsd
  14.713 +	else echo c2-convex-bsd
  14.714 +	fi
  14.715 +        exit 0 ;;
  14.716 +    C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*)
  14.717 +	echo c34-convex-bsd
  14.718 +        exit 0 ;;
  14.719 +    C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*)
  14.720 +	echo c38-convex-bsd
  14.721 +        exit 0 ;;
  14.722 +    C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*)
  14.723 +	echo c4-convex-bsd
  14.724 +        exit 0 ;;
  14.725 +    CRAY*Y-MP:*:*:*)
  14.726 +	echo ymp-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
  14.727 +	exit 0 ;;
  14.728 +    CRAY*[A-Z]90:*:*:*)
  14.729 +	echo ${UNAME_MACHINE}-cray-unicos${UNAME_RELEASE} \
  14.730 +	| sed -e 's/CRAY.*\([A-Z]90\)/\1/' \
  14.731 +	      -e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/ \
  14.732 +	      -e 's/\.[^.]*$/.X/'
  14.733 +	exit 0 ;;
  14.734 +    CRAY*TS:*:*:*)
  14.735 +	echo t90-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
  14.736 +	exit 0 ;;
  14.737 +    CRAY*T3D:*:*:*)
  14.738 +	echo alpha-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
  14.739 +	exit 0 ;;
  14.740 +    CRAY*T3E:*:*:*)
  14.741 +	echo alphaev5-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
  14.742 +	exit 0 ;;
  14.743 +    CRAY*SV1:*:*:*)
  14.744 +	echo sv1-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
  14.745 +	exit 0 ;;
  14.746 +    F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*)
  14.747 +	FUJITSU_PROC=`uname -m | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'`
  14.748 +        FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'`
  14.749 +        FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'`
  14.750 +        echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}"
  14.751 +        exit 0 ;;
  14.752 +    i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*)
  14.753 +	echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE}
  14.754 +	exit 0 ;;
  14.755 +    sparc*:BSD/OS:*:*)
  14.756 +	echo sparc-unknown-bsdi${UNAME_RELEASE}
  14.757 +	exit 0 ;;
  14.758 +    *:BSD/OS:*:*)
  14.759 +	echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE}
  14.760 +	exit 0 ;;
  14.761 +    *:FreeBSD:*:*)
  14.762 +	# Determine whether the default compiler uses glibc.
  14.763 +	eval $set_cc_for_build
  14.764 +	sed 's/^	//' << EOF >$dummy.c
  14.765 +	#include <features.h>
  14.766 +	#if __GLIBC__ >= 2
  14.767 +	LIBC=gnu
  14.768 +	#else
  14.769 +	LIBC=
  14.770 +	#endif
  14.771 +EOF
  14.772 +	eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep ^LIBC=`
  14.773 +	rm -f $dummy.c && rmdir $tmpdir
  14.774 +	echo ${UNAME_MACHINE}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`${LIBC:+-$LIBC}
  14.775 +	exit 0 ;;
  14.776 +    i*:CYGWIN*:*)
  14.777 +	echo ${UNAME_MACHINE}-pc-cygwin
  14.778 +	exit 0 ;;
  14.779 +    i*:MINGW*:*)
  14.780 +	echo ${UNAME_MACHINE}-pc-mingw32
  14.781 +	exit 0 ;;
  14.782 +    i*:PW*:*)
  14.783 +	echo ${UNAME_MACHINE}-pc-pw32
  14.784 +	exit 0 ;;
  14.785 +    x86:Interix*:3*)
  14.786 +	echo i586-pc-interix3
  14.787 +	exit 0 ;;
  14.788 +    [345]86:Windows_95:* | [345]86:Windows_98:* | [345]86:Windows_NT:*)
  14.789 +	echo i${UNAME_MACHINE}-pc-mks
  14.790 +	exit 0 ;;
  14.791 +    i*:Windows_NT*:* | Pentium*:Windows_NT*:*)
  14.792 +	# How do we know it's Interix rather than the generic POSIX subsystem?
  14.793 +	# It also conflicts with pre-2.0 versions of AT&T UWIN. Should we
  14.794 +	# UNAME_MACHINE based on the output of uname instead of i386?
  14.795 +	echo i586-pc-interix
  14.796 +	exit 0 ;;
  14.797 +    i*:UWIN*:*)
  14.798 +	echo ${UNAME_MACHINE}-pc-uwin
  14.799 +	exit 0 ;;
  14.800 +    p*:CYGWIN*:*)
  14.801 +	echo powerpcle-unknown-cygwin
  14.802 +	exit 0 ;;
  14.803 +    prep*:SunOS:5.*:*)
  14.804 +	echo powerpcle-unknown-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
  14.805 +	exit 0 ;;
  14.806 +    *:GNU:*:*)
  14.807 +	echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-gnu`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'`
  14.808 +	exit 0 ;;
  14.809 +    i*86:Minix:*:*)
  14.810 +	echo ${UNAME_MACHINE}-pc-minix
  14.811 +	exit 0 ;;
  14.812 +    arm*:Linux:*:*)
  14.813 +	echo ${UNAME_MACHINE}-unknown-linux-gnu
  14.814 +	exit 0 ;;
  14.815 +    ia64:Linux:*:*)
  14.816 +	echo ${UNAME_MACHINE}-unknown-linux-gnu
  14.817 +	exit 0 ;;
  14.818 +    m68*:Linux:*:*)
  14.819 +	echo ${UNAME_MACHINE}-unknown-linux-gnu
  14.820 +	exit 0 ;;
  14.821 +    mips:Linux:*:*)
  14.822 +	eval $set_cc_for_build
  14.823 +	sed 's/^	//' << EOF >$dummy.c
  14.824 +	#undef CPU
  14.825 +	#undef mips
  14.826 +	#undef mipsel
  14.827 +	#if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL)
  14.828 +	CPU=mipsel
  14.829 +	#else
  14.830 +	#if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB)
  14.831 +	CPU=mips
  14.832 +	#else
  14.833 +	CPU=
  14.834 +	#endif
  14.835 +	#endif
  14.836 +EOF
  14.837 +	eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep ^CPU=`
  14.838 +	rm -f $dummy.c && rmdir $tmpdir
  14.839 +	test x"${CPU}" != x && echo "${CPU}-unknown-linux-gnu" && exit 0
  14.840 +	;;
  14.841 +    mips64:Linux:*:*)
  14.842 +	eval $set_cc_for_build
  14.843 +	sed 's/^	//' << EOF >$dummy.c
  14.844 +	#undef CPU
  14.845 +	#undef mips64
  14.846 +	#undef mips64el
  14.847 +	#if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL)
  14.848 +	CPU=mips64el
  14.849 +	#else
  14.850 +	#if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB)
  14.851 +	CPU=mips64
  14.852 +	#else
  14.853 +	CPU=
  14.854 +	#endif
  14.855 +	#endif
  14.856 +EOF
  14.857 +	eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep ^CPU=`
  14.858 +	rm -f $dummy.c && rmdir $tmpdir
  14.859 +	test x"${CPU}" != x && echo "${CPU}-unknown-linux-gnu" && exit 0
  14.860 +	;;
  14.861 +    ppc:Linux:*:*)
  14.862 +	echo powerpc-unknown-linux-gnu
  14.863 +	exit 0 ;;
  14.864 +    ppc64:Linux:*:*)
  14.865 +	echo powerpc64-unknown-linux-gnu
  14.866 +	exit 0 ;;
  14.867 +    alpha:Linux:*:*)
  14.868 +	case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in
  14.869 +	  EV5)   UNAME_MACHINE=alphaev5 ;;
  14.870 +	  EV56)  UNAME_MACHINE=alphaev56 ;;
  14.871 +	  PCA56) UNAME_MACHINE=alphapca56 ;;
  14.872 +	  PCA57) UNAME_MACHINE=alphapca56 ;;
  14.873 +	  EV6)   UNAME_MACHINE=alphaev6 ;;
  14.874 +	  EV67)  UNAME_MACHINE=alphaev67 ;;
  14.875 +	  EV68*) UNAME_MACHINE=alphaev68 ;;
  14.876 +        esac
  14.877 +	objdump --private-headers /bin/sh | grep ld.so.1 >/dev/null
  14.878 +	if test "$?" = 0 ; then LIBC="libc1" ; else LIBC="" ; fi
  14.879 +	echo ${UNAME_MACHINE}-unknown-linux-gnu${LIBC}
  14.880 +	exit 0 ;;
  14.881 +    parisc:Linux:*:* | hppa:Linux:*:*)
  14.882 +	# Look for CPU level
  14.883 +	case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in
  14.884 +	  PA7*) echo hppa1.1-unknown-linux-gnu ;;
  14.885 +	  PA8*) echo hppa2.0-unknown-linux-gnu ;;
  14.886 +	  *)    echo hppa-unknown-linux-gnu ;;
  14.887 +	esac
  14.888 +	exit 0 ;;
  14.889 +    parisc64:Linux:*:* | hppa64:Linux:*:*)
  14.890 +	echo hppa64-unknown-linux-gnu
  14.891 +	exit 0 ;;
  14.892 +    s390:Linux:*:* | s390x:Linux:*:*)
  14.893 +	echo ${UNAME_MACHINE}-ibm-linux
  14.894 +	exit 0 ;;
  14.895 +    sh*:Linux:*:*)
  14.896 +	echo ${UNAME_MACHINE}-unknown-linux-gnu
  14.897 +	exit 0 ;;
  14.898 +    sparc:Linux:*:* | sparc64:Linux:*:*)
  14.899 +	echo ${UNAME_MACHINE}-unknown-linux-gnu
  14.900 +	exit 0 ;;
  14.901 +    x86_64:Linux:*:*)
  14.902 +	echo x86_64-unknown-linux-gnu
  14.903 +	exit 0 ;;
  14.904 +    i*86:Linux:*:*)
  14.905 +	# The BFD linker knows what the default object file format is, so
  14.906 +	# first see if it will tell us. cd to the root directory to prevent
  14.907 +	# problems with other programs or directories called `ld' in the path.
  14.908 +	# Set LC_ALL=C to ensure ld outputs messages in English.
  14.909 +	ld_supported_targets=`cd /; LC_ALL=C ld --help 2>&1 \
  14.910 +			 | sed -ne '/supported targets:/!d
  14.911 +				    s/[ 	][ 	]*/ /g
  14.912 +				    s/.*supported targets: *//
  14.913 +				    s/ .*//
  14.914 +				    p'`
  14.915 +        case "$ld_supported_targets" in
  14.916 +	  elf32-i386)
  14.917 +		TENTATIVE="${UNAME_MACHINE}-pc-linux-gnu"
  14.918 +		;;
  14.919 +	  a.out-i386-linux)
  14.920 +		echo "${UNAME_MACHINE}-pc-linux-gnuaout"
  14.921 +		exit 0 ;;
  14.922 +	  coff-i386)
  14.923 +		echo "${UNAME_MACHINE}-pc-linux-gnucoff"
  14.924 +		exit 0 ;;
  14.925 +	  "")
  14.926 +		# Either a pre-BFD a.out linker (linux-gnuoldld) or
  14.927 +		# one that does not give us useful --help.
  14.928 +		echo "${UNAME_MACHINE}-pc-linux-gnuoldld"
  14.929 +		exit 0 ;;
  14.930 +	esac
  14.931 +	# Determine whether the default compiler is a.out or elf
  14.932 +	eval $set_cc_for_build
  14.933 +	sed 's/^	//' << EOF >$dummy.c
  14.934 +	#include <features.h>
  14.935 +	#ifdef __ELF__
  14.936 +	# ifdef __GLIBC__
  14.937 +	#  if __GLIBC__ >= 2
  14.938 +	LIBC=gnu
  14.939 +	#  else
  14.940 +	LIBC=gnulibc1
  14.941 +	#  endif
  14.942 +	# else
  14.943 +	LIBC=gnulibc1
  14.944 +	# endif
  14.945 +	#else
  14.946 +	#ifdef __INTEL_COMPILER
  14.947 +	LIBC=gnu
  14.948 +	#else
  14.949 +	LIBC=gnuaout
  14.950 +	#endif
  14.951 +	#endif
  14.952 +EOF
  14.953 +	eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep ^LIBC=`
  14.954 +	rm -f $dummy.c && rmdir $tmpdir
  14.955 +	test x"${LIBC}" != x && echo "${UNAME_MACHINE}-pc-linux-${LIBC}" && exit 0
  14.956 +	test x"${TENTATIVE}" != x && echo "${TENTATIVE}" && exit 0
  14.957 +	;;
  14.958 +    i*86:DYNIX/ptx:4*:*)
  14.959 +	# ptx 4.0 does uname -s correctly, with DYNIX/ptx in there.
  14.960 +	# earlier versions are messed up and put the nodename in both
  14.961 +	# sysname and nodename.
  14.962 +	echo i386-sequent-sysv4
  14.963 +	exit 0 ;;
  14.964 +    i*86:UNIX_SV:4.2MP:2.*)
  14.965 +        # Unixware is an offshoot of SVR4, but it has its own version
  14.966 +        # number series starting with 2...
  14.967 +        # I am not positive that other SVR4 systems won't match this,
  14.968 +	# I just have to hope.  -- rms.
  14.969 +        # Use sysv4.2uw... so that sysv4* matches it.
  14.970 +	echo ${UNAME_MACHINE}-pc-sysv4.2uw${UNAME_VERSION}
  14.971 +	exit 0 ;;
  14.972 +    i*86:OS/2:*:*)
  14.973 +	# If we were able to find `uname', then EMX Unix compatibility
  14.974 +	# is probably installed.
  14.975 +	echo ${UNAME_MACHINE}-pc-os2-emx
  14.976 +	exit 0 ;;
  14.977 +    i*86:XTS-300:*:STOP)
  14.978 +	echo ${UNAME_MACHINE}-unknown-stop
  14.979 +	exit 0 ;;
  14.980 +    i*86:atheos:*:*)
  14.981 +	echo ${UNAME_MACHINE}-unknown-atheos
  14.982 +	exit 0 ;;
  14.983 +    i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.0*:*)
  14.984 +	echo i386-unknown-lynxos${UNAME_RELEASE}
  14.985 +	exit 0 ;;
  14.986 +    i*86:*DOS:*:*)
  14.987 +	echo ${UNAME_MACHINE}-pc-msdosdjgpp
  14.988 +	exit 0 ;;
  14.989 +    i*86:*:4.*:* | i*86:SYSTEM_V:4.*:*)
  14.990 +	UNAME_REL=`echo ${UNAME_RELEASE} | sed 's/\/MP$//'`
  14.991 +	if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then
  14.992 +		echo ${UNAME_MACHINE}-univel-sysv${UNAME_REL}
  14.993 +	else
  14.994 +		echo ${UNAME_MACHINE}-pc-sysv${UNAME_REL}
  14.995 +	fi
  14.996 +	exit 0 ;;
  14.997 +    i*86:*:5:[78]*)
  14.998 +	case `/bin/uname -X | grep "^Machine"` in
  14.999 +	    *486*)	     UNAME_MACHINE=i486 ;;
 14.1000 +	    *Pentium)	     UNAME_MACHINE=i586 ;;
 14.1001 +	    *Pent*|*Celeron) UNAME_MACHINE=i686 ;;
 14.1002 +	esac
 14.1003 +	echo ${UNAME_MACHINE}-unknown-sysv${UNAME_RELEASE}${UNAME_SYSTEM}${UNAME_VERSION}
 14.1004 +	exit 0 ;;
 14.1005 +    i*86:*:3.2:*)
 14.1006 +	if test -f /usr/options/cb.name; then
 14.1007 +		UNAME_REL=`sed -n 's/.*Version //p' </usr/options/cb.name`
 14.1008 +		echo ${UNAME_MACHINE}-pc-isc$UNAME_REL
 14.1009 +	elif /bin/uname -X 2>/dev/null >/dev/null ; then
 14.1010 +		UNAME_REL=`(/bin/uname -X|grep Release|sed -e 's/.*= //')`
 14.1011 +		(/bin/uname -X|grep i80486 >/dev/null) && UNAME_MACHINE=i486
 14.1012 +		(/bin/uname -X|grep '^Machine.*Pentium' >/dev/null) \
 14.1013 +			&& UNAME_MACHINE=i586
 14.1014 +		(/bin/uname -X|grep '^Machine.*Pent *II' >/dev/null) \
 14.1015 +			&& UNAME_MACHINE=i686
 14.1016 +		(/bin/uname -X|grep '^Machine.*Pentium Pro' >/dev/null) \
 14.1017 +			&& UNAME_MACHINE=i686
 14.1018 +		echo ${UNAME_MACHINE}-pc-sco$UNAME_REL
 14.1019 +	else
 14.1020 +		echo ${UNAME_MACHINE}-pc-sysv32
 14.1021 +	fi
 14.1022 +	exit 0 ;;
 14.1023 +    pc:*:*:*)
 14.1024 +	# Left here for compatibility:
 14.1025 +        # uname -m prints for DJGPP always 'pc', but it prints nothing about
 14.1026 +        # the processor, so we play safe by assuming i386.
 14.1027 +	echo i386-pc-msdosdjgpp
 14.1028 +        exit 0 ;;
 14.1029 +    Intel:Mach:3*:*)
 14.1030 +	echo i386-pc-mach3
 14.1031 +	exit 0 ;;
 14.1032 +    paragon:*:*:*)
 14.1033 +	echo i860-intel-osf1
 14.1034 +	exit 0 ;;
 14.1035 +    i860:*:4.*:*) # i860-SVR4
 14.1036 +	if grep Stardent /usr/include/sys/uadmin.h >/dev/null 2>&1 ; then
 14.1037 +	  echo i860-stardent-sysv${UNAME_RELEASE} # Stardent Vistra i860-SVR4
 14.1038 +	else # Add other i860-SVR4 vendors below as they are discovered.
 14.1039 +	  echo i860-unknown-sysv${UNAME_RELEASE}  # Unknown i860-SVR4
 14.1040 +	fi
 14.1041 +	exit 0 ;;
 14.1042 +    mini*:CTIX:SYS*5:*)
 14.1043 +	# "miniframe"
 14.1044 +	echo m68010-convergent-sysv
 14.1045 +	exit 0 ;;
 14.1046 +    mc68k:UNIX:SYSTEM5:3.51m)
 14.1047 +	echo m68k-convergent-sysv
 14.1048 +	exit 0 ;;
 14.1049 +    M680?0:D-NIX:5.3:*)
 14.1050 +	echo m68k-diab-dnix
 14.1051 +	exit 0 ;;
 14.1052 +    M68*:*:R3V[567]*:*)
 14.1053 +	test -r /sysV68 && echo 'm68k-motorola-sysv' && exit 0 ;;
 14.1054 +    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)
 14.1055 +	OS_REL=''
 14.1056 +	test -r /etc/.relid \
 14.1057 +	&& OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid`
 14.1058 +	/bin/uname -p 2>/dev/null | grep 86 >/dev/null \
 14.1059 +	  && echo i486-ncr-sysv4.3${OS_REL} && exit 0
 14.1060 +	/bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \
 14.1061 +	  && echo i586-ncr-sysv4.3${OS_REL} && exit 0 ;;
 14.1062 +    3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*)
 14.1063 +        /bin/uname -p 2>/dev/null | grep 86 >/dev/null \
 14.1064 +          && echo i486-ncr-sysv4 && exit 0 ;;
 14.1065 +    m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*)
 14.1066 +	echo m68k-unknown-lynxos${UNAME_RELEASE}
 14.1067 +	exit 0 ;;
 14.1068 +    mc68030:UNIX_System_V:4.*:*)
 14.1069 +	echo m68k-atari-sysv4
 14.1070 +	exit 0 ;;
 14.1071 +    TSUNAMI:LynxOS:2.*:*)
 14.1072 +	echo sparc-unknown-lynxos${UNAME_RELEASE}
 14.1073 +	exit 0 ;;
 14.1074 +    rs6000:LynxOS:2.*:*)
 14.1075 +	echo rs6000-unknown-lynxos${UNAME_RELEASE}
 14.1076 +	exit 0 ;;
 14.1077 +    PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.0*:*)
 14.1078 +	echo powerpc-unknown-lynxos${UNAME_RELEASE}
 14.1079 +	exit 0 ;;
 14.1080 +    SM[BE]S:UNIX_SV:*:*)
 14.1081 +	echo mips-dde-sysv${UNAME_RELEASE}
 14.1082 +	exit 0 ;;
 14.1083 +    RM*:ReliantUNIX-*:*:*)
 14.1084 +	echo mips-sni-sysv4
 14.1085 +	exit 0 ;;
 14.1086 +    RM*:SINIX-*:*:*)
 14.1087 +	echo mips-sni-sysv4
 14.1088 +	exit 0 ;;
 14.1089 +    *:SINIX-*:*:*)
 14.1090 +	if uname -p 2>/dev/null >/dev/null ; then
 14.1091 +		UNAME_MACHINE=`(uname -p) 2>/dev/null`
 14.1092 +		echo ${UNAME_MACHINE}-sni-sysv4
 14.1093 +	else
 14.1094 +		echo ns32k-sni-sysv
 14.1095 +	fi
 14.1096 +	exit 0 ;;
 14.1097 +    PENTIUM:*:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort
 14.1098 +                      # says <Richard.M.Bartel@ccMail.Census.GOV>
 14.1099 +        echo i586-unisys-sysv4
 14.1100 +        exit 0 ;;
 14.1101 +    *:UNIX_System_V:4*:FTX*)
 14.1102 +	# From Gerald Hewes <hewes@openmarket.com>.
 14.1103 +	# How about differentiating between stratus architectures? -djm
 14.1104 +	echo hppa1.1-stratus-sysv4
 14.1105 +	exit 0 ;;
 14.1106 +    *:*:*:FTX*)
 14.1107 +	# From seanf@swdc.stratus.com.
 14.1108 +	echo i860-stratus-sysv4
 14.1109 +	exit 0 ;;
 14.1110 +    *:VOS:*:*)
 14.1111 +	# From Paul.Green@stratus.com.
 14.1112 +	echo hppa1.1-stratus-vos
 14.1113 +	exit 0 ;;
 14.1114 +    mc68*:A/UX:*:*)
 14.1115 +	echo m68k-apple-aux${UNAME_RELEASE}
 14.1116 +	exit 0 ;;
 14.1117 +    news*:NEWS-OS:6*:*)
 14.1118 +	echo mips-sony-newsos6
 14.1119 +	exit 0 ;;
 14.1120 +    R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*)
 14.1121 +	if [ -d /usr/nec ]; then
 14.1122 +	        echo mips-nec-sysv${UNAME_RELEASE}
 14.1123 +	else
 14.1124 +	        echo mips-unknown-sysv${UNAME_RELEASE}
 14.1125 +	fi
 14.1126 +        exit 0 ;;
 14.1127 +    BeBox:BeOS:*:*)	# BeOS running on hardware made by Be, PPC only.
 14.1128 +	echo powerpc-be-beos
 14.1129 +	exit 0 ;;
 14.1130 +    BeMac:BeOS:*:*)	# BeOS running on Mac or Mac clone, PPC only.
 14.1131 +	echo powerpc-apple-beos
 14.1132 +	exit 0 ;;
 14.1133 +    BePC:BeOS:*:*)	# BeOS running on Intel PC compatible.
 14.1134 +	echo i586-pc-beos
 14.1135 +	exit 0 ;;
 14.1136 +    SX-4:SUPER-UX:*:*)
 14.1137 +	echo sx4-nec-superux${UNAME_RELEASE}
 14.1138 +	exit 0 ;;
 14.1139 +    SX-5:SUPER-UX:*:*)
 14.1140 +	echo sx5-nec-superux${UNAME_RELEASE}
 14.1141 +	exit 0 ;;
 14.1142 +    SX-6:SUPER-UX:*:*)
 14.1143 +	echo sx6-nec-superux${UNAME_RELEASE}
 14.1144 +	exit 0 ;;
 14.1145 +    Power*:Rhapsody:*:*)
 14.1146 +	echo powerpc-apple-rhapsody${UNAME_RELEASE}
 14.1147 +	exit 0 ;;
 14.1148 +    *:Rhapsody:*:*)
 14.1149 +	echo ${UNAME_MACHINE}-apple-rhapsody${UNAME_RELEASE}
 14.1150 +	exit 0 ;;
 14.1151 +    *:Darwin:*:*)
 14.1152 +	echo `uname -p`-apple-darwin${UNAME_RELEASE}
 14.1153 +	exit 0 ;;
 14.1154 +    *:procnto*:*:* | *:QNX:[0123456789]*:*)
 14.1155 +	UNAME_PROCESSOR=`uname -p`
 14.1156 +	if test "$UNAME_PROCESSOR" = "x86"; then
 14.1157 +		UNAME_PROCESSOR=i386
 14.1158 +		UNAME_MACHINE=pc
 14.1159 +	fi
 14.1160 +	echo ${UNAME_PROCESSOR}-${UNAME_MACHINE}-nto-qnx${UNAME_RELEASE}
 14.1161 +	exit 0 ;;
 14.1162 +    *:QNX:*:4*)
 14.1163 +	echo i386-pc-qnx
 14.1164 +	exit 0 ;;
 14.1165 +    NSR-[DGKLNPTVW]:NONSTOP_KERNEL:*:*)
 14.1166 +	echo nsr-tandem-nsk${UNAME_RELEASE}
 14.1167 +	exit 0 ;;
 14.1168 +    *:NonStop-UX:*:*)
 14.1169 +	echo mips-compaq-nonstopux
 14.1170 +	exit 0 ;;
 14.1171 +    BS2000:POSIX*:*:*)
 14.1172 +	echo bs2000-siemens-sysv
 14.1173 +	exit 0 ;;
 14.1174 +    DS/*:UNIX_System_V:*:*)
 14.1175 +	echo ${UNAME_MACHINE}-${UNAME_SYSTEM}-${UNAME_RELEASE}
 14.1176 +	exit 0 ;;
 14.1177 +    *:Plan9:*:*)
 14.1178 +	# "uname -m" is not consistent, so use $cputype instead. 386
 14.1179 +	# is converted to i386 for consistency with other x86
 14.1180 +	# operating systems.
 14.1181 +	if test "$cputype" = "386"; then
 14.1182 +	    UNAME_MACHINE=i386
 14.1183 +	else
 14.1184 +	    UNAME_MACHINE="$cputype"
 14.1185 +	fi
 14.1186 +	echo ${UNAME_MACHINE}-unknown-plan9
 14.1187 +	exit 0 ;;
 14.1188 +    *:TOPS-10:*:*)
 14.1189 +	echo pdp10-unknown-tops10
 14.1190 +	exit 0 ;;
 14.1191 +    *:TENEX:*:*)
 14.1192 +	echo pdp10-unknown-tenex
 14.1193 +	exit 0 ;;
 14.1194 +    KS10:TOPS-20:*:* | KL10:TOPS-20:*:* | TYPE4:TOPS-20:*:*)
 14.1195 +	echo pdp10-dec-tops20
 14.1196 +	exit 0 ;;
 14.1197 +    XKL-1:TOPS-20:*:* | TYPE5:TOPS-20:*:*)
 14.1198 +	echo pdp10-xkl-tops20
 14.1199 +	exit 0 ;;
 14.1200 +    *:TOPS-20:*:*)
 14.1201 +	echo pdp10-unknown-tops20
 14.1202 +	exit 0 ;;
 14.1203 +    *:ITS:*:*)
 14.1204 +	echo pdp10-unknown-its
 14.1205 +	exit 0 ;;
 14.1206 +esac
 14.1207 +
 14.1208 +#echo '(No uname command or uname output not recognized.)' 1>&2
 14.1209 +#echo "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" 1>&2
 14.1210 +
 14.1211 +eval $set_cc_for_build
 14.1212 +cat >$dummy.c <<EOF
 14.1213 +#ifdef _SEQUENT_
 14.1214 +# include <sys/types.h>
 14.1215 +# include <sys/utsname.h>
 14.1216 +#endif
 14.1217 +main ()
 14.1218 +{
 14.1219 +#if defined (sony)
 14.1220 +#if defined (MIPSEB)
 14.1221 +  /* BFD wants "bsd" instead of "newsos".  Perhaps BFD should be changed,
 14.1222 +     I don't know....  */
 14.1223 +  printf ("mips-sony-bsd\n"); exit (0);
 14.1224 +#else
 14.1225 +#include <sys/param.h>
 14.1226 +  printf ("m68k-sony-newsos%s\n",
 14.1227 +#ifdef NEWSOS4
 14.1228 +          "4"
 14.1229 +#else
 14.1230 +	  ""
 14.1231 +#endif
 14.1232 +         ); exit (0);
 14.1233 +#endif
 14.1234 +#endif
 14.1235 +
 14.1236 +#if defined (__arm) && defined (__acorn) && defined (__unix)
 14.1237 +  printf ("arm-acorn-riscix"); exit (0);
 14.1238 +#endif
 14.1239 +
 14.1240 +#if defined (hp300) && !defined (hpux)
 14.1241 +  printf ("m68k-hp-bsd\n"); exit (0);
 14.1242 +#endif
 14.1243 +
 14.1244 +#if defined (NeXT)
 14.1245 +#if !defined (__ARCHITECTURE__)
 14.1246 +#define __ARCHITECTURE__ "m68k"
 14.1247 +#endif
 14.1248 +  int version;
 14.1249 +  version=`(hostinfo | sed -n 's/.*NeXT Mach \([0-9]*\).*/\1/p') 2>/dev/null`;
 14.1250 +  if (version < 4)
 14.1251 +    printf ("%s-next-nextstep%d\n", __ARCHITECTURE__, version);
 14.1252 +  else
 14.1253 +    printf ("%s-next-openstep%d\n", __ARCHITECTURE__, version);
 14.1254 +  exit (0);
 14.1255 +#endif
 14.1256 +
 14.1257 +#if defined (MULTIMAX) || defined (n16)
 14.1258 +#if defined (UMAXV)
 14.1259 +  printf ("ns32k-encore-sysv\n"); exit (0);
 14.1260 +#else
 14.1261 +#if defined (CMU)
 14.1262 +  printf ("ns32k-encore-mach\n"); exit (0);
 14.1263 +#else
 14.1264 +  printf ("ns32k-encore-bsd\n"); exit (0);
 14.1265 +#endif
 14.1266 +#endif
 14.1267 +#endif
 14.1268 +
 14.1269 +#if defined (__386BSD__)
 14.1270 +  printf ("i386-pc-bsd\n"); exit (0);
 14.1271 +#endif
 14.1272 +
 14.1273 +#if defined (sequent)
 14.1274 +#if defined (i386)
 14.1275 +  printf ("i386-sequent-dynix\n"); exit (0);
 14.1276 +#endif
 14.1277 +#if defined (ns32000)
 14.1278 +  printf ("ns32k-sequent-dynix\n"); exit (0);
 14.1279 +#endif
 14.1280 +#endif
 14.1281 +
 14.1282 +#if defined (_SEQUENT_)
 14.1283 +    struct utsname un;
 14.1284 +
 14.1285 +    uname(&un);
 14.1286 +
 14.1287 +    if (strncmp(un.version, "V2", 2) == 0) {
 14.1288 +	printf ("i386-sequent-ptx2\n"); exit (0);
 14.1289 +    }
 14.1290 +    if (strncmp(un.version, "V1", 2) == 0) { /* XXX is V1 correct? */
 14.1291 +	printf ("i386-sequent-ptx1\n"); exit (0);
 14.1292 +    }
 14.1293 +    printf ("i386-sequent-ptx\n"); exit (0);
 14.1294 +
 14.1295 +#endif
 14.1296 +
 14.1297 +#if defined (vax)
 14.1298 +# if !defined (ultrix)
 14.1299 +#  include <sys/param.h>
 14.1300 +#  if defined (BSD)
 14.1301 +#   if BSD == 43
 14.1302 +      printf ("vax-dec-bsd4.3\n"); exit (0);
 14.1303 +#   else
 14.1304 +#    if BSD == 199006
 14.1305 +      printf ("vax-dec-bsd4.3reno\n"); exit (0);
 14.1306 +#    else
 14.1307 +      printf ("vax-dec-bsd\n"); exit (0);
 14.1308 +#    endif
 14.1309 +#   endif
 14.1310 +#  else
 14.1311 +    printf ("vax-dec-bsd\n"); exit (0);
 14.1312 +#  endif
 14.1313 +# else
 14.1314 +    printf ("vax-dec-ultrix\n"); exit (0);
 14.1315 +# endif
 14.1316 +#endif
 14.1317 +
 14.1318 +#if defined (alliant) && defined (i860)
 14.1319 +  printf ("i860-alliant-bsd\n"); exit (0);
 14.1320 +#endif
 14.1321 +
 14.1322 +  exit (1);
 14.1323 +}
 14.1324 +EOF
 14.1325 +
 14.1326 +$CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null && $dummy && rm -f $dummy.c $dummy && rmdir $tmpdir && exit 0
 14.1327 +rm -f $dummy.c $dummy && rmdir $tmpdir
 14.1328 +
 14.1329 +# Apollos put the system type in the environment.
 14.1330 +
 14.1331 +test -d /usr/apollo && { echo ${ISP}-apollo-${SYSTYPE}; exit 0; }
 14.1332 +
 14.1333 +# Convex versions that predate uname can use getsysinfo(1)
 14.1334 +
 14.1335 +if [ -x /usr/convex/getsysinfo ]
 14.1336 +then
 14.1337 +    case `getsysinfo -f cpu_type` in
 14.1338 +    c1*)
 14.1339 +	echo c1-convex-bsd
 14.1340 +	exit 0 ;;
 14.1341 +    c2*)
 14.1342 +	if getsysinfo -f scalar_acc
 14.1343 +	then echo c32-convex-bsd
 14.1344 +	else echo c2-convex-bsd
 14.1345 +	fi
 14.1346 +	exit 0 ;;
 14.1347 +    c34*)
 14.1348 +	echo c34-convex-bsd
 14.1349 +	exit 0 ;;
 14.1350 +    c38*)
 14.1351 +	echo c38-convex-bsd
 14.1352 +	exit 0 ;;
 14.1353 +    c4*)
 14.1354 +	echo c4-convex-bsd
 14.1355 +	exit 0 ;;
 14.1356 +    esac
 14.1357 +fi
 14.1358 +
 14.1359 +cat >&2 <<EOF
 14.1360 +$0: unable to guess system type
 14.1361 +
 14.1362 +This script, last modified $timestamp, has failed to recognize
 14.1363 +the operating system you are using. It is advised that you
 14.1364 +download the most up to date version of the config scripts from
 14.1365 +
 14.1366 +    ftp://ftp.gnu.org/pub/gnu/config/
 14.1367 +
 14.1368 +If the version you run ($0) is already up to date, please
 14.1369 +send the following data and any information you think might be
 14.1370 +pertinent to <config-patches@gnu.org> in order to provide the needed
 14.1371 +information to handle your system.
 14.1372 +
 14.1373 +config.guess timestamp = $timestamp
 14.1374 +
 14.1375 +uname -m = `(uname -m) 2>/dev/null || echo unknown`
 14.1376 +uname -r = `(uname -r) 2>/dev/null || echo unknown`
 14.1377 +uname -s = `(uname -s) 2>/dev/null || echo unknown`
 14.1378 +uname -v = `(uname -v) 2>/dev/null || echo unknown`
 14.1379 +
 14.1380 +/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null`
 14.1381 +/bin/uname -X     = `(/bin/uname -X) 2>/dev/null`
 14.1382 +
 14.1383 +hostinfo               = `(hostinfo) 2>/dev/null`
 14.1384 +/bin/universe          = `(/bin/universe) 2>/dev/null`
 14.1385 +/usr/bin/arch -k       = `(/usr/bin/arch -k) 2>/dev/null`
 14.1386 +/bin/arch              = `(/bin/arch) 2>/dev/null`
 14.1387 +/usr/bin/oslevel       = `(/usr/bin/oslevel) 2>/dev/null`
 14.1388 +/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null`
 14.1389 +
 14.1390 +UNAME_MACHINE = ${UNAME_MACHINE}
 14.1391 +UNAME_RELEASE = ${UNAME_RELEASE}
 14.1392 +UNAME_SYSTEM  = ${UNAME_SYSTEM}
 14.1393 +UNAME_VERSION = ${UNAME_VERSION}
 14.1394 +EOF
 14.1395 +
 14.1396 +exit 1
 14.1397 +
 14.1398 +# Local variables:
 14.1399 +# eval: (add-hook 'write-file-hooks 'time-stamp)
 14.1400 +# time-stamp-start: "timestamp='"
 14.1401 +# time-stamp-format: "%:y-%02m-%02d"
 14.1402 +# time-stamp-end: "'"
 14.1403 +# End:
    15.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    15.2 +++ b/config.h.in	Sat Feb 20 21:18:28 2010 -0800
    15.3 @@ -0,0 +1,83 @@
    15.4 +/* config.h.in.  Generated from configure.ac by autoheader.  */
    15.5 +
    15.6 +/* Extra */
    15.7 +#undef GT_EXTRA_VERSION
    15.8 +
    15.9 +/* Major */
   15.10 +#undef GT_MAJOR_VERSION
   15.11 +
   15.12 +/* Micro */
   15.13 +#undef GT_MICRO_VERSION
   15.14 +
   15.15 +/* Minor */
   15.16 +#undef GT_MINOR_VERSION
   15.17 +
   15.18 +/* Define to 1 if you have the <dlfcn.h> header file. */
   15.19 +#undef HAVE_DLFCN_H
   15.20 +
   15.21 +/* Define to 1 if you have the `getpid' function. */
   15.22 +#undef HAVE_GETPID
   15.23 +
   15.24 +/* Define to 1 if you have the `getppid' function. */
   15.25 +#undef HAVE_GETPPID
   15.26 +
   15.27 +/* Define to 1 if you have the `hstrerror' function. */
   15.28 +#undef HAVE_HSTRERROR
   15.29 +
   15.30 +/* Define to 1 if you have the <inttypes.h> header file. */
   15.31 +#undef HAVE_INTTYPES_H
   15.32 +
   15.33 +/* Define to 1 if you have the `z' library (-lz). */
   15.34 +#undef HAVE_LIBZ
   15.35 +
   15.36 +/* Define to 1 if you have the <memory.h> header file. */
   15.37 +#undef HAVE_MEMORY_H
   15.38 +
   15.39 +/* Define to 1 if you have the <stdint.h> header file. */
   15.40 +#undef HAVE_STDINT_H
   15.41 +
   15.42 +/* Define to 1 if you have the <stdlib.h> header file. */
   15.43 +#undef HAVE_STDLIB_H
   15.44 +
   15.45 +/* Define to 1 if you have the <strings.h> header file. */
   15.46 +#undef HAVE_STRINGS_H
   15.47 +
   15.48 +/* Define to 1 if you have the <string.h> header file. */
   15.49 +#undef HAVE_STRING_H
   15.50 +
   15.51 +/* Define to 1 if you have the <sys/stat.h> header file. */
   15.52 +#undef HAVE_SYS_STAT_H
   15.53 +
   15.54 +/* Define to 1 if you have the <sys/types.h> header file. */
   15.55 +#undef HAVE_SYS_TYPES_H
   15.56 +
   15.57 +/* Define to 1 if you have the <unistd.h> header file. */
   15.58 +#undef HAVE_UNISTD_H
   15.59 +
   15.60 +/* Name of package */
   15.61 +#undef PACKAGE
   15.62 +
   15.63 +/* Define to the address where bug reports for this package should be sent. */
   15.64 +#undef PACKAGE_BUGREPORT
   15.65 +
   15.66 +/* Define to the full name of this package. */
   15.67 +#undef PACKAGE_NAME
   15.68 +
   15.69 +/* Define to the full name and version of this package. */
   15.70 +#undef PACKAGE_STRING
   15.71 +
   15.72 +/* Define to the one symbol short name of this package. */
   15.73 +#undef PACKAGE_TARNAME
   15.74 +
   15.75 +/* Define to the version of this package. */
   15.76 +#undef PACKAGE_VERSION
   15.77 +
   15.78 +/* Define to 1 if you have the ANSI C header files. */
   15.79 +#undef STDC_HEADERS
   15.80 +
   15.81 +#undef USE_LIBXML2
   15.82 +
   15.83 +#undef USE_ZLIB
   15.84 +
   15.85 +/* Version number of package */
   15.86 +#undef VERSION
    16.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    16.2 +++ b/config.sub	Sat Feb 20 21:18:28 2010 -0800
    16.3 @@ -0,0 +1,1469 @@
    16.4 +#! /bin/sh
    16.5 +# Configuration validation subroutine script.
    16.6 +#   Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
    16.7 +#   2000, 2001, 2002 Free Software Foundation, Inc.
    16.8 +
    16.9 +timestamp='2002-11-30'
   16.10 +
   16.11 +# This file is (in principle) common to ALL GNU software.
   16.12 +# The presence of a machine in this file suggests that SOME GNU software
   16.13 +# can handle that machine.  It does not imply ALL GNU software can.
   16.14 +#
   16.15 +# This file is free software; you can redistribute it and/or modify
   16.16 +# it under the terms of the GNU General Public License as published by
   16.17 +# the Free Software Foundation; either version 2 of the License, or
   16.18 +# (at your option) any later version.
   16.19 +#
   16.20 +# This program is distributed in the hope that it will be useful,
   16.21 +# but WITHOUT ANY WARRANTY; without even the implied warranty of
   16.22 +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
   16.23 +# GNU General Public License for more details.
   16.24 +#
   16.25 +# You should have received a copy of the GNU General Public License
   16.26 +# along with this program; if not, write to the Free Software
   16.27 +# Foundation, Inc., 59 Temple Place - Suite 330,
   16.28 +# Boston, MA 02111-1307, USA.
   16.29 +
   16.30 +# As a special exception to the GNU General Public License, if you
   16.31 +# distribute this file as part of a program that contains a
   16.32 +# configuration script generated by Autoconf, you may include it under
   16.33 +# the same distribution terms that you use for the rest of that program.
   16.34 +
   16.35 +# Please send patches to <config-patches@gnu.org>.  Submit a context
   16.36 +# diff and a properly formatted ChangeLog entry.
   16.37 +#
   16.38 +# Configuration subroutine to validate and canonicalize a configuration type.
   16.39 +# Supply the specified configuration type as an argument.
   16.40 +# If it is invalid, we print an error message on stderr and exit with code 1.
   16.41 +# Otherwise, we print the canonical config type on stdout and succeed.
   16.42 +
   16.43 +# This file is supposed to be the same for all GNU packages
   16.44 +# and recognize all the CPU types, system types and aliases
   16.45 +# that are meaningful with *any* GNU software.
   16.46 +# Each package is responsible for reporting which valid configurations
   16.47 +# it does not support.  The user should be able to distinguish
   16.48 +# a failure to support a valid configuration from a meaningless
   16.49 +# configuration.
   16.50 +
   16.51 +# The goal of this file is to map all the various variations of a given
   16.52 +# machine specification into a single specification in the form:
   16.53 +#	CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM
   16.54 +# or in some cases, the newer four-part form:
   16.55 +#	CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM
   16.56 +# It is wrong to echo any other type of specification.
   16.57 +
   16.58 +me=`echo "$0" | sed -e 's,.*/,,'`
   16.59 +
   16.60 +usage="\
   16.61 +Usage: $0 [OPTION] CPU-MFR-OPSYS
   16.62 +       $0 [OPTION] ALIAS
   16.63 +
   16.64 +Canonicalize a configuration name.
   16.65 +
   16.66 +Operation modes:
   16.67 +  -h, --help         print this help, then exit
   16.68 +  -t, --time-stamp   print date of last modification, then exit
   16.69 +  -v, --version      print version number, then exit
   16.70 +
   16.71 +Report bugs and patches to <config-patches@gnu.org>."
   16.72 +
   16.73 +version="\
   16.74 +GNU config.sub ($timestamp)
   16.75 +
   16.76 +Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001
   16.77 +Free Software Foundation, Inc.
   16.78 +
   16.79 +This is free software; see the source for copying conditions.  There is NO
   16.80 +warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
   16.81 +
   16.82 +help="
   16.83 +Try \`$me --help' for more information."
   16.84 +
   16.85 +# Parse command line
   16.86 +while test $# -gt 0 ; do
   16.87 +  case $1 in
   16.88 +    --time-stamp | --time* | -t )
   16.89 +       echo "$timestamp" ; exit 0 ;;
   16.90 +    --version | -v )
   16.91 +       echo "$version" ; exit 0 ;;
   16.92 +    --help | --h* | -h )
   16.93 +       echo "$usage"; exit 0 ;;
   16.94 +    -- )     # Stop option processing
   16.95 +       shift; break ;;
   16.96 +    - )	# Use stdin as input.
   16.97 +       break ;;
   16.98 +    -* )
   16.99 +       echo "$me: invalid option $1$help"
  16.100 +       exit 1 ;;
  16.101 +
  16.102 +    *local*)
  16.103 +       # First pass through any local machine types.
  16.104 +       echo $1
  16.105 +       exit 0;;
  16.106 +
  16.107 +    * )
  16.108 +       break ;;
  16.109 +  esac
  16.110 +done
  16.111 +
  16.112 +case $# in
  16.113 + 0) echo "$me: missing argument$help" >&2
  16.114 +    exit 1;;
  16.115 + 1) ;;
  16.116 + *) echo "$me: too many arguments$help" >&2
  16.117 +    exit 1;;
  16.118 +esac
  16.119 +
  16.120 +# Separate what the user gave into CPU-COMPANY and OS or KERNEL-OS (if any).
  16.121 +# Here we must recognize all the valid KERNEL-OS combinations.
  16.122 +maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'`
  16.123 +case $maybe_os in
  16.124 +  nto-qnx* | linux-gnu* | freebsd*-gnu* | netbsd*-gnu* | storm-chaos* | os2-emx* | rtmk-nova*)
  16.125 +    os=-$maybe_os
  16.126 +    basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'`
  16.127 +    ;;
  16.128 +  *)
  16.129 +    basic_machine=`echo $1 | sed 's/-[^-]*$//'`
  16.130 +    if [ $basic_machine != $1 ]
  16.131 +    then os=`echo $1 | sed 's/.*-/-/'`
  16.132 +    else os=; fi
  16.133 +    ;;
  16.134 +esac
  16.135 +
  16.136 +### Let's recognize common machines as not being operating systems so
  16.137 +### that things like config.sub decstation-3100 work.  We also
  16.138 +### recognize some manufacturers as not being operating systems, so we
  16.139 +### can provide default operating systems below.
  16.140 +case $os in
  16.141 +	-sun*os*)
  16.142 +		# Prevent following clause from handling this invalid input.
  16.143 +		;;
  16.144 +	-dec* | -mips* | -sequent* | -encore* | -pc532* | -sgi* | -sony* | \
  16.145 +	-att* | -7300* | -3300* | -delta* | -motorola* | -sun[234]* | \
  16.146 +	-unicom* | -ibm* | -next | -hp | -isi* | -apollo | -altos* | \
  16.147 +	-convergent* | -ncr* | -news | -32* | -3600* | -3100* | -hitachi* |\
  16.148 +	-c[123]* | -convex* | -sun | -crds | -omron* | -dg | -ultra | -tti* | \
  16.149 +	-harris | -dolphin | -highlevel | -gould | -cbm | -ns | -masscomp | \
  16.150 +	-apple | -axis)
  16.151 +		os=
  16.152 +		basic_machine=$1
  16.153 +		;;
  16.154 +	-sim | -cisco | -oki | -wec | -winbond)
  16.155 +		os=
  16.156 +		basic_machine=$1
  16.157 +		;;
  16.158 +	-scout)
  16.159 +		;;
  16.160 +	-wrs)
  16.161 +		os=-vxworks
  16.162 +		basic_machine=$1
  16.163 +		;;
  16.164 +	-chorusos*)
  16.165 +		os=-chorusos
  16.166 +		basic_machine=$1
  16.167 +		;;
  16.168 + 	-chorusrdb)
  16.169 + 		os=-chorusrdb
  16.170 +		basic_machine=$1
  16.171 + 		;;
  16.172 +	-hiux*)
  16.173 +		os=-hiuxwe2
  16.174 +		;;
  16.175 +	-sco5)
  16.176 +		os=-sco3.2v5
  16.177 +		basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
  16.178 +		;;
  16.179 +	-sco4)
  16.180 +		os=-sco3.2v4
  16.181 +		basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
  16.182 +		;;
  16.183 +	-sco3.2.[4-9]*)
  16.184 +		os=`echo $os | sed -e 's/sco3.2./sco3.2v/'`
  16.185 +		basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
  16.186 +		;;
  16.187 +	-sco3.2v[4-9]*)
  16.188 +		# Don't forget version if it is 3.2v4 or newer.
  16.189 +		basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
  16.190 +		;;
  16.191 +	-sco*)
  16.192 +		os=-sco3.2v2
  16.193 +		basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
  16.194 +		;;
  16.195 +	-udk*)
  16.196 +		basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
  16.197 +		;;
  16.198 +	-isc)
  16.199 +		os=-isc2.2
  16.200 +		basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
  16.201 +		;;
  16.202 +	-clix*)
  16.203 +		basic_machine=clipper-intergraph
  16.204 +		;;
  16.205 +	-isc*)
  16.206 +		basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
  16.207 +		;;
  16.208 +	-lynx*)
  16.209 +		os=-lynxos
  16.210 +		;;
  16.211 +	-ptx*)
  16.212 +		basic_machine=`echo $1 | sed -e 's/86-.*/86-sequent/'`
  16.213 +		;;
  16.214 +	-windowsnt*)
  16.215 +		os=`echo $os | sed -e 's/windowsnt/winnt/'`
  16.216 +		;;
  16.217 +	-psos*)
  16.218 +		os=-psos
  16.219 +		;;
  16.220 +	-mint | -mint[0-9]*)
  16.221 +		basic_machine=m68k-atari
  16.222 +		os=-mint
  16.223 +		;;
  16.224 +esac
  16.225 +
  16.226 +# Decode aliases for certain CPU-COMPANY combinations.
  16.227 +case $basic_machine in
  16.228 +	# Recognize the basic CPU types without company name.
  16.229 +	# Some are omitted here because they have special meanings below.
  16.230 +	1750a | 580 \
  16.231 +	| a29k \
  16.232 +	| alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \
  16.233 +	| alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \
  16.234 +	| arc | arm | arm[bl]e | arme[lb] | armv[2345] | armv[345][lb] | avr \
  16.235 +	| clipper \
  16.236 +	| d10v | d30v | dlx | dsp16xx \
  16.237 +	| fr30 | frv \
  16.238 +	| h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \
  16.239 +	| i370 | i860 | i960 | ia64 \
  16.240 +	| ip2k \
  16.241 +	| m32r | m68000 | m68k | m88k | mcore \
  16.242 +	| mips | mipsbe | mipseb | mipsel | mipsle \
  16.243 +	| mips16 \
  16.244 +	| mips64 | mips64el \
  16.245 +	| mips64vr | mips64vrel \
  16.246 +	| mips64orion | mips64orionel \
  16.247 +	| mips64vr4100 | mips64vr4100el \
  16.248 +	| mips64vr4300 | mips64vr4300el \
  16.249 +	| mips64vr5000 | mips64vr5000el \
  16.250 +	| mipsisa32 | mipsisa32el \
  16.251 +	| mipsisa64 | mipsisa64el \
  16.252 +	| mipsisa64sb1 | mipsisa64sb1el \
  16.253 +	| mipsisa64sr71k | mipsisa64sr71kel \
  16.254 +	| mipstx39 | mipstx39el \
  16.255 +	| mn10200 | mn10300 \
  16.256 +	| ns16k | ns32k \
  16.257 +	| openrisc | or32 \
  16.258 +	| pdp10 | pdp11 | pj | pjl \
  16.259 +	| powerpc | powerpc64 | powerpc64le | powerpcle | ppcbe \
  16.260 +	| pyramid \
  16.261 +	| sh | sh[1234] | sh3e | sh[34]eb | shbe | shle | sh[1234]le | sh3ele \
  16.262 +	| sh64 | sh64le \
  16.263 +	| sparc | sparc64 | sparc86x | sparclet | sparclite | sparcv9 | sparcv9b \
  16.264 +	| strongarm \
  16.265 +	| tahoe | thumb | tic80 | tron \
  16.266 +	| v850 | v850e \
  16.267 +	| we32k \
  16.268 +	| x86 | xscale | xstormy16 | xtensa \
  16.269 +	| z8k)
  16.270 +		basic_machine=$basic_machine-unknown
  16.271 +		;;
  16.272 +	m6811 | m68hc11 | m6812 | m68hc12)
  16.273 +		# Motorola 68HC11/12.
  16.274 +		basic_machine=$basic_machine-unknown
  16.275 +		os=-none
  16.276 +		;;
  16.277 +	m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | v70 | w65 | z8k)
  16.278 +		;;
  16.279 +
  16.280 +	# We use `pc' rather than `unknown'
  16.281 +	# because (1) that's what they normally are, and
  16.282 +	# (2) the word "unknown" tends to confuse beginning users.
  16.283 +	i*86 | x86_64)
  16.284 +	  basic_machine=$basic_machine-pc
  16.285 +	  ;;
  16.286 +	# Object if more than one company name word.
  16.287 +	*-*-*)
  16.288 +		echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2
  16.289 +		exit 1
  16.290 +		;;
  16.291 +	# Recognize the basic CPU types with company name.
  16.292 +	580-* \
  16.293 +	| a29k-* \
  16.294 +	| alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \
  16.295 +	| alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \
  16.296 +	| alphapca5[67]-* | alpha64pca5[67]-* | arc-* \
  16.297 +	| arm-*  | armbe-* | armle-* | armeb-* | armv*-* \
  16.298 +	| avr-* \
  16.299 +	| bs2000-* \
  16.300 +	| c[123]* | c30-* | [cjt]90-* | c4x-* | c54x-* \
  16.301 +	| clipper-* | cydra-* \
  16.302 +	| d10v-* | d30v-* | dlx-* \
  16.303 +	| elxsi-* \
  16.304 +	| f30[01]-* | f700-* | fr30-* | frv-* | fx80-* \
  16.305 +	| h8300-* | h8500-* \
  16.306 +	| hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \
  16.307 +	| i*86-* | i860-* | i960-* | ia64-* \
  16.308 +	| ip2k-* \
  16.309 +	| m32r-* \
  16.310 +	| m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \
  16.311 +	| m88110-* | m88k-* | mcore-* \
  16.312 +	| mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \
  16.313 +	| mips16-* \
  16.314 +	| mips64-* | mips64el-* \
  16.315 +	| mips64vr-* | mips64vrel-* \
  16.316 +	| mips64orion-* | mips64orionel-* \
  16.317 +	| mips64vr4100-* | mips64vr4100el-* \
  16.318 +	| mips64vr4300-* | mips64vr4300el-* \
  16.319 +	| mips64vr5000-* | mips64vr5000el-* \
  16.320 +	| mipsisa32-* | mipsisa32el-* \
  16.321 +	| mipsisa64-* | mipsisa64el-* \
  16.322 +	| mipsisa64sb1-* | mipsisa64sb1el-* \
  16.323 +	| mipsisa64sr71k-* | mipsisa64sr71kel-* \
  16.324 +	| mipstx39 | mipstx39el \
  16.325 +	| none-* | np1-* | ns16k-* | ns32k-* \
  16.326 +	| orion-* \
  16.327 +	| pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \
  16.328 +	| powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* | ppcbe-* \
  16.329 +	| pyramid-* \
  16.330 +	| romp-* | rs6000-* \
  16.331 +	| sh-* | sh[1234]-* | sh3e-* | sh[34]eb-* | shbe-* \
  16.332 +	| shle-* | sh[1234]le-* | sh3ele-* | sh64-* | sh64le-* \
  16.333 +	| sparc-* | sparc64-* | sparc86x-* | sparclet-* | sparclite-* \
  16.334 +	| sparcv9-* | sparcv9b-* | strongarm-* | sv1-* | sx?-* \
  16.335 +	| tahoe-* | thumb-* | tic30-* | tic4x-* | tic54x-* | tic80-* | tron-* \
  16.336 +	| v850-* | v850e-* | vax-* \
  16.337 +	| we32k-* \
  16.338 +	| x86-* | x86_64-* | xps100-* | xscale-* | xstormy16-* \
  16.339 +	| xtensa-* \
  16.340 +	| ymp-* \
  16.341 +	| z8k-*)
  16.342 +		;;
  16.343 +	# Recognize the various machine names and aliases which stand
  16.344 +	# for a CPU type and a company and sometimes even an OS.
  16.345 +	386bsd)
  16.346 +		basic_machine=i386-unknown
  16.347 +		os=-bsd
  16.348 +		;;
  16.349 +	3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc)
  16.350 +		basic_machine=m68000-att
  16.351 +		;;
  16.352 +	3b*)
  16.353 +		basic_machine=we32k-att
  16.354 +		;;
  16.355 +	a29khif)
  16.356 +		basic_machine=a29k-amd
  16.357 +		os=-udi
  16.358 +		;;
  16.359 +	adobe68k)
  16.360 +		basic_machine=m68010-adobe
  16.361 +		os=-scout
  16.362 +		;;
  16.363 +	alliant | fx80)
  16.364 +		basic_machine=fx80-alliant
  16.365 +		;;
  16.366 +	altos | altos3068)
  16.367 +		basic_machine=m68k-altos
  16.368 +		;;
  16.369 +	am29k)
  16.370 +		basic_machine=a29k-none
  16.371 +		os=-bsd
  16.372 +		;;
  16.373 +	amdahl)
  16.374 +		basic_machine=580-amdahl
  16.375 +		os=-sysv
  16.376 +		;;
  16.377 +	amiga | amiga-*)
  16.378 +		basic_machine=m68k-unknown
  16.379 +		;;
  16.380 +	amigaos | amigados)
  16.381 +		basic_machine=m68k-unknown
  16.382 +		os=-amigaos
  16.383 +		;;
  16.384 +	amigaunix | amix)
  16.385 +		basic_machine=m68k-unknown
  16.386 +		os=-sysv4
  16.387 +		;;
  16.388 +	apollo68)
  16.389 +		basic_machine=m68k-apollo
  16.390 +		os=-sysv
  16.391 +		;;
  16.392 +	apollo68bsd)
  16.393 +		basic_machine=m68k-apollo
  16.394 +		os=-bsd
  16.395 +		;;
  16.396 +	aux)
  16.397 +		basic_machine=m68k-apple
  16.398 +		os=-aux
  16.399 +		;;
  16.400 +	balance)
  16.401 +		basic_machine=ns32k-sequent
  16.402 +		os=-dynix
  16.403 +		;;
  16.404 +	c90)
  16.405 +		basic_machine=c90-cray
  16.406 +		os=-unicos
  16.407 +		;;
  16.408 +	convex-c1)
  16.409 +		basic_machine=c1-convex
  16.410 +		os=-bsd
  16.411 +		;;
  16.412 +	convex-c2)
  16.413 +		basic_machine=c2-convex
  16.414 +		os=-bsd
  16.415 +		;;
  16.416 +	convex-c32)
  16.417 +		basic_machine=c32-convex
  16.418 +		os=-bsd
  16.419 +		;;
  16.420 +	convex-c34)
  16.421 +		basic_machine=c34-convex
  16.422 +		os=-bsd
  16.423 +		;;
  16.424 +	convex-c38)
  16.425 +		basic_machine=c38-convex
  16.426 +		os=-bsd
  16.427 +		;;
  16.428 +	cray | j90)
  16.429 +		basic_machine=j90-cray
  16.430 +		os=-unicos
  16.431 +		;;
  16.432 +	crds | unos)
  16.433 +		basic_machine=m68k-crds
  16.434 +		;;
  16.435 +	cris | cris-* | etrax*)
  16.436 +		basic_machine=cris-axis
  16.437 +		;;
  16.438 +	da30 | da30-*)
  16.439 +		basic_machine=m68k-da30
  16.440 +		;;
  16.441 +	decstation | decstation-3100 | pmax | pmax-* | pmin | dec3100 | decstatn)
  16.442 +		basic_machine=mips-dec
  16.443 +		;;
  16.444 +	decsystem10* | dec10*)
  16.445 +		basic_machine=pdp10-dec
  16.446 +		os=-tops10
  16.447 +		;;
  16.448 +	decsystem20* | dec20*)
  16.449 +		basic_machine=pdp10-dec
  16.450 +		os=-tops20
  16.451 +		;;
  16.452 +	delta | 3300 | motorola-3300 | motorola-delta \
  16.453 +	      | 3300-motorola | delta-motorola)
  16.454 +		basic_machine=m68k-motorola
  16.455 +		;;
  16.456 +	delta88)
  16.457 +		basic_machine=m88k-motorola
  16.458 +		os=-sysv3
  16.459 +		;;
  16.460 +	dpx20 | dpx20-*)
  16.461 +		basic_machine=rs6000-bull
  16.462 +		os=-bosx
  16.463 +		;;
  16.464 +	dpx2* | dpx2*-bull)
  16.465 +		basic_machine=m68k-bull
  16.466 +		os=-sysv3
  16.467 +		;;
  16.468 +	ebmon29k)
  16.469 +		basic_machine=a29k-amd
  16.470 +		os=-ebmon
  16.471 +		;;
  16.472 +	elxsi)
  16.473 +		basic_machine=elxsi-elxsi
  16.474 +		os=-bsd
  16.475 +		;;
  16.476 +	encore | umax | mmax)
  16.477 +		basic_machine=ns32k-encore
  16.478 +		;;
  16.479 +	es1800 | OSE68k | ose68k | ose | OSE)
  16.480 +		basic_machine=m68k-ericsson
  16.481 +		os=-ose
  16.482 +		;;
  16.483 +	fx2800)
  16.484 +		basic_machine=i860-alliant
  16.485 +		;;
  16.486 +	genix)
  16.487 +		basic_machine=ns32k-ns
  16.488 +		;;
  16.489 +	gmicro)
  16.490 +		basic_machine=tron-gmicro
  16.491 +		os=-sysv
  16.492 +		;;
  16.493 +	go32)
  16.494 +		basic_machine=i386-pc
  16.495 +		os=-go32
  16.496 +		;;
  16.497 +	h3050r* | hiux*)
  16.498 +		basic_machine=hppa1.1-hitachi
  16.499 +		os=-hiuxwe2
  16.500 +		;;
  16.501 +	h8300hms)
  16.502 +		basic_machine=h8300-hitachi
  16.503 +		os=-hms
  16.504 +		;;
  16.505 +	h8300xray)
  16.506 +		basic_machine=h8300-hitachi
  16.507 +		os=-xray
  16.508 +		;;
  16.509 +	h8500hms)
  16.510 +		basic_machine=h8500-hitachi
  16.511 +		os=-hms
  16.512 +		;;
  16.513 +	harris)
  16.514 +		basic_machine=m88k-harris
  16.515 +		os=-sysv3
  16.516 +		;;
  16.517 +	hp300-*)
  16.518 +		basic_machine=m68k-hp
  16.519 +		;;
  16.520 +	hp300bsd)
  16.521 +		basic_machine=m68k-hp
  16.522 +		os=-bsd
  16.523 +		;;
  16.524 +	hp300hpux)
  16.525 +		basic_machine=m68k-hp
  16.526 +		os=-hpux
  16.527 +		;;
  16.528 +	hp3k9[0-9][0-9] | hp9[0-9][0-9])
  16.529 +		basic_machine=hppa1.0-hp
  16.530 +		;;
  16.531 +	hp9k2[0-9][0-9] | hp9k31[0-9])
  16.532 +		basic_machine=m68000-hp
  16.533 +		;;
  16.534 +	hp9k3[2-9][0-9])
  16.535 +		basic_machine=m68k-hp
  16.536 +		;;
  16.537 +	hp9k6[0-9][0-9] | hp6[0-9][0-9])
  16.538 +		basic_machine=hppa1.0-hp
  16.539 +		;;
  16.540 +	hp9k7[0-79][0-9] | hp7[0-79][0-9])
  16.541 +		basic_machine=hppa1.1-hp
  16.542 +		;;
  16.543 +	hp9k78[0-9] | hp78[0-9])
  16.544 +		# FIXME: really hppa2.0-hp
  16.545 +		basic_machine=hppa1.1-hp
  16.546 +		;;
  16.547 +	hp9k8[67]1 | hp8[67]1 | hp9k80[24] | hp80[24] | hp9k8[78]9 | hp8[78]9 | hp9k893 | hp893)
  16.548 +		# FIXME: really hppa2.0-hp
  16.549 +		basic_machine=hppa1.1-hp
  16.550 +		;;
  16.551 +	hp9k8[0-9][13679] | hp8[0-9][13679])
  16.552 +		basic_machine=hppa1.1-hp
  16.553 +		;;
  16.554 +	hp9k8[0-9][0-9] | hp8[0-9][0-9])
  16.555 +		basic_machine=hppa1.0-hp
  16.556 +		;;
  16.557 +	hppa-next)
  16.558 +		os=-nextstep3
  16.559 +		;;
  16.560 +	hppaosf)
  16.561 +		basic_machine=hppa1.1-hp
  16.562 +		os=-osf
  16.563 +		;;
  16.564 +	hppro)
  16.565 +		basic_machine=hppa1.1-hp
  16.566 +		os=-proelf
  16.567 +		;;
  16.568 +	i370-ibm* | ibm*)
  16.569 +		basic_machine=i370-ibm
  16.570 +		;;
  16.571 +# I'm not sure what "Sysv32" means.  Should this be sysv3.2?
  16.572 +	i*86v32)
  16.573 +		basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
  16.574 +		os=-sysv32
  16.575 +		;;
  16.576 +	i*86v4*)
  16.577 +		basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
  16.578 +		os=-sysv4
  16.579 +		;;
  16.580 +	i*86v)
  16.581 +		basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
  16.582 +		os=-sysv
  16.583 +		;;
  16.584 +	i*86sol2)
  16.585 +		basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
  16.586 +		os=-solaris2
  16.587 +		;;
  16.588 +	i386mach)
  16.589 +		basic_machine=i386-mach
  16.590 +		os=-mach
  16.591 +		;;
  16.592 +	i386-vsta | vsta)
  16.593 +		basic_machine=i386-unknown
  16.594 +		os=-vsta
  16.595 +		;;
  16.596 +	iris | iris4d)
  16.597 +		basic_machine=mips-sgi
  16.598 +		case $os in
  16.599 +		    -irix*)
  16.600 +			;;
  16.601 +		    *)
  16.602 +			os=-irix4
  16.603 +			;;
  16.604 +		esac
  16.605 +		;;
  16.606 +	isi68 | isi)
  16.607 +		basic_machine=m68k-isi
  16.608 +		os=-sysv
  16.609 +		;;
  16.610 +	m88k-omron*)
  16.611 +		basic_machine=m88k-omron
  16.612 +		;;
  16.613 +	magnum | m3230)
  16.614 +		basic_machine=mips-mips
  16.615 +		os=-sysv
  16.616 +		;;
  16.617 +	merlin)
  16.618 +		basic_machine=ns32k-utek
  16.619 +		os=-sysv
  16.620 +		;;
  16.621 +	mingw32)
  16.622 +		basic_machine=i386-pc
  16.623 +		os=-mingw32
  16.624 +		;;
  16.625 +	miniframe)
  16.626 +		basic_machine=m68000-convergent
  16.627 +		;;
  16.628 +	*mint | -mint[0-9]* | *MiNT | *MiNT[0-9]*)
  16.629 +		basic_machine=m68k-atari
  16.630 +		os=-mint
  16.631 +		;;
  16.632 +	mips3*-*)
  16.633 +		basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`
  16.634 +		;;
  16.635 +	mips3*)
  16.636 +		basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`-unknown
  16.637 +		;;
  16.638 +	mmix*)
  16.639 +		basic_machine=mmix-knuth
  16.640 +		os=-mmixware
  16.641 +		;;
  16.642 +	monitor)
  16.643 +		basic_machine=m68k-rom68k
  16.644 +		os=-coff
  16.645 +		;;
  16.646 +	morphos)
  16.647 +		basic_machine=powerpc-unknown
  16.648 +		os=-morphos
  16.649 +		;;
  16.650 +	msdos)
  16.651 +		basic_machine=i386-pc
  16.652 +		os=-msdos
  16.653 +		;;
  16.654 +	mvs)
  16.655 +		basic_machine=i370-ibm
  16.656 +		os=-mvs
  16.657 +		;;
  16.658 +	ncr3000)
  16.659 +		basic_machine=i486-ncr
  16.660 +		os=-sysv4
  16.661 +		;;
  16.662 +	netbsd386)
  16.663 +		basic_machine=i386-unknown
  16.664 +		os=-netbsd
  16.665 +		;;
  16.666 +	netwinder)
  16.667 +		basic_machine=armv4l-rebel
  16.668 +		os=-linux
  16.669 +		;;
  16.670 +	news | news700 | news800 | news900)
  16.671 +		basic_machine=m68k-sony
  16.672 +		os=-newsos
  16.673 +		;;
  16.674 +	news1000)
  16.675 +		basic_machine=m68030-sony
  16.676 +		os=-newsos
  16.677 +		;;
  16.678 +	news-3600 | risc-news)
  16.679 +		basic_machine=mips-sony
  16.680 +		os=-newsos
  16.681 +		;;
  16.682 +	necv70)
  16.683 +		basic_machine=v70-nec
  16.684 +		os=-sysv
  16.685 +		;;
  16.686 +	next | m*-next )
  16.687 +		basic_machine=m68k-next
  16.688 +		case $os in
  16.689 +		    -nextstep* )
  16.690 +			;;
  16.691 +		    -ns2*)
  16.692 +		      os=-nextstep2
  16.693 +			;;
  16.694 +		    *)
  16.695 +		      os=-nextstep3
  16.696 +			;;
  16.697 +		esac
  16.698 +		;;
  16.699 +	nh3000)
  16.700 +		basic_machine=m68k-harris
  16.701 +		os=-cxux
  16.702 +		;;
  16.703 +	nh[45]000)
  16.704 +		basic_machine=m88k-harris
  16.705 +		os=-cxux
  16.706 +		;;
  16.707 +	nindy960)
  16.708 +		basic_machine=i960-intel
  16.709 +		os=-nindy
  16.710 +		;;
  16.711 +	mon960)
  16.712 +		basic_machine=i960-intel
  16.713 +		os=-mon960
  16.714 +		;;
  16.715 +	nonstopux)
  16.716 +		basic_machine=mips-compaq
  16.717 +		os=-nonstopux
  16.718 +		;;
  16.719 +	np1)
  16.720 +		basic_machine=np1-gould
  16.721 +		;;
  16.722 +	nsr-tandem)
  16.723 +		basic_machine=nsr-tandem
  16.724 +		;;
  16.725 +	op50n-* | op60c-*)
  16.726 +		basic_machine=hppa1.1-oki
  16.727 +		os=-proelf
  16.728 +		;;
  16.729 +	or32 | or32-*)
  16.730 +		basic_machine=or32-unknown
  16.731 +		os=-coff
  16.732 +		;;
  16.733 +	OSE68000 | ose68000)
  16.734 +		basic_machine=m68000-ericsson
  16.735 +		os=-ose
  16.736 +		;;
  16.737 +	os68k)
  16.738 +		basic_machine=m68k-none
  16.739 +		os=-os68k
  16.740 +		;;
  16.741 +	pa-hitachi)
  16.742 +		basic_machine=hppa1.1-hitachi
  16.743 +		os=-hiuxwe2
  16.744 +		;;
  16.745 +	paragon)
  16.746 +		basic_machine=i860-intel
  16.747 +		os=-osf
  16.748 +		;;
  16.749 +	pbd)
  16.750 +		basic_machine=sparc-tti
  16.751 +		;;
  16.752 +	pbb)
  16.753 +		basic_machine=m68k-tti
  16.754 +		;;
  16.755 +	pc532 | pc532-*)
  16.756 +		basic_machine=ns32k-pc532
  16.757 +		;;
  16.758 +	pentium | p5 | k5 | k6 | nexgen | viac3)
  16.759 +		basic_machine=i586-pc
  16.760 +		;;
  16.761 +	pentiumpro | p6 | 6x86 | athlon | athlon_*)
  16.762 +		basic_machine=i686-pc
  16.763 +		;;
  16.764 +	pentiumii | pentium2)
  16.765 +		basic_machine=i686-pc
  16.766 +		;;
  16.767 +	pentium-* | p5-* | k5-* | k6-* | nexgen-* | viac3-*)
  16.768 +		basic_machine=i586-`echo $basic_machine | sed 's/^[^-]*-//'`
  16.769 +		;;
  16.770 +	pentiumpro-* | p6-* | 6x86-* | athlon-*)
  16.771 +		basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'`
  16.772 +		;;
  16.773 +	pentiumii-* | pentium2-*)
  16.774 +		basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'`
  16.775 +		;;
  16.776 +	pn)
  16.777 +		basic_machine=pn-gould
  16.778 +		;;
  16.779 +	power)	basic_machine=power-ibm
  16.780 +		;;
  16.781 +	ppc)	basic_machine=powerpc-unknown
  16.782 +		;;
  16.783 +	ppc-*)	basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'`
  16.784 +		;;
  16.785 +	ppcle | powerpclittle | ppc-le | powerpc-little)
  16.786 +		basic_machine=powerpcle-unknown
  16.787 +		;;
  16.788 +	ppcle-* | powerpclittle-*)
  16.789 +		basic_machine=powerpcle-`echo $basic_machine | sed 's/^[^-]*-//'`
  16.790 +		;;
  16.791 +	ppc64)	basic_machine=powerpc64-unknown
  16.792 +		;;
  16.793 +	ppc64-*) basic_machine=powerpc64-`echo $basic_machine | sed 's/^[^-]*-//'`
  16.794 +		;;
  16.795 +	ppc64le | powerpc64little | ppc64-le | powerpc64-little)
  16.796 +		basic_machine=powerpc64le-unknown
  16.797 +		;;
  16.798 +	ppc64le-* | powerpc64little-*)
  16.799 +		basic_machine=powerpc64le-`echo $basic_machine | sed 's/^[^-]*-//'`
  16.800 +		;;
  16.801 +	ps2)
  16.802 +		basic_machine=i386-ibm
  16.803 +		;;
  16.804 +	pw32)
  16.805 +		basic_machine=i586-unknown
  16.806 +		os=-pw32
  16.807 +		;;
  16.808 +	rom68k)
  16.809 +		basic_machine=m68k-rom68k
  16.810 +		os=-coff
  16.811 +		;;
  16.812 +	rm[46]00)
  16.813 +		basic_machine=mips-siemens
  16.814 +		;;
  16.815 +	rtpc | rtpc-*)
  16.816 +		basic_machine=romp-ibm
  16.817 +		;;
  16.818 +	s390 | s390-*)
  16.819 +		basic_machine=s390-ibm
  16.820 +		;;
  16.821 +	s390x | s390x-*)
  16.822 +		basic_machine=s390x-ibm
  16.823 +		;;
  16.824 +	sa29200)
  16.825 +		basic_machine=a29k-amd
  16.826 +		os=-udi
  16.827 +		;;
  16.828 +	sb1)
  16.829 +		basic_machine=mipsisa64sb1-unknown
  16.830 +		;;
  16.831 +	sb1el)
  16.832 +		basic_machine=mipsisa64sb1el-unknown
  16.833 +		;;
  16.834 +	sequent)
  16.835 +		basic_machine=i386-sequent
  16.836 +		;;
  16.837 +	sh)
  16.838 +		basic_machine=sh-hitachi
  16.839 +		os=-hms
  16.840 +		;;
  16.841 +	sparclite-wrs | simso-wrs)
  16.842 +		basic_machine=sparclite-wrs
  16.843 +		os=-vxworks
  16.844 +		;;
  16.845 +	sps7)
  16.846 +		basic_machine=m68k-bull
  16.847 +		os=-sysv2
  16.848 +		;;
  16.849 +	spur)
  16.850 +		basic_machine=spur-unknown
  16.851 +		;;
  16.852 +	st2000)
  16.853 +		basic_machine=m68k-tandem
  16.854 +		;;
  16.855 +	stratus)
  16.856 +		basic_machine=i860-stratus
  16.857 +		os=-sysv4
  16.858 +		;;
  16.859 +	sun2)
  16.860 +		basic_machine=m68000-sun
  16.861 +		;;
  16.862 +	sun2os3)
  16.863 +		basic_machine=m68000-sun
  16.864 +		os=-sunos3
  16.865 +		;;
  16.866 +	sun2os4)
  16.867 +		basic_machine=m68000-sun
  16.868 +		os=-sunos4
  16.869 +		;;
  16.870 +	sun3os3)
  16.871 +		basic_machine=m68k-sun
  16.872 +		os=-sunos3
  16.873 +		;;
  16.874 +	sun3os4)
  16.875 +		basic_machine=m68k-sun
  16.876 +		os=-sunos4
  16.877 +		;;
  16.878 +	sun4os3)
  16.879 +		basic_machine=sparc-sun
  16.880 +		os=-sunos3
  16.881 +		;;
  16.882 +	sun4os4)
  16.883 +		basic_machine=sparc-sun
  16.884 +		os=-sunos4
  16.885 +		;;
  16.886 +	sun4sol2)
  16.887 +		basic_machine=sparc-sun
  16.888 +		os=-solaris2
  16.889 +		;;
  16.890 +	sun3 | sun3-*)
  16.891 +		basic_machine=m68k-sun
  16.892 +		;;
  16.893 +	sun4)
  16.894 +		basic_machine=sparc-sun
  16.895 +		;;
  16.896 +	sun386 | sun386i | roadrunner)
  16.897 +		basic_machine=i386-sun
  16.898 +		;;
  16.899 +	sv1)
  16.900 +		basic_machine=sv1-cray
  16.901 +		os=-unicos
  16.902 +		;;
  16.903 +	symmetry)
  16.904 +		basic_machine=i386-sequent
  16.905 +		os=-dynix
  16.906 +		;;
  16.907 +	t3d)
  16.908 +		basic_machine=alpha-cray
  16.909 +		os=-unicos
  16.910 +		;;
  16.911 +	t3e)
  16.912 +		basic_machine=alphaev5-cray
  16.913 +		os=-unicos
  16.914 +		;;
  16.915 +	t90)
  16.916 +		basic_machine=t90-cray
  16.917 +		os=-unicos
  16.918 +		;;
  16.919 +        tic4x | c4x*)
  16.920 +		basic_machine=tic4x-unknown
  16.921 +		os=-coff
  16.922 +		;;
  16.923 +	tic54x | c54x*)
  16.924 +		basic_machine=tic54x-unknown
  16.925 +		os=-coff
  16.926 +		;;
  16.927 +	tx39)
  16.928 +		basic_machine=mipstx39-unknown
  16.929 +		;;
  16.930 +	tx39el)
  16.931 +		basic_machine=mipstx39el-unknown
  16.932 +		;;
  16.933 +	toad1)
  16.934 +		basic_machine=pdp10-xkl
  16.935 +		os=-tops20
  16.936 +		;;
  16.937 +	tower | tower-32)
  16.938 +		basic_machine=m68k-ncr
  16.939 +		;;
  16.940 +	udi29k)
  16.941 +		basic_machine=a29k-amd
  16.942 +		os=-udi
  16.943 +		;;
  16.944 +	ultra3)
  16.945 +		basic_machine=a29k-nyu
  16.946 +		os=-sym1
  16.947 +		;;
  16.948 +	v810 | necv810)
  16.949 +		basic_machine=v810-nec
  16.950 +		os=-none
  16.951 +		;;
  16.952 +	vaxv)
  16.953 +		basic_machine=vax-dec
  16.954 +		os=-sysv
  16.955 +		;;
  16.956 +	vms)
  16.957 +		basic_machine=vax-dec
  16.958 +		os=-vms
  16.959 +		;;
  16.960 +	vpp*|vx|vx-*)
  16.961 +		basic_machine=f301-fujitsu
  16.962 +		;;
  16.963 +	vxworks960)
  16.964 +		basic_machine=i960-wrs
  16.965 +		os=-vxworks
  16.966 +		;;
  16.967 +	vxworks68)
  16.968 +		basic_machine=m68k-wrs
  16.969 +		os=-vxworks
  16.970 +		;;
  16.971 +	vxworks29k)
  16.972 +		basic_machine=a29k-wrs
  16.973 +		os=-vxworks
  16.974 +		;;
  16.975 +	w65*)
  16.976 +		basic_machine=w65-wdc
  16.977 +		os=-none
  16.978 +		;;
  16.979 +	w89k-*)
  16.980 +		basic_machine=hppa1.1-winbond
  16.981 +		os=-proelf
  16.982 +		;;
  16.983 +	xps | xps100)
  16.984 +		basic_machine=xps100-honeywell
  16.985 +		;;
  16.986 +	ymp)
  16.987 +		basic_machine=ymp-cray
  16.988 +		os=-unicos
  16.989 +		;;
  16.990 +	z8k-*-coff)
  16.991 +		basic_machine=z8k-unknown
  16.992 +		os=-sim
  16.993 +		;;
  16.994 +	none)
  16.995 +		basic_machine=none-none
  16.996 +		os=-none
  16.997 +		;;
  16.998 +
  16.999 +# Here we handle the default manufacturer of certain CPU types.  It is in
 16.1000 +# some cases the only manufacturer, in others, it is the most popular.
 16.1001 +	w89k)
 16.1002 +		basic_machine=hppa1.1-winbond
 16.1003 +		;;
 16.1004 +	op50n)
 16.1005 +		basic_machine=hppa1.1-oki
 16.1006 +		;;
 16.1007 +	op60c)
 16.1008 +		basic_machine=hppa1.1-oki
 16.1009 +		;;
 16.1010 +	romp)
 16.1011 +		basic_machine=romp-ibm
 16.1012 +		;;
 16.1013 +	rs6000)
 16.1014 +		basic_machine=rs6000-ibm
 16.1015 +		;;
 16.1016 +	vax)
 16.1017 +		basic_machine=vax-dec
 16.1018 +		;;
 16.1019 +	pdp10)
 16.1020 +		# there are many clones, so DEC is not a safe bet
 16.1021 +		basic_machine=pdp10-unknown
 16.1022 +		;;
 16.1023 +	pdp11)
 16.1024 +		basic_machine=pdp11-dec
 16.1025 +		;;
 16.1026 +	we32k)
 16.1027 +		basic_machine=we32k-att
 16.1028 +		;;
 16.1029 +	sh3 | sh4 | sh3eb | sh4eb | sh[1234]le | sh3ele)
 16.1030 +		basic_machine=sh-unknown
 16.1031 +		;;
 16.1032 +	sh64)
 16.1033 +		basic_machine=sh64-unknown
 16.1034 +		;;
 16.1035 +	sparc | sparcv9 | sparcv9b)
 16.1036 +		basic_machine=sparc-sun
 16.1037 +		;;
 16.1038 +	cydra)
 16.1039 +		basic_machine=cydra-cydrome
 16.1040 +		;;
 16.1041 +	orion)
 16.1042 +		basic_machine=orion-highlevel
 16.1043 +		;;
 16.1044 +	orion105)
 16.1045 +		basic_machine=clipper-highlevel
 16.1046 +		;;
 16.1047 +	mac | mpw | mac-mpw)
 16.1048 +		basic_machine=m68k-apple
 16.1049 +		;;
 16.1050 +	pmac | pmac-mpw)
 16.1051 +		basic_machine=powerpc-apple
 16.1052 +		;;
 16.1053 +	*-unknown)
 16.1054 +		# Make sure to match an already-canonicalized machine name.
 16.1055 +		;;
 16.1056 +	*)
 16.1057 +		echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2
 16.1058 +		exit 1
 16.1059 +		;;
 16.1060 +esac
 16.1061 +
 16.1062 +# Here we canonicalize certain aliases for manufacturers.
 16.1063 +case $basic_machine in
 16.1064 +	*-digital*)
 16.1065 +		basic_machine=`echo $basic_machine | sed 's/digital.*/dec/'`
 16.1066 +		;;
 16.1067 +	*-commodore*)
 16.1068 +		basic_machine=`echo $basic_machine | sed 's/commodore.*/cbm/'`
 16.1069 +		;;
 16.1070 +	*)
 16.1071 +		;;
 16.1072 +esac
 16.1073 +
 16.1074 +# Decode manufacturer-specific aliases for certain operating systems.
 16.1075 +
 16.1076 +if [ x"$os" != x"" ]
 16.1077 +then
 16.1078 +case $os in
 16.1079 +        # First match some system type aliases
 16.1080 +        # that might get confused with valid system types.
 16.1081 +	# -solaris* is a basic system type, with this one exception.
 16.1082 +	-solaris1 | -solaris1.*)
 16.1083 +		os=`echo $os | sed -e 's|solaris1|sunos4|'`
 16.1084 +		;;
 16.1085 +	-solaris)
 16.1086 +		os=-solaris2
 16.1087 +		;;
 16.1088 +	-svr4*)
 16.1089 +		os=-sysv4
 16.1090 +		;;
 16.1091 +	-unixware*)
 16.1092 +		os=-sysv4.2uw
 16.1093 +		;;
 16.1094 +	-gnu/linux*)
 16.1095 +		os=`echo $os | sed -e 's|gnu/linux|linux-gnu|'`
 16.1096 +		;;
 16.1097 +	# First accept the basic system types.
 16.1098 +	# The portable systems comes first.
 16.1099 +	# Each alternative MUST END IN A *, to match a version number.
 16.1100 +	# -sysv* is not here because it comes later, after sysvr4.
 16.1101 +	-gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \
 16.1102 +	      | -*vms* | -sco* | -esix* | -isc* | -aix* | -sunos | -sunos[34]*\
 16.1103 +	      | -hpux* | -unos* | -osf* | -luna* | -dgux* | -solaris* | -sym* \
 16.1104 +	      | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \
 16.1105 +	      | -aos* \
 16.1106 +	      | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \
 16.1107 +	      | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \
 16.1108 +	      | -hiux* | -386bsd* | -netbsd* | -openbsd* | -freebsd* | -riscix* \
 16.1109 +	      | -lynxos* | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \
 16.1110 +	      | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \
 16.1111 +	      | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \
 16.1112 +	      | -chorusos* | -chorusrdb* \
 16.1113 +	      | -cygwin* | -pe* | -psos* | -moss* | -proelf* | -rtems* \
 16.1114 +	      | -mingw32* | -linux-gnu* | -uxpv* | -beos* | -mpeix* | -udk* \
 16.1115 +	      | -interix* | -uwin* | -mks* | -rhapsody* | -darwin* | -opened* \
 16.1116 +	      | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \
 16.1117 +	      | -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* \
 16.1118 +	      | -os2* | -vos* | -palmos* | -uclinux* | -nucleus* \
 16.1119 +	      | -morphos* | -superux* | -rtmk* | -rtmk-nova* | -windiss* \
 16.1120 +	      | -powermax* | -dnix*)
 16.1121 +	# Remember, each alternative MUST END IN *, to match a version number.
 16.1122 +		;;
 16.1123 +	-qnx*)
 16.1124 +		case $basic_machine in
 16.1125 +		    x86-* | i*86-*)
 16.1126 +			;;
 16.1127 +		    *)
 16.1128 +			os=-nto$os
 16.1129 +			;;
 16.1130 +		esac
 16.1131 +		;;
 16.1132 +	-nto-qnx*)
 16.1133 +		;;
 16.1134 +	-nto*)
 16.1135 +		os=`echo $os | sed -e 's|nto|nto-qnx|'`
 16.1136 +		;;
 16.1137 +	-sim | -es1800* | -hms* | -xray | -os68k* | -none* | -v88r* \
 16.1138 +	      | -windows* | -osx | -abug | -netware* | -os9* | -beos* \
 16.1139 +	      | -macos* | -mpw* | -magic* | -mmixware* | -mon960* | -lnews*)
 16.1140 +		;;
 16.1141 +	-mac*)
 16.1142 +		os=`echo $os | sed -e 's|mac|macos|'`
 16.1143 +		;;
 16.1144 +	-linux*)
 16.1145 +		os=`echo $os | sed -e 's|linux|linux-gnu|'`
 16.1146 +		;;
 16.1147 +	-sunos5*)
 16.1148 +		os=`echo $os | sed -e 's|sunos5|solaris2|'`
 16.1149 +		;;
 16.1150 +	-sunos6*)
 16.1151 +		os=`echo $os | sed -e 's|sunos6|solaris3|'`
 16.1152 +		;;
 16.1153 +	-opened*)
 16.1154 +		os=-openedition
 16.1155 +		;;
 16.1156 +	-wince*)
 16.1157 +		os=-wince
 16.1158 +		;;
 16.1159 +	-osfrose*)
 16.1160 +		os=-osfrose
 16.1161 +		;;
 16.1162 +	-osf*)
 16.1163 +		os=-osf
 16.1164 +		;;
 16.1165 +	-utek*)
 16.1166 +		os=-bsd
 16.1167 +		;;
 16.1168 +	-dynix*)
 16.1169 +		os=-bsd
 16.1170 +		;;
 16.1171 +	-acis*)
 16.1172 +		os=-aos
 16.1173 +		;;
 16.1174 +	-atheos*)
 16.1175 +		os=-atheos
 16.1176 +		;;
 16.1177 +	-386bsd)
 16.1178 +		os=-bsd
 16.1179 +		;;
 16.1180 +	-ctix* | -uts*)
 16.1181 +		os=-sysv
 16.1182 +		;;
 16.1183 +	-nova*)
 16.1184 +		os=-rtmk-nova
 16.1185 +		;;
 16.1186 +	-ns2 )
 16.1187 +		os=-nextstep2
 16.1188 +		;;
 16.1189 +	-nsk*)
 16.1190 +		os=-nsk
 16.1191 +		;;
 16.1192 +	# Preserve the version number of sinix5.
 16.1193 +	-sinix5.*)
 16.1194 +		os=`echo $os | sed -e 's|sinix|sysv|'`
 16.1195 +		;;
 16.1196 +	-sinix*)
 16.1197 +		os=-sysv4
 16.1198 +		;;
 16.1199 +	-triton*)
 16.1200 +		os=-sysv3
 16.1201 +		;;
 16.1202 +	-oss*)
 16.1203 +		os=-sysv3
 16.1204 +		;;
 16.1205 +	-svr4)
 16.1206 +		os=-sysv4
 16.1207 +		;;
 16.1208 +	-svr3)
 16.1209 +		os=-sysv3
 16.1210 +		;;
 16.1211 +	-sysvr4)
 16.1212 +		os=-sysv4
 16.1213 +		;;
 16.1214 +	# This must come after -sysvr4.
 16.1215 +	-sysv*)
 16.1216 +		;;
 16.1217 +	-ose*)
 16.1218 +		os=-ose
 16.1219 +		;;
 16.1220 +	-es1800*)
 16.1221 +		os=-ose
 16.1222 +		;;
 16.1223 +	-xenix)
 16.1224 +		os=-xenix
 16.1225 +		;;
 16.1226 +	-*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*)
 16.1227 +		os=-mint
 16.1228 +		;;
 16.1229 +	-none)
 16.1230 +		;;
 16.1231 +	*)
 16.1232 +		# Get rid of the `-' at the beginning of $os.
 16.1233 +		os=`echo $os | sed 's/[^-]*-//'`
 16.1234 +		echo Invalid configuration \`$1\': system \`$os\' not recognized 1>&2
 16.1235 +		exit 1
 16.1236 +		;;
 16.1237 +esac
 16.1238 +else
 16.1239 +
 16.1240 +# Here we handle the default operating systems that come with various machines.
 16.1241 +# The value should be what the vendor currently ships out the door with their
 16.1242 +# machine or put another way, the most popular os provided with the machine.
 16.1243 +
 16.1244 +# Note that if you're going to try to match "-MANUFACTURER" here (say,
 16.1245 +# "-sun"), then you have to tell the case statement up towards the top
 16.1246 +# that MANUFACTURER isn't an operating system.  Otherwise, code above
 16.1247 +# will signal an error saying that MANUFACTURER isn't an operating
 16.1248 +# system, and we'll never get to this point.
 16.1249 +
 16.1250 +case $basic_machine in
 16.1251 +	*-acorn)
 16.1252 +		os=-riscix1.2
 16.1253 +		;;
 16.1254 +	arm*-rebel)
 16.1255 +		os=-linux
 16.1256 +		;;
 16.1257 +	arm*-semi)
 16.1258 +		os=-aout
 16.1259 +		;;
 16.1260 +	# This must come before the *-dec entry.
 16.1261 +	pdp10-*)
 16.1262 +		os=-tops20
 16.1263 +		;;
 16.1264 +	pdp11-*)
 16.1265 +		os=-none
 16.1266 +		;;
 16.1267 +	*-dec | vax-*)
 16.1268 +		os=-ultrix4.2
 16.1269 +		;;
 16.1270 +	m68*-apollo)
 16.1271 +		os=-domain
 16.1272 +		;;
 16.1273 +	i386-sun)
 16.1274 +		os=-sunos4.0.2
 16.1275 +		;;
 16.1276 +	m68000-sun)
 16.1277 +		os=-sunos3
 16.1278 +		# This also exists in the configure program, but was not the
 16.1279 +		# default.
 16.1280 +		# os=-sunos4
 16.1281 +		;;
 16.1282 +	m68*-cisco)
 16.1283 +		os=-aout
 16.1284 +		;;
 16.1285 +	mips*-cisco)
 16.1286 +		os=-elf
 16.1287 +		;;
 16.1288 +	mips*-*)
 16.1289 +		os=-elf
 16.1290 +		;;
 16.1291 +	or32-*)
 16.1292 +		os=-coff
 16.1293 +		;;
 16.1294 +	*-tti)	# must be before sparc entry or we get the wrong os.
 16.1295 +		os=-sysv3
 16.1296 +		;;
 16.1297 +	sparc-* | *-sun)
 16.1298 +		os=-sunos4.1.1
 16.1299 +		;;
 16.1300 +	*-be)
 16.1301 +		os=-beos
 16.1302 +		;;
 16.1303 +	*-ibm)
 16.1304 +		os=-aix
 16.1305 +		;;
 16.1306 +	*-wec)
 16.1307 +		os=-proelf
 16.1308 +		;;
 16.1309 +	*-winbond)
 16.1310 +		os=-proelf
 16.1311 +		;;
 16.1312 +	*-oki)
 16.1313 +		os=-proelf
 16.1314 +		;;
 16.1315 +	*-hp)
 16.1316 +		os=-hpux
 16.1317 +		;;
 16.1318 +	*-hitachi)
 16.1319 +		os=-hiux
 16.1320 +		;;
 16.1321 +	i860-* | *-att | *-ncr | *-altos | *-motorola | *-convergent)
 16.1322 +		os=-sysv
 16.1323 +		;;
 16.1324 +	*-cbm)
 16.1325 +		os=-amigaos
 16.1326 +		;;
 16.1327 +	*-dg)
 16.1328 +		os=-dgux
 16.1329 +		;;
 16.1330 +	*-dolphin)
 16.1331 +		os=-sysv3
 16.1332 +		;;
 16.1333 +	m68k-ccur)
 16.1334 +		os=-rtu
 16.1335 +		;;
 16.1336 +	m88k-omron*)
 16.1337 +		os=-luna
 16.1338 +		;;
 16.1339 +	*-next )
 16.1340 +		os=-nextstep
 16.1341 +		;;
 16.1342 +	*-sequent)
 16.1343 +		os=-ptx
 16.1344 +		;;
 16.1345 +	*-crds)
 16.1346 +		os=-unos
 16.1347 +		;;
 16.1348 +	*-ns)
 16.1349 +		os=-genix
 16.1350 +		;;
 16.1351 +	i370-*)
 16.1352 +		os=-mvs
 16.1353 +		;;
 16.1354 +	*-next)
 16.1355 +		os=-nextstep3
 16.1356 +		;;
 16.1357 +	*-gould)
 16.1358 +		os=-sysv
 16.1359 +		;;
 16.1360 +	*-highlevel)
 16.1361 +		os=-bsd
 16.1362 +		;;
 16.1363 +	*-encore)
 16.1364 +		os=-bsd
 16.1365 +		;;
 16.1366 +	*-sgi)
 16.1367 +		os=-irix
 16.1368 +		;;
 16.1369 +	*-siemens)
 16.1370 +		os=-sysv4
 16.1371 +		;;
 16.1372 +	*-masscomp)
 16.1373 +		os=-rtu
 16.1374 +		;;
 16.1375 +	f30[01]-fujitsu | f700-fujitsu)
 16.1376 +		os=-uxpv
 16.1377 +		;;
 16.1378 +	*-rom68k)
 16.1379 +		os=-coff
 16.1380 +		;;
 16.1381 +	*-*bug)
 16.1382 +		os=-coff
 16.1383 +		;;
 16.1384 +	*-apple)
 16.1385 +		os=-macos
 16.1386 +		;;
 16.1387 +	*-atari*)
 16.1388 +		os=-mint
 16.1389 +		;;
 16.1390 +	*)
 16.1391 +		os=-none
 16.1392 +		;;
 16.1393 +esac
 16.1394 +fi
 16.1395 +
 16.1396 +# Here we handle the case where we know the os, and the CPU type, but not the
 16.1397 +# manufacturer.  We pick the logical manufacturer.
 16.1398 +vendor=unknown
 16.1399 +case $basic_machine in
 16.1400 +	*-unknown)
 16.1401 +		case $os in
 16.1402 +			-riscix*)
 16.1403 +				vendor=acorn
 16.1404 +				;;
 16.1405 +			-sunos*)
 16.1406 +				vendor=sun
 16.1407 +				;;
 16.1408 +			-aix*)
 16.1409 +				vendor=ibm
 16.1410 +				;;
 16.1411 +			-beos*)
 16.1412 +				vendor=be
 16.1413 +				;;
 16.1414 +			-hpux*)
 16.1415 +				vendor=hp
 16.1416 +				;;
 16.1417 +			-mpeix*)
 16.1418 +				vendor=hp
 16.1419 +				;;
 16.1420 +			-hiux*)
 16.1421 +				vendor=hitachi
 16.1422 +				;;
 16.1423 +			-unos*)
 16.1424 +				vendor=crds
 16.1425 +				;;
 16.1426 +			-dgux*)
 16.1427 +				vendor=dg
 16.1428 +				;;
 16.1429 +			-luna*)
 16.1430 +				vendor=omron
 16.1431 +				;;
 16.1432 +			-genix*)
 16.1433 +				vendor=ns
 16.1434 +				;;
 16.1435 +			-mvs* | -opened*)
 16.1436 +				vendor=ibm
 16.1437 +				;;
 16.1438 +			-ptx*)
 16.1439 +				vendor=sequent
 16.1440 +				;;
 16.1441 +			-vxsim* | -vxworks* | -windiss*)
 16.1442 +				vendor=wrs
 16.1443 +				;;
 16.1444 +			-aux*)
 16.1445 +				vendor=apple
 16.1446 +				;;
 16.1447 +			-hms*)
 16.1448 +				vendor=hitachi
 16.1449 +				;;
 16.1450 +			-mpw* | -macos*)
 16.1451 +				vendor=apple
 16.1452 +				;;
 16.1453 +			-*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*)
 16.1454 +				vendor=atari
 16.1455 +				;;
 16.1456 +			-vos*)
 16.1457 +				vendor=stratus
 16.1458 +				;;
 16.1459 +		esac
 16.1460 +		basic_machine=`echo $basic_machine | sed "s/unknown/$vendor/"`
 16.1461 +		;;
 16.1462 +esac
 16.1463 +
 16.1464 +echo $basic_machine$os
 16.1465 +exit 0
 16.1466 +
 16.1467 +# Local variables:
 16.1468 +# eval: (add-hook 'write-file-hooks 'time-stamp)
 16.1469 +# time-stamp-start: "timestamp='"
 16.1470 +# time-stamp-format: "%:y-%02m-%02d"
 16.1471 +# time-stamp-end: "'"
 16.1472 +# End:
    17.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    17.2 +++ b/configure	Sat Feb 20 21:18:28 2010 -0800
    17.3 @@ -0,0 +1,21094 @@
    17.4 +#! /bin/sh
    17.5 +# Guess values for system-dependent variables and create Makefiles.
    17.6 +# Generated by GNU Autoconf 2.59 for gift-gnutella 0.0.11.
    17.7 +#
    17.8 +# Copyright (C) 2003 Free Software Foundation, Inc.
    17.9 +# This configure script is free software; the Free Software Foundation
   17.10 +# gives unlimited permission to copy, distribute and modify it.
   17.11 +## --------------------- ##
   17.12 +## M4sh Initialization.  ##
   17.13 +## --------------------- ##
   17.14 +
   17.15 +# Be Bourne compatible
   17.16 +if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then
   17.17 +  emulate sh
   17.18 +  NULLCMD=:
   17.19 +  # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which
   17.20 +  # is contrary to our usage.  Disable this feature.
   17.21 +  alias -g '${1+"$@"}'='"$@"'
   17.22 +elif test -n "${BASH_VERSION+set}" && (set -o posix) >/dev/null 2>&1; then
   17.23 +  set -o posix
   17.24 +fi
   17.25 +DUALCASE=1; export DUALCASE # for MKS sh
   17.26 +
   17.27 +# Support unset when possible.
   17.28 +if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then
   17.29 +  as_unset=unset
   17.30 +else
   17.31 +  as_unset=false
   17.32 +fi
   17.33 +
   17.34 +
   17.35 +# Work around bugs in pre-3.0 UWIN ksh.
   17.36 +$as_unset ENV MAIL MAILPATH
   17.37 +PS1='$ '
   17.38 +PS2='> '
   17.39 +PS4='+ '
   17.40 +
   17.41 +# NLS nuisances.
   17.42 +for as_var in \
   17.43 +  LANG LANGUAGE LC_ADDRESS LC_ALL LC_COLLATE LC_CTYPE LC_IDENTIFICATION \
   17.44 +  LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER \
   17.45 +  LC_TELEPHONE LC_TIME
   17.46 +do
   17.47 +  if (set +x; test -z "`(eval $as_var=C; export $as_var) 2>&1`"); then
   17.48 +    eval $as_var=C; export $as_var
   17.49 +  else
   17.50 +    $as_unset $as_var
   17.51 +  fi
   17.52 +done
   17.53 +
   17.54 +# Required to use basename.
   17.55 +if expr a : '\(a\)' >/dev/null 2>&1; then
   17.56 +  as_expr=expr
   17.57 +else
   17.58 +  as_expr=false
   17.59 +fi
   17.60 +
   17.61 +if (basename /) >/dev/null 2>&1 && test "X`basename / 2>&1`" = "X/"; then
   17.62 +  as_basename=basename
   17.63 +else
   17.64 +  as_basename=false
   17.65 +fi
   17.66 +
   17.67 +
   17.68 +# Name of the executable.
   17.69 +as_me=`$as_basename "$0" ||
   17.70 +$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \
   17.71 +	 X"$0" : 'X\(//\)$' \| \
   17.72 +	 X"$0" : 'X\(/\)$' \| \
   17.73 +	 .     : '\(.\)' 2>/dev/null ||
   17.74 +echo X/"$0" |
   17.75 +    sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/; q; }
   17.76 +  	  /^X\/\(\/\/\)$/{ s//\1/; q; }
   17.77 +  	  /^X\/\(\/\).*/{ s//\1/; q; }
   17.78 +  	  s/.*/./; q'`
   17.79 +
   17.80 +
   17.81 +# PATH needs CR, and LINENO needs CR and PATH.
   17.82 +# Avoid depending upon Character Ranges.
   17.83 +as_cr_letters='abcdefghijklmnopqrstuvwxyz'
   17.84 +as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ'
   17.85 +as_cr_Letters=$as_cr_letters$as_cr_LETTERS
   17.86 +as_cr_digits='0123456789'
   17.87 +as_cr_alnum=$as_cr_Letters$as_cr_digits
   17.88 +
   17.89 +# The user is always right.
   17.90 +if test "${PATH_SEPARATOR+set}" != set; then
   17.91 +  echo "#! /bin/sh" >conf$$.sh
   17.92 +  echo  "exit 0"   >>conf$$.sh
   17.93 +  chmod +x conf$$.sh
   17.94 +  if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then
   17.95 +    PATH_SEPARATOR=';'
   17.96 +  else
   17.97 +    PATH_SEPARATOR=:
   17.98 +  fi
   17.99 +  rm -f conf$$.sh
  17.100 +fi
  17.101 +
  17.102 +
  17.103 +  as_lineno_1=$LINENO
  17.104 +  as_lineno_2=$LINENO
  17.105 +  as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null`
  17.106 +  test "x$as_lineno_1" != "x$as_lineno_2" &&
  17.107 +  test "x$as_lineno_3"  = "x$as_lineno_2"  || {
  17.108 +  # Find who we are.  Look in the path if we contain no path at all
  17.109 +  # relative or not.
  17.110 +  case $0 in
  17.111 +    *[\\/]* ) as_myself=$0 ;;
  17.112 +    *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
  17.113 +for as_dir in $PATH
  17.114 +do
  17.115 +  IFS=$as_save_IFS
  17.116 +  test -z "$as_dir" && as_dir=.
  17.117 +  test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break
  17.118 +done
  17.119 +
  17.120 +       ;;
  17.121 +  esac
  17.122 +  # We did not find ourselves, most probably we were run as `sh COMMAND'
  17.123 +  # in which case we are not to be found in the path.
  17.124 +  if test "x$as_myself" = x; then
  17.125 +    as_myself=$0
  17.126 +  fi
  17.127 +  if test ! -f "$as_myself"; then
  17.128 +    { echo "$as_me: error: cannot find myself; rerun with an absolute path" >&2
  17.129 +   { (exit 1); exit 1; }; }
  17.130 +  fi
  17.131 +  case $CONFIG_SHELL in
  17.132 +  '')
  17.133 +    as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
  17.134 +for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH
  17.135 +do
  17.136 +  IFS=$as_save_IFS
  17.137 +  test -z "$as_dir" && as_dir=.
  17.138 +  for as_base in sh bash ksh sh5; do
  17.139 +	 case $as_dir in
  17.140 +	 /*)
  17.141 +	   if ("$as_dir/$as_base" -c '
  17.142 +  as_lineno_1=$LINENO
  17.143 +  as_lineno_2=$LINENO
  17.144 +  as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null`
  17.145 +  test "x$as_lineno_1" != "x$as_lineno_2" &&
  17.146 +  test "x$as_lineno_3"  = "x$as_lineno_2" ') 2>/dev/null; then
  17.147 +	     $as_unset BASH_ENV || test "${BASH_ENV+set}" != set || { BASH_ENV=; export BASH_ENV; }
  17.148 +	     $as_unset ENV || test "${ENV+set}" != set || { ENV=; export ENV; }
  17.149 +	     CONFIG_SHELL=$as_dir/$as_base
  17.150 +	     export CONFIG_SHELL
  17.151 +	     exec "$CONFIG_SHELL" "$0" ${1+"$@"}
  17.152 +	   fi;;
  17.153 +	 esac
  17.154 +       done
  17.155 +done
  17.156 +;;
  17.157 +  esac
  17.158 +
  17.159 +  # Create $as_me.lineno as a copy of $as_myself, but with $LINENO
  17.160 +  # uniformly replaced by the line number.  The first 'sed' inserts a
  17.161 +  # line-number line before each line; the second 'sed' does the real
  17.162 +  # work.  The second script uses 'N' to pair each line-number line
  17.163 +  # with the numbered line, and appends trailing '-' during
  17.164 +  # substitution so that $LINENO is not a special case at line end.
  17.165 +  # (Raja R Harinath suggested sed '=', and Paul Eggert wrote the
  17.166 +  # second 'sed' script.  Blame Lee E. McMahon for sed's syntax.  :-)
  17.167 +  sed '=' <$as_myself |
  17.168 +    sed '
  17.169 +      N
  17.170 +      s,$,-,
  17.171 +      : loop
  17.172 +      s,^\(['$as_cr_digits']*\)\(.*\)[$]LINENO\([^'$as_cr_alnum'_]\),\1\2\1\3,
  17.173 +      t loop
  17.174 +      s,-$,,
  17.175 +      s,^['$as_cr_digits']*\n,,
  17.176 +    ' >$as_me.lineno &&
  17.177 +  chmod +x $as_me.lineno ||
  17.178 +    { echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2
  17.179 +   { (exit 1); exit 1; }; }
  17.180 +
  17.181 +  # Don't try to exec as it changes $[0], causing all sort of problems
  17.182 +  # (the dirname of $[0] is not the place where we might find the
  17.183 +  # original and so on.  Autoconf is especially sensible to this).
  17.184 +  . ./$as_me.lineno
  17.185 +  # Exit status is that of the last command.
  17.186 +  exit
  17.187 +}
  17.188 +
  17.189 +
  17.190 +case `echo "testing\c"; echo 1,2,3`,`echo -n testing; echo 1,2,3` in
  17.191 +  *c*,-n*) ECHO_N= ECHO_C='
  17.192 +' ECHO_T='	' ;;
  17.193 +  *c*,*  ) ECHO_N=-n ECHO_C= ECHO_T= ;;
  17.194 +  *)       ECHO_N= ECHO_C='\c' ECHO_T= ;;
  17.195 +esac
  17.196 +
  17.197 +if expr a : '\(a\)' >/dev/null 2>&1; then
  17.198 +  as_expr=expr
  17.199 +else
  17.200 +  as_expr=false
  17.201 +fi
  17.202 +
  17.203 +rm -f conf$$ conf$$.exe conf$$.file
  17.204 +echo >conf$$.file
  17.205 +if ln -s conf$$.file conf$$ 2>/dev/null; then
  17.206 +  # We could just check for DJGPP; but this test a) works b) is more generic
  17.207 +  # and c) will remain valid once DJGPP supports symlinks (DJGPP 2.04).
  17.208 +  if test -f conf$$.exe; then
  17.209 +    # Don't use ln at all; we don't have any links
  17.210 +    as_ln_s='cp -p'
  17.211 +  else
  17.212 +    as_ln_s='ln -s'
  17.213 +  fi
  17.214 +elif ln conf$$.file conf$$ 2>/dev/null; then
  17.215 +  as_ln_s=ln
  17.216 +else
  17.217 +  as_ln_s='cp -p'
  17.218 +fi
  17.219 +rm -f conf$$ conf$$.exe conf$$.file
  17.220 +
  17.221 +if mkdir -p . 2>/dev/null; then
  17.222 +  as_mkdir_p=:
  17.223 +else
  17.224 +  test -d ./-p && rmdir ./-p
  17.225 +  as_mkdir_p=false
  17.226 +fi
  17.227 +
  17.228 +as_executable_p="test -f"
  17.229 +
  17.230 +# Sed expression to map a string onto a valid CPP name.
  17.231 +as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'"
  17.232 +
  17.233 +# Sed expression to map a string onto a valid variable name.
  17.234 +as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'"
  17.235 +
  17.236 +
  17.237 +# IFS
  17.238 +# We need space, tab and new line, in precisely that order.
  17.239 +as_nl='
  17.240 +'
  17.241 +IFS=" 	$as_nl"
  17.242 +
  17.243 +# CDPATH.
  17.244 +$as_unset CDPATH
  17.245 +
  17.246 +
  17.247 +
  17.248 +# Check that we are running under the correct shell.
  17.249 +SHELL=${CONFIG_SHELL-/bin/sh}
  17.250 +
  17.251 +case X$ECHO in
  17.252 +X*--fallback-echo)
  17.253 +  # Remove one level of quotation (which was required for Make).
  17.254 +  ECHO=`echo "$ECHO" | sed 's,\\\\\$\\$0,'$0','`
  17.255 +  ;;
  17.256 +esac
  17.257 +
  17.258 +echo=${ECHO-echo}
  17.259 +if test "X$1" = X--no-reexec; then
  17.260 +  # Discard the --no-reexec flag, and continue.
  17.261 +  shift
  17.262 +elif test "X$1" = X--fallback-echo; then
  17.263 +  # Avoid inline document here, it may be left over
  17.264 +  :
  17.265 +elif test "X`($echo '\t') 2>/dev/null`" = 'X\t' ; then
  17.266 +  # Yippee, $echo works!
  17.267 +  :
  17.268 +else
  17.269 +  # Restart under the correct shell.
  17.270 +  exec $SHELL "$0" --no-reexec ${1+"$@"}
  17.271 +fi
  17.272 +
  17.273 +if test "X$1" = X--fallback-echo; then
  17.274 +  # used as fallback echo
  17.275 +  shift
  17.276 +  cat <<EOF
  17.277 +$*
  17.278 +EOF
  17.279 +  exit 0
  17.280 +fi
  17.281 +
  17.282 +# The HP-UX ksh and POSIX shell print the target directory to stdout
  17.283 +# if CDPATH is set.
  17.284 +(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
  17.285 +
  17.286 +if test -z "$ECHO"; then
  17.287 +if test "X${echo_test_string+set}" != Xset; then
  17.288 +# find a string as large as possible, as long as the shell can cope with it
  17.289 +  for cmd in 'sed 50q "$0"' 'sed 20q "$0"' 'sed 10q "$0"' 'sed 2q "$0"' 'echo test'; do
  17.290 +    # expected sizes: less than 2Kb, 1Kb, 512 bytes, 16 bytes, ...
  17.291 +    if (echo_test_string=`eval $cmd`) 2>/dev/null &&
  17.292 +       echo_test_string=`eval $cmd` &&
  17.293 +       (test "X$echo_test_string" = "X$echo_test_string") 2>/dev/null
  17.294 +    then
  17.295 +      break
  17.296 +    fi
  17.297 +  done
  17.298 +fi
  17.299 +
  17.300 +if test "X`($echo '\t') 2>/dev/null`" = 'X\t' &&
  17.301 +   echo_testing_string=`($echo "$echo_test_string") 2>/dev/null` &&
  17.302 +   test "X$echo_testing_string" = "X$echo_test_string"; then
  17.303 +  :
  17.304 +else
  17.305 +  # The Solaris, AIX, and Digital Unix default echo programs unquote
  17.306 +  # backslashes.  This makes it impossible to quote backslashes using
  17.307 +  #   echo "$something" | sed 's/\\/\\\\/g'
  17.308 +  #
  17.309 +  # So, first we look for a working echo in the user's PATH.
  17.310 +
  17.311 +  lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
  17.312 +  for dir in $PATH /usr/ucb; do
  17.313 +    IFS="$lt_save_ifs"
  17.314 +    if (test -f $dir/echo || test -f $dir/echo$ac_exeext) &&
  17.315 +       test "X`($dir/echo '\t') 2>/dev/null`" = 'X\t' &&
  17.316 +       echo_testing_string=`($dir/echo "$echo_test_string") 2>/dev/null` &&
  17.317 +       test "X$echo_testing_string" = "X$echo_test_string"; then
  17.318 +      echo="$dir/echo"
  17.319 +      break
  17.320 +    fi
  17.321 +  done
  17.322 +  IFS="$lt_save_ifs"
  17.323 +
  17.324 +  if test "X$echo" = Xecho; then
  17.325 +    # We didn't find a better echo, so look for alternatives.
  17.326 +    if test "X`(print -r '\t') 2>/dev/null`" = 'X\t' &&
  17.327 +       echo_testing_string=`(print -r "$echo_test_string") 2>/dev/null` &&
  17.328 +       test "X$echo_testing_string" = "X$echo_test_string"; then
  17.329 +      # This shell has a builtin print -r that does the trick.
  17.330 +      echo='print -r'
  17.331 +    elif (test -f /bin/ksh || test -f /bin/ksh$ac_exeext) &&
  17.332 +	 test "X$CONFIG_SHELL" != X/bin/ksh; then
  17.333 +      # If we have ksh, try running configure again with it.
  17.334 +      ORIGINAL_CONFIG_SHELL=${CONFIG_SHELL-/bin/sh}
  17.335 +      export ORIGINAL_CONFIG_SHELL
  17.336 +      CONFIG_SHELL=/bin/ksh
  17.337 +      export CONFIG_SHELL
  17.338 +      exec $CONFIG_SHELL "$0" --no-reexec ${1+"$@"}
  17.339 +    else
  17.340 +      # Try using printf.
  17.341 +      echo='printf %s\n'
  17.342 +      if test "X`($echo '\t') 2>/dev/null`" = 'X\t' &&
  17.343 +	 echo_testing_string=`($echo "$echo_test_string") 2>/dev/null` &&
  17.344 +	 test "X$echo_testing_string" = "X$echo_test_string"; then
  17.345 +	# Cool, printf works
  17.346 +	:
  17.347 +      elif echo_testing_string=`($ORIGINAL_CONFIG_SHELL "$0" --fallback-echo '\t') 2>/dev/null` &&
  17.348 +	   test "X$echo_testing_string" = 'X\t' &&
  17.349 +	   echo_testing_string=`($ORIGINAL_CONFIG_SHELL "$0" --fallback-echo "$echo_test_string") 2>/dev/null` &&
  17.350 +	   test "X$echo_testing_string" = "X$echo_test_string"; then
  17.351 +	CONFIG_SHELL=$ORIGINAL_CONFIG_SHELL
  17.352 +	export CONFIG_SHELL
  17.353 +	SHELL="$CONFIG_SHELL"
  17.354 +	export SHELL
  17.355 +	echo="$CONFIG_SHELL $0 --fallback-echo"
  17.356 +      elif echo_testing_string=`($CONFIG_SHELL "$0" --fallback-echo '\t') 2>/dev/null` &&
  17.357 +	   test "X$echo_testing_string" = 'X\t' &&
  17.358 +	   echo_testing_string=`($CONFIG_SHELL "$0" --fallback-echo "$echo_test_string") 2>/dev/null` &&
  17.359 +	   test "X$echo_testing_string" = "X$echo_test_string"; then
  17.360 +	echo="$CONFIG_SHELL $0 --fallback-echo"
  17.361 +      else
  17.362 +	# maybe with a smaller string...
  17.363 +	prev=:
  17.364 +
  17.365 +	for cmd in 'echo test' 'sed 2q "$0"' 'sed 10q "$0"' 'sed 20q "$0"' 'sed 50q "$0"'; do
  17.366 +	  if (test "X$echo_test_string" = "X`eval $cmd`") 2>/dev/null
  17.367 +	  then
  17.368 +	    break
  17.369 +	  fi
  17.370 +	  prev="$cmd"
  17.371 +	done
  17.372 +
  17.373 +	if test "$prev" != 'sed 50q "$0"'; then
  17.374 +	  echo_test_string=`eval $prev`
  17.375 +	  export echo_test_string
  17.376 +	  exec ${ORIGINAL_CONFIG_SHELL-${CONFIG_SHELL-/bin/sh}} "$0" ${1+"$@"}
  17.377 +	else
  17.378 +	  # Oops.  We lost completely, so just stick with echo.
  17.379 +	  echo=echo
  17.380 +	fi
  17.381 +      fi
  17.382 +    fi
  17.383 +  fi
  17.384 +fi
  17.385 +fi
  17.386 +
  17.387 +# Copy echo and quote the copy suitably for passing to libtool from
  17.388 +# the Makefile, instead of quoting the original, which is used later.
  17.389 +ECHO=$echo
  17.390 +if test "X$ECHO" = "X$CONFIG_SHELL $0 --fallback-echo"; then
  17.391 +   ECHO="$CONFIG_SHELL \\\$\$0 --fallback-echo"
  17.392 +fi
  17.393 +
  17.394 +
  17.395 +
  17.396 +
  17.397 +tagnames=${tagnames+${tagnames},}CXX
  17.398 +
  17.399 +tagnames=${tagnames+${tagnames},}F77
  17.400 +
  17.401 +# Name of the host.
  17.402 +# hostname on some systems (SVR3.2, Linux) returns a bogus exit status,
  17.403 +# so uname gets run too.
  17.404 +ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q`
  17.405 +
  17.406 +exec 6>&1
  17.407 +
  17.408 +#
  17.409 +# Initializations.
  17.410 +#
  17.411 +ac_default_prefix=/usr/local
  17.412 +ac_config_libobj_dir=.
  17.413 +cross_compiling=no
  17.414 +subdirs=
  17.415 +MFLAGS=
  17.416 +MAKEFLAGS=
  17.417 +SHELL=${CONFIG_SHELL-/bin/sh}
  17.418 +
  17.419 +# Maximum number of lines to put in a shell here document.
  17.420 +# This variable seems obsolete.  It should probably be removed, and
  17.421 +# only ac_max_sed_lines should be used.
  17.422 +: ${ac_max_here_lines=38}
  17.423 +
  17.424 +# Identity of this package.
  17.425 +PACKAGE_NAME='gift-gnutella'
  17.426 +PACKAGE_TARNAME='gift-gnutella'
  17.427 +PACKAGE_VERSION='0.0.11'
  17.428 +PACKAGE_STRING='gift-gnutella 0.0.11'
  17.429 +PACKAGE_BUGREPORT=''
  17.430 +
  17.431 +ac_unique_file="src/gt_gnutella.h"
  17.432 +# Factoring default headers for most tests.
  17.433 +ac_includes_default="\
  17.434 +#include <stdio.h>
  17.435 +#if HAVE_SYS_TYPES_H
  17.436 +# include <sys/types.h>
  17.437 +#endif
  17.438 +#if HAVE_SYS_STAT_H
  17.439 +# include <sys/stat.h>
  17.440 +#endif
  17.441 +#if STDC_HEADERS
  17.442 +# include <stdlib.h>
  17.443 +# include <stddef.h>
  17.444 +#else
  17.445 +# if HAVE_STDLIB_H
  17.446 +#  include <stdlib.h>
  17.447 +# endif
  17.448 +#endif
  17.449 +#if HAVE_STRING_H
  17.450 +# if !STDC_HEADERS && HAVE_MEMORY_H
  17.451 +#  include <memory.h>
  17.452 +# endif
  17.453 +# include <string.h>
  17.454 +#endif
  17.455 +#if HAVE_STRINGS_H
  17.456 +# include <strings.h>
  17.457 +#endif
  17.458 +#if HAVE_INTTYPES_H
  17.459 +# include <inttypes.h>
  17.460 +#else
  17.461 +# if HAVE_STDINT_H
  17.462 +#  include <stdint.h>
  17.463 +# endif
  17.464 +#endif
  17.465 +#if HAVE_UNISTD_H
  17.466 +# include <unistd.h>
  17.467 +#endif"
  17.468 +
  17.469 +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 AMTAR install_sh STRIP ac_ct_STRIP INSTALL_STRIP_PROGRAM AWK SET_MAKE am__leading_dot 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 CPP EGREP build build_cpu build_vendor build_os host host_cpu host_vendor host_os LN_S ECHO AR ac_ct_AR RANLIB ac_ct_RANLIB CXX CXXFLAGS ac_ct_CXX CXXDEPMODE am__fastdepCXX_TRUE am__fastdepCXX_FALSE CXXCPP F77 FFLAGS ac_ct_F77 LIBTOOL PLUGIN_LDFLAGS PKG_CONFIG GNUTELLA_CFLAGS GNUTELLA_LIBS USE_ZLIB XML2_CONFIG LIBXML2_CFLAGS LIBXML2_LIBS LIBOBJS LTLIBOBJS'
  17.470 +ac_subst_files=''
  17.471 +
  17.472 +# Initialize some variables set by options.
  17.473 +ac_init_help=
  17.474 +ac_init_version=false
  17.475 +# The variables have the same names as the options, with
  17.476 +# dashes changed to underlines.
  17.477 +cache_file=/dev/null
  17.478 +exec_prefix=NONE
  17.479 +no_create=
  17.480 +no_recursion=
  17.481 +prefix=NONE
  17.482 +program_prefix=NONE
  17.483 +program_suffix=NONE
  17.484 +program_transform_name=s,x,x,
  17.485 +silent=
  17.486 +site=
  17.487 +srcdir=
  17.488 +verbose=
  17.489 +x_includes=NONE
  17.490 +x_libraries=NONE
  17.491 +
  17.492 +# Installation directory options.
  17.493 +# These are left unexpanded so users can "make install exec_prefix=/foo"
  17.494 +# and all the variables that are supposed to be based on exec_prefix
  17.495 +# by default will actually change.
  17.496 +# Use braces instead of parens because sh, perl, etc. also accept them.
  17.497 +bindir='${exec_prefix}/bin'
  17.498 +sbindir='${exec_prefix}/sbin'
  17.499 +libexecdir='${exec_prefix}/libexec'
  17.500 +datadir='${prefix}/share'
  17.501 +sysconfdir='${prefix}/etc'
  17.502 +sharedstatedir='${prefix}/com'
  17.503 +localstatedir='${prefix}/var'
  17.504 +libdir='${exec_prefix}/lib'
  17.505 +includedir='${prefix}/include'
  17.506 +oldincludedir='/usr/include'
  17.507 +infodir='${prefix}/info'
  17.508 +mandir='${prefix}/man'
  17.509 +
  17.510 +ac_prev=
  17.511 +for ac_option
  17.512 +do
  17.513 +  # If the previous option needs an argument, assign it.
  17.514 +  if test -n "$ac_prev"; then
  17.515 +    eval "$ac_prev=\$ac_option"
  17.516 +    ac_prev=
  17.517 +    continue
  17.518 +  fi
  17.519 +
  17.520 +  ac_optarg=`expr "x$ac_option" : 'x[^=]*=\(.*\)'`
  17.521 +
  17.522 +  # Accept the important Cygnus configure options, so we can diagnose typos.
  17.523 +
  17.524 +  case $ac_option in
  17.525 +
  17.526 +  -bindir | --bindir | --bindi | --bind | --bin | --bi)
  17.527 +    ac_prev=bindir ;;
  17.528 +  -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*)
  17.529 +    bindir=$ac_optarg ;;
  17.530 +
  17.531 +  -build | --build | --buil | --bui | --bu)
  17.532 +    ac_prev=build_alias ;;
  17.533 +  -build=* | --build=* | --buil=* | --bui=* | --bu=*)
  17.534 +    build_alias=$ac_optarg ;;
  17.535 +
  17.536 +  -cache-file | --cache-file | --cache-fil | --cache-fi \
  17.537 +  | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c)
  17.538 +    ac_prev=cache_file ;;
  17.539 +  -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \
  17.540 +  | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*)
  17.541 +    cache_file=$ac_optarg ;;
  17.542 +
  17.543 +  --config-cache | -C)
  17.544 +    cache_file=config.cache ;;
  17.545 +
  17.546 +  -datadir | --datadir | --datadi | --datad | --data | --dat | --da)
  17.547 +    ac_prev=datadir ;;
  17.548 +  -datadir=* | --datadir=* | --datadi=* | --datad=* | --data=* | --dat=* \
  17.549 +  | --da=*)
  17.550 +    datadir=$ac_optarg ;;
  17.551 +
  17.552 +  -disable-* | --disable-*)
  17.553 +    ac_feature=`expr "x$ac_option" : 'x-*disable-\(.*\)'`
  17.554 +    # Reject names that are not valid shell variable names.
  17.555 +    expr "x$ac_feature" : ".*[^-_$as_cr_alnum]" >/dev/null &&
  17.556 +      { echo "$as_me: error: invalid feature name: $ac_feature" >&2
  17.557 +   { (exit 1); exit 1; }; }
  17.558 +    ac_feature=`echo $ac_feature | sed 's/-/_/g'`
  17.559 +    eval "enable_$ac_feature=no" ;;
  17.560 +
  17.561 +  -enable-* | --enable-*)
  17.562 +    ac_feature=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'`
  17.563 +    # Reject names that are not valid shell variable names.
  17.564 +    expr "x$ac_feature" : ".*[^-_$as_cr_alnum]" >/dev/null &&
  17.565 +      { echo "$as_me: error: invalid feature name: $ac_feature" >&2
  17.566 +   { (exit 1); exit 1; }; }
  17.567 +    ac_feature=`echo $ac_feature | sed 's/-/_/g'`
  17.568 +    case $ac_option in
  17.569 +      *=*) ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"`;;
  17.570 +      *) ac_optarg=yes ;;
  17.571 +    esac
  17.572 +    eval "enable_$ac_feature='$ac_optarg'" ;;
  17.573 +
  17.574 +  -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \
  17.575 +  | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \
  17.576 +  | --exec | --exe | --ex)
  17.577 +    ac_prev=exec_prefix ;;
  17.578 +  -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \
  17.579 +  | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \
  17.580 +  | --exec=* | --exe=* | --ex=*)
  17.581 +    exec_prefix=$ac_optarg ;;
  17.582 +
  17.583 +  -gas | --gas | --ga | --g)
  17.584 +    # Obsolete; use --with-gas.
  17.585 +    with_gas=yes ;;
  17.586 +
  17.587 +  -help | --help | --hel | --he | -h)
  17.588 +    ac_init_help=long ;;
  17.589 +  -help=r* | --help=r* | --hel=r* | --he=r* | -hr*)
  17.590 +    ac_init_help=recursive ;;
  17.591 +  -help=s* | --help=s* | --hel=s* | --he=s* | -hs*)
  17.592 +    ac_init_help=short ;;
  17.593 +
  17.594 +  -host | --host | --hos | --ho)
  17.595 +    ac_prev=host_alias ;;
  17.596 +  -host=* | --host=* | --hos=* | --ho=*)
  17.597 +    host_alias=$ac_optarg ;;
  17.598 +
  17.599 +  -includedir | --includedir | --includedi | --included | --include \
  17.600 +  | --includ | --inclu | --incl | --inc)
  17.601 +    ac_prev=includedir ;;
  17.602 +  -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \
  17.603 +  | --includ=* | --inclu=* | --incl=* | --inc=*)
  17.604 +    includedir=$ac_optarg ;;
  17.605 +
  17.606 +  -infodir | --infodir | --infodi | --infod | --info | --inf)
  17.607 +    ac_prev=infodir ;;
  17.608 +  -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*)
  17.609 +    infodir=$ac_optarg ;;
  17.610 +
  17.611 +  -libdir | --libdir | --libdi | --libd)
  17.612 +    ac_prev=libdir ;;
  17.613 +  -libdir=* | --libdir=* | --libdi=* | --libd=*)
  17.614 +    libdir=$ac_optarg ;;
  17.615 +
  17.616 +  -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \
  17.617 +  | --libexe | --libex | --libe)
  17.618 +    ac_prev=libexecdir ;;
  17.619 +  -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \
  17.620 +  | --libexe=* | --libex=* | --libe=*)
  17.621 +    libexecdir=$ac_optarg ;;
  17.622 +
  17.623 +  -localstatedir | --localstatedir | --localstatedi | --localstated \
  17.624 +  | --localstate | --localstat | --localsta | --localst \
  17.625 +  | --locals | --local | --loca | --loc | --lo)
  17.626 +    ac_prev=localstatedir ;;
  17.627 +  -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \
  17.628 +  | --localstate=* | --localstat=* | --localsta=* | --localst=* \
  17.629 +  | --locals=* | --local=* | --loca=* | --loc=* | --lo=*)
  17.630 +    localstatedir=$ac_optarg ;;
  17.631 +
  17.632 +  -mandir | --mandir | --mandi | --mand | --man | --ma | --m)
  17.633 +    ac_prev=mandir ;;
  17.634 +  -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*)
  17.635 +    mandir=$ac_optarg ;;
  17.636 +
  17.637 +  -nfp | --nfp | --nf)
  17.638 +    # Obsolete; use --without-fp.
  17.639 +    with_fp=no ;;
  17.640 +
  17.641 +  -no-create | --no-create | --no-creat | --no-crea | --no-cre \
  17.642 +  | --no-cr | --no-c | -n)
  17.643 +    no_create=yes ;;
  17.644 +
  17.645 +  -no-recursion | --no-recursion | --no-recursio | --no-recursi \
  17.646 +  | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r)
  17.647 +    no_recursion=yes ;;
  17.648 +
  17.649 +  -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \
  17.650 +  | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \
  17.651 +  | --oldin | --oldi | --old | --ol | --o)
  17.652 +    ac_prev=oldincludedir ;;
  17.653 +  -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \
  17.654 +  | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \
  17.655 +  | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*)
  17.656 +    oldincludedir=$ac_optarg ;;
  17.657 +
  17.658 +  -prefix | --prefix | --prefi | --pref | --pre | --pr | --p)
  17.659 +    ac_prev=prefix ;;
  17.660 +  -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*)
  17.661 +    prefix=$ac_optarg ;;
  17.662 +
  17.663 +  -program-prefix | --program-prefix | --program-prefi | --program-pref \
  17.664 +  | --program-pre | --program-pr | --program-p)
  17.665 +    ac_prev=program_prefix ;;
  17.666 +  -program-prefix=* | --program-prefix=* | --program-prefi=* \
  17.667 +  | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*)
  17.668 +    program_prefix=$ac_optarg ;;
  17.669 +
  17.670 +  -program-suffix | --program-suffix | --program-suffi | --program-suff \
  17.671 +  | --program-suf | --program-su | --program-s)
  17.672 +    ac_prev=program_suffix ;;
  17.673 +  -program-suffix=* | --program-suffix=* | --program-suffi=* \
  17.674 +  | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*)
  17.675 +    program_suffix=$ac_optarg ;;
  17.676 +
  17.677 +  -program-transform-name | --program-transform-name \
  17.678 +  | --program-transform-nam | --program-transform-na \
  17.679 +  | --program-transform-n | --program-transform- \
  17.680 +  | --program-transform | --program-transfor \
  17.681 +  | --program-transfo | --program-transf \
  17.682 +  | --program-trans | --program-tran \
  17.683 +  | --progr-tra | --program-tr | --program-t)
  17.684 +    ac_prev=program_transform_name ;;
  17.685 +  -program-transform-name=* | --program-transform-name=* \
  17.686 +  | --program-transform-nam=* | --program-transform-na=* \
  17.687 +  | --program-transform-n=* | --program-transform-=* \
  17.688 +  | --program-transform=* | --program-transfor=* \
  17.689 +  | --program-transfo=* | --program-transf=* \
  17.690 +  | --program-trans=* | --program-tran=* \
  17.691 +  | --progr-tra=* | --program-tr=* | --program-t=*)
  17.692 +    program_transform_name=$ac_optarg ;;
  17.693 +
  17.694 +  -q | -quiet | --quiet | --quie | --qui | --qu | --q \
  17.695 +  | -silent | --silent | --silen | --sile | --sil)
  17.696 +    silent=yes ;;
  17.697 +
  17.698 +  -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb)
  17.699 +    ac_prev=sbindir ;;
  17.700 +  -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \
  17.701 +  | --sbi=* | --sb=*)
  17.702 +    sbindir=$ac_optarg ;;
  17.703 +
  17.704 +  -sharedstatedir | --sharedstatedir | --sharedstatedi \
  17.705 +  | --sharedstated | --sharedstate | --sharedstat | --sharedsta \
  17.706 +  | --sharedst | --shareds | --shared | --share | --shar \
  17.707 +  | --sha | --sh)
  17.708 +    ac_prev=sharedstatedir ;;
  17.709 +  -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \
  17.710 +  | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \
  17.711 +  | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \
  17.712 +  | --sha=* | --sh=*)
  17.713 +    sharedstatedir=$ac_optarg ;;
  17.714 +
  17.715 +  -site | --site | --sit)
  17.716 +    ac_prev=site ;;
  17.717 +  -site=* | --site=* | --sit=*)
  17.718 +    site=$ac_optarg ;;
  17.719 +
  17.720 +  -srcdir | --srcdir | --srcdi | --srcd | --src | --sr)
  17.721 +    ac_prev=srcdir ;;
  17.722 +  -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*)
  17.723 +    srcdir=$ac_optarg ;;
  17.724 +
  17.725 +  -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \
  17.726 +  | --syscon | --sysco | --sysc | --sys | --sy)
  17.727 +    ac_prev=sysconfdir ;;
  17.728 +  -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \
  17.729 +  | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*)
  17.730 +    sysconfdir=$ac_optarg ;;
  17.731 +
  17.732 +  -target | --target | --targe | --targ | --tar | --ta | --t)
  17.733 +    ac_prev=target_alias ;;
  17.734 +  -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*)
  17.735 +    target_alias=$ac_optarg ;;
  17.736 +
  17.737 +  -v | -verbose | --verbose | --verbos | --verbo | --verb)
  17.738 +    verbose=yes ;;
  17.739 +
  17.740 +  -version | --version | --versio | --versi | --vers | -V)
  17.741 +    ac_init_version=: ;;
  17.742 +
  17.743 +  -with-* | --with-*)
  17.744 +    ac_package=`expr "x$ac_option" : 'x-*with-\([^=]*\)'`
  17.745 +    # Reject names that are not valid shell variable names.
  17.746 +    expr "x$ac_package" : ".*[^-_$as_cr_alnum]" >/dev/null &&
  17.747 +      { echo "$as_me: error: invalid package name: $ac_package" >&2
  17.748 +   { (exit 1); exit 1; }; }
  17.749 +    ac_package=`echo $ac_package| sed 's/-/_/g'`
  17.750 +    case $ac_option in
  17.751 +      *=*) ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"`;;
  17.752 +      *) ac_optarg=yes ;;
  17.753 +    esac
  17.754 +    eval "with_$ac_package='$ac_optarg'" ;;
  17.755 +
  17.756 +  -without-* | --without-*)
  17.757 +    ac_package=`expr "x$ac_option" : 'x-*without-\(.*\)'`
  17.758 +    # Reject names that are not valid shell variable names.
  17.759 +    expr "x$ac_package" : ".*[^-_$as_cr_alnum]" >/dev/null &&
  17.760 +      { echo "$as_me: error: invalid package name: $ac_package" >&2
  17.761 +   { (exit 1); exit 1; }; }
  17.762 +    ac_package=`echo $ac_package | sed 's/-/_/g'`
  17.763 +    eval "with_$ac_package=no" ;;
  17.764 +
  17.765 +  --x)
  17.766 +    # Obsolete; use --with-x.
  17.767 +    with_x=yes ;;
  17.768 +
  17.769 +  -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \
  17.770 +  | --x-incl | --x-inc | --x-in | --x-i)
  17.771 +    ac_prev=x_includes ;;
  17.772 +  -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \
  17.773 +  | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*)
  17.774 +    x_includes=$ac_optarg ;;
  17.775 +
  17.776 +  -x-libraries | --x-libraries | --x-librarie | --x-librari \
  17.777 +  | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l)
  17.778 +    ac_prev=x_libraries ;;
  17.779 +  -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \
  17.780 +  | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*)
  17.781 +    x_libraries=$ac_optarg ;;
  17.782 +
  17.783 +  -*) { echo "$as_me: error: unrecognized option: $ac_option
  17.784 +Try \`$0 --help' for more information." >&2
  17.785 +   { (exit 1); exit 1; }; }
  17.786 +    ;;
  17.787 +
  17.788 +  *=*)
  17.789 +    ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='`
  17.790 +    # Reject names that are not valid shell variable names.
  17.791 +    expr "x$ac_envvar" : ".*[^_$as_cr_alnum]" >/dev/null &&
  17.792 +      { echo "$as_me: error: invalid variable name: $ac_envvar" >&2
  17.793 +   { (exit 1); exit 1; }; }
  17.794 +    ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"`
  17.795 +    eval "$ac_envvar='$ac_optarg'"
  17.796 +    export $ac_envvar ;;
  17.797 +
  17.798 +  *)
  17.799 +    # FIXME: should be removed in autoconf 3.0.
  17.800 +    echo "$as_me: WARNING: you should use --build, --host, --target" >&2
  17.801 +    expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null &&
  17.802 +      echo "$as_me: WARNING: invalid host type: $ac_option" >&2
  17.803 +    : ${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option}
  17.804 +    ;;
  17.805 +
  17.806 +  esac
  17.807 +done
  17.808 +
  17.809 +if test -n "$ac_prev"; then
  17.810 +  ac_option=--`echo $ac_prev | sed 's/_/-/g'`
  17.811 +  { echo "$as_me: error: missing argument to $ac_option" >&2
  17.812 +   { (exit 1); exit 1; }; }
  17.813 +fi
  17.814 +
  17.815 +# Be sure to have absolute paths.
  17.816 +for ac_var in exec_prefix prefix
  17.817 +do
  17.818 +  eval ac_val=$`echo $ac_var`
  17.819 +  case $ac_val in
  17.820 +    [\\/$]* | ?:[\\/]* | NONE | '' ) ;;
  17.821 +    *)  { echo "$as_me: error: expected an absolute directory name for --$ac_var: $ac_val" >&2
  17.822 +   { (exit 1); exit 1; }; };;
  17.823 +  esac
  17.824 +done
  17.825 +
  17.826 +# Be sure to have absolute paths.
  17.827 +for ac_var in bindir sbindir libexecdir datadir sysconfdir sharedstatedir \
  17.828 +	      localstatedir libdir includedir oldincludedir infodir mandir
  17.829 +do
  17.830 +  eval ac_val=$`echo $ac_var`
  17.831 +  case $ac_val in
  17.832 +    [\\/$]* | ?:[\\/]* ) ;;
  17.833 +    *)  { echo "$as_me: error: expected an absolute directory name for --$ac_var: $ac_val" >&2
  17.834 +   { (exit 1); exit 1; }; };;
  17.835 +  esac
  17.836 +done
  17.837 +
  17.838 +# There might be people who depend on the old broken behavior: `$host'
  17.839 +# used to hold the argument of --host etc.
  17.840 +# FIXME: To remove some day.
  17.841 +build=$build_alias
  17.842 +host=$host_alias
  17.843 +target=$target_alias
  17.844 +
  17.845 +# FIXME: To remove some day.
  17.846 +if test "x$host_alias" != x; then
  17.847 +  if test "x$build_alias" = x; then
  17.848 +    cross_compiling=maybe
  17.849 +    echo "$as_me: WARNING: If you wanted to set the --build type, don't use --host.
  17.850 +    If a cross compiler is detected then cross compile mode will be used." >&2
  17.851 +  elif test "x$build_alias" != "x$host_alias"; then
  17.852 +    cross_compiling=yes
  17.853 +  fi
  17.854 +fi
  17.855 +
  17.856 +ac_tool_prefix=
  17.857 +test -n "$host_alias" && ac_tool_prefix=$host_alias-
  17.858 +
  17.859 +test "$silent" = yes && exec 6>/dev/null
  17.860 +
  17.861 +
  17.862 +# Find the source files, if location was not specified.
  17.863 +if test -z "$srcdir"; then
  17.864 +  ac_srcdir_defaulted=yes
  17.865 +  # Try the directory containing this script, then its parent.
  17.866 +  ac_confdir=`(dirname "$0") 2>/dev/null ||
  17.867 +$as_expr X"$0" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
  17.868 +	 X"$0" : 'X\(//\)[^/]' \| \
  17.869 +	 X"$0" : 'X\(//\)$' \| \
  17.870 +	 X"$0" : 'X\(/\)' \| \
  17.871 +	 .     : '\(.\)' 2>/dev/null ||
  17.872 +echo X"$0" |
  17.873 +    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
  17.874 +  	  /^X\(\/\/\)[^/].*/{ s//\1/; q; }
  17.875 +  	  /^X\(\/\/\)$/{ s//\1/; q; }
  17.876 +  	  /^X\(\/\).*/{ s//\1/; q; }
  17.877 +  	  s/.*/./; q'`
  17.878 +  srcdir=$ac_confdir
  17.879 +  if test ! -r $srcdir/$ac_unique_file; then
  17.880 +    srcdir=..
  17.881 +  fi
  17.882 +else
  17.883 +  ac_srcdir_defaulted=no
  17.884 +fi
  17.885 +if test ! -r $srcdir/$ac_unique_file; then
  17.886 +  if test "$ac_srcdir_defaulted" = yes; then
  17.887 +    { echo "$as_me: error: cannot find sources ($ac_unique_file) in $ac_confdir or .." >&2
  17.888 +   { (exit 1); exit 1; }; }
  17.889 +  else
  17.890 +    { echo "$as_me: error: cannot find sources ($ac_unique_file) in $srcdir" >&2
  17.891 +   { (exit 1); exit 1; }; }
  17.892 +  fi
  17.893 +fi
  17.894 +(cd $srcdir && test -r ./$ac_unique_file) 2>/dev/null ||
  17.895 +  { echo "$as_me: error: sources are in $srcdir, but \`cd $srcdir' does not work" >&2
  17.896 +   { (exit 1); exit 1; }; }
  17.897 +srcdir=`echo "$srcdir" | sed 's%\([^\\/]\)[\\/]*$%\1%'`
  17.898 +ac_env_build_alias_set=${build_alias+set}
  17.899 +ac_env_build_alias_value=$build_alias
  17.900 +ac_cv_env_build_alias_set=${build_alias+set}
  17.901 +ac_cv_env_build_alias_value=$build_alias
  17.902 +ac_env_host_alias_set=${host_alias+set}
  17.903 +ac_env_host_alias_value=$host_alias
  17.904 +ac_cv_env_host_alias_set=${host_alias+set}
  17.905 +ac_cv_env_host_alias_value=$host_alias
  17.906 +ac_env_target_alias_set=${target_alias+set}
  17.907 +ac_env_target_alias_value=$target_alias
  17.908 +ac_cv_env_target_alias_set=${target_alias+set}
  17.909 +ac_cv_env_target_alias_value=$target_alias
  17.910 +ac_env_CC_set=${CC+set}
  17.911 +ac_env_CC_value=$CC
  17.912 +ac_cv_env_CC_set=${CC+set}
  17.913 +ac_cv_env_CC_value=$CC
  17.914 +ac_env_CFLAGS_set=${CFLAGS+set}
  17.915 +ac_env_CFLAGS_value=$CFLAGS
  17.916 +ac_cv_env_CFLAGS_set=${CFLAGS+set}
  17.917 +ac_cv_env_CFLAGS_value=$CFLAGS
  17.918 +ac_env_LDFLAGS_set=${LDFLAGS+set}
  17.919 +ac_env_LDFLAGS_value=$LDFLAGS
  17.920 +ac_cv_env_LDFLAGS_set=${LDFLAGS+set}
  17.921 +ac_cv_env_LDFLAGS_value=$LDFLAGS
  17.922 +ac_env_CPPFLAGS_set=${CPPFLAGS+set}
  17.923 +ac_env_CPPFLAGS_value=$CPPFLAGS
  17.924 +ac_cv_env_CPPFLAGS_set=${CPPFLAGS+set}
  17.925 +ac_cv_env_CPPFLAGS_value=$CPPFLAGS
  17.926 +ac_env_CPP_set=${CPP+set}
  17.927 +ac_env_CPP_value=$CPP
  17.928 +ac_cv_env_CPP_set=${CPP+set}
  17.929 +ac_cv_env_CPP_value=$CPP
  17.930 +ac_env_CXX_set=${CXX+set}
  17.931 +ac_env_CXX_value=$CXX
  17.932 +ac_cv_env_CXX_set=${CXX+set}
  17.933 +ac_cv_env_CXX_value=$CXX
  17.934 +ac_env_CXXFLAGS_set=${CXXFLAGS+set}
  17.935 +ac_env_CXXFLAGS_value=$CXXFLAGS
  17.936 +ac_cv_env_CXXFLAGS_set=${CXXFLAGS+set}
  17.937 +ac_cv_env_CXXFLAGS_value=$CXXFLAGS
  17.938 +ac_env_CXXCPP_set=${CXXCPP+set}
  17.939 +ac_env_CXXCPP_value=$CXXCPP
  17.940 +ac_cv_env_CXXCPP_set=${CXXCPP+set}
  17.941 +ac_cv_env_CXXCPP_value=$CXXCPP
  17.942 +ac_env_F77_set=${F77+set}
  17.943 +ac_env_F77_value=$F77
  17.944 +ac_cv_env_F77_set=${F77+set}
  17.945 +ac_cv_env_F77_value=$F77
  17.946 +ac_env_FFLAGS_set=${FFLAGS+set}
  17.947 +ac_env_FFLAGS_value=$FFLAGS
  17.948 +ac_cv_env_FFLAGS_set=${FFLAGS+set}
  17.949 +ac_cv_env_FFLAGS_value=$FFLAGS
  17.950 +
  17.951 +#
  17.952 +# Report the --help message.
  17.953 +#
  17.954 +if test "$ac_init_help" = "long"; then
  17.955 +  # Omit some internal or obsolete options to make the list less imposing.
  17.956 +  # This message is too long to be a string in the A/UX 3.1 sh.
  17.957 +  cat <<_ACEOF
  17.958 +\`configure' configures gift-gnutella 0.0.11 to adapt to many kinds of systems.
  17.959 +
  17.960 +Usage: $0 [OPTION]... [VAR=VALUE]...
  17.961 +
  17.962 +To assign environment variables (e.g., CC, CFLAGS...), specify them as
  17.963 +VAR=VALUE.  See below for descriptions of some of the useful variables.
  17.964 +
  17.965 +Defaults for the options are specified in brackets.
  17.966 +
  17.967 +Configuration:
  17.968 +  -h, --help              display this help and exit
  17.969 +      --help=short        display options specific to this package
  17.970 +      --help=recursive    display the short help of all the included packages
  17.971 +  -V, --version           display version information and exit
  17.972 +  -q, --quiet, --silent   do not print \`checking...' messages
  17.973 +      --cache-file=FILE   cache test results in FILE [disabled]
  17.974 +  -C, --config-cache      alias for \`--cache-file=config.cache'
  17.975 +  -n, --no-create         do not create output files
  17.976 +      --srcdir=DIR        find the sources in DIR [configure dir or \`..']
  17.977 +
  17.978 +_ACEOF
  17.979 +
  17.980 +  cat <<_ACEOF
  17.981 +Installation directories:
  17.982 +  --prefix=PREFIX         install architecture-independent files in PREFIX
  17.983 +			  [$ac_default_prefix]
  17.984 +  --exec-prefix=EPREFIX   install architecture-dependent files in EPREFIX
  17.985 +			  [PREFIX]
  17.986 +
  17.987 +By default, \`make install' will install all the files in
  17.988 +\`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc.  You can specify
  17.989 +an installation prefix other than \`$ac_default_prefix' using \`--prefix',
  17.990 +for instance \`--prefix=\$HOME'.
  17.991 +
  17.992 +For better control, use the options below.
  17.993 +
  17.994 +Fine tuning of the installation directories:
  17.995 +  --bindir=DIR           user executables [EPREFIX/bin]
  17.996 +  --sbindir=DIR          system admin executables [EPREFIX/sbin]
  17.997 +  --libexecdir=DIR       program executables [EPREFIX/libexec]
  17.998 +  --datadir=DIR          read-only architecture-independent data [PREFIX/share]
  17.999 +  --sysconfdir=DIR       read-only single-machine data [PREFIX/etc]
 17.1000 +  --sharedstatedir=DIR   modifiable architecture-independent data [PREFIX/com]
 17.1001 +  --localstatedir=DIR    modifiable single-machine data [PREFIX/var]
 17.1002 +  --libdir=DIR           object code libraries [EPREFIX/lib]
 17.1003 +  --includedir=DIR       C header files [PREFIX/include]
 17.1004 +  --oldincludedir=DIR    C header files for non-gcc [/usr/include]
 17.1005 +  --infodir=DIR          info documentation [PREFIX/info]
 17.1006 +  --mandir=DIR           man documentation [PREFIX/man]
 17.1007 +_ACEOF
 17.1008 +
 17.1009 +  cat <<\_ACEOF
 17.1010 +
 17.1011 +Program names:
 17.1012 +  --program-prefix=PREFIX            prepend PREFIX to installed program names
 17.1013 +  --program-suffix=SUFFIX            append SUFFIX to installed program names
 17.1014 +  --program-transform-name=PROGRAM   run sed PROGRAM on installed program names
 17.1015 +
 17.1016 +System types:
 17.1017 +  --build=BUILD     configure for building on BUILD [guessed]
 17.1018 +  --host=HOST       cross-compile to build programs to run on HOST [BUILD]
 17.1019 +_ACEOF
 17.1020 +fi
 17.1021 +
 17.1022 +if test -n "$ac_init_help"; then
 17.1023 +  case $ac_init_help in
 17.1024 +     short | recursive ) echo "Configuration of gift-gnutella 0.0.11:";;
 17.1025 +   esac
 17.1026 +  cat <<\_ACEOF
 17.1027 +
 17.1028 +Optional Features:
 17.1029 +  --disable-FEATURE       do not include FEATURE (same as --enable-FEATURE=no)
 17.1030 +  --enable-FEATURE[=ARG]  include FEATURE [ARG=yes]
 17.1031 +  --enable-maintainer-mode enable make rules and dependencies not useful
 17.1032 +                          (and sometimes confusing) to the casual installer
 17.1033 +  --disable-dependency-tracking Speeds up one-time builds
 17.1034 +  --enable-dependency-tracking  Do not reject slow dependency extractors
 17.1035 +  --enable-static[=PKGS]
 17.1036 +                          build static libraries [default=no]
 17.1037 +  --enable-shared[=PKGS]
 17.1038 +                          build shared libraries [default=yes]
 17.1039 +  --enable-fast-install[=PKGS]
 17.1040 +                          optimize for fast installation [default=yes]
 17.1041 +  --disable-libtool-lock  avoid locking (might break parallel builds)
 17.1042 +
 17.1043 +Optional Packages:
 17.1044 +  --with-PACKAGE[=ARG]    use PACKAGE [ARG=yes]
 17.1045 +  --without-PACKAGE       do not use PACKAGE (same as --with-PACKAGE=no)
 17.1046 +  --with-gnu-ld           assume the C compiler uses GNU ld [default=no]
 17.1047 +  --with-pic              try to use only PIC/non-PIC objects [default=use
 17.1048 +                          both]
 17.1049 +  --with-tags[=TAGS]
 17.1050 +                          include additional configurations [automatic]
 17.1051 +  --with-zlib=DIR         where to look for ZLIB compiler/linker default paths
 17.1052 +                        DIR points to the ZLIB installation prefix /usr/local
 17.1053 +  --with-libxml=DIR         where to look for libxml compiler/linker default paths
 17.1054 +                        DIR points to the libxml installation prefix /usr/local
 17.1055 +
 17.1056 +Some influential environment variables:
 17.1057 +  CC          C compiler command
 17.1058 +  CFLAGS      C compiler flags
 17.1059 +  LDFLAGS     linker flags, e.g. -L<lib dir> if you have libraries in a
 17.1060 +              nonstandard directory <lib dir>
 17.1061 +  CPPFLAGS    C/C++ preprocessor flags, e.g. -I<include dir> if you have
 17.1062 +              headers in a nonstandard directory <include dir>
 17.1063 +  CPP         C preprocessor
 17.1064 +  CXX         C++ compiler command
 17.1065 +  CXXFLAGS    C++ compiler flags
 17.1066 +  CXXCPP      C++ preprocessor
 17.1067 +  F77         Fortran 77 compiler command
 17.1068 +  FFLAGS      Fortran 77 compiler flags
 17.1069 +
 17.1070 +Use these variables to override the choices made by `configure' or to help
 17.1071 +it to find libraries and programs with nonstandard names/locations.
 17.1072 +
 17.1073 +_ACEOF
 17.1074 +fi
 17.1075 +
 17.1076 +if test "$ac_init_help" = "recursive"; then
 17.1077 +  # If there are subdirs, report their specific --help.
 17.1078 +  ac_popdir=`pwd`
 17.1079 +  for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue
 17.1080 +    test -d $ac_dir || continue
 17.1081 +    ac_builddir=.
 17.1082 +
 17.1083 +if test "$ac_dir" != .; then
 17.1084 +  ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'`
 17.1085 +  # A "../" for each directory in $ac_dir_suffix.
 17.1086 +  ac_top_builddir=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,../,g'`
 17.1087 +else
 17.1088 +  ac_dir_suffix= ac_top_builddir=
 17.1089 +fi
 17.1090 +
 17.1091 +case $srcdir in
 17.1092 +  .)  # No --srcdir option.  We are building in place.
 17.1093 +    ac_srcdir=.
 17.1094 +    if test -z "$ac_top_builddir"; then
 17.1095 +       ac_top_srcdir=.
 17.1096 +    else
 17.1097 +       ac_top_srcdir=`echo $ac_top_builddir | sed 's,/$,,'`
 17.1098 +    fi ;;
 17.1099 +  [\\/]* | ?:[\\/]* )  # Absolute path.
 17.1100 +    ac_srcdir=$srcdir$ac_dir_suffix;
 17.1101 +    ac_top_srcdir=$srcdir ;;
 17.1102 +  *) # Relative path.
 17.1103 +    ac_srcdir=$ac_top_builddir$srcdir$ac_dir_suffix
 17.1104 +    ac_top_srcdir=$ac_top_builddir$srcdir ;;
 17.1105 +esac
 17.1106 +
 17.1107 +# Do not use `cd foo && pwd` to compute absolute paths, because
 17.1108 +# the directories may not exist.
 17.1109 +case `pwd` in
 17.1110 +.) ac_abs_builddir="$ac_dir";;
 17.1111 +*)
 17.1112 +  case "$ac_dir" in
 17.1113 +  .) ac_abs_builddir=`pwd`;;
 17.1114 +  [\\/]* | ?:[\\/]* ) ac_abs_builddir="$ac_dir";;
 17.1115 +  *) ac_abs_builddir=`pwd`/"$ac_dir";;
 17.1116 +  esac;;
 17.1117 +esac
 17.1118 +case $ac_abs_builddir in
 17.1119 +.) ac_abs_top_builddir=${ac_top_builddir}.;;
 17.1120 +*)
 17.1121 +  case ${ac_top_builddir}. in
 17.1122 +  .) ac_abs_top_builddir=$ac_abs_builddir;;
 17.1123 +  [\\/]* | ?:[\\/]* ) ac_abs_top_builddir=${ac_top_builddir}.;;
 17.1124 +  *) ac_abs_top_builddir=$ac_abs_builddir/${ac_top_builddir}.;;
 17.1125 +  esac;;
 17.1126 +esac
 17.1127 +case $ac_abs_builddir in
 17.1128 +.) ac_abs_srcdir=$ac_srcdir;;
 17.1129 +*)
 17.1130 +  case $ac_srcdir in
 17.1131 +  .) ac_abs_srcdir=$ac_abs_builddir;;
 17.1132 +  [\\/]* | ?:[\\/]* ) ac_abs_srcdir=$ac_srcdir;;
 17.1133 +  *) ac_abs_srcdir=$ac_abs_builddir/$ac_srcdir;;
 17.1134 +  esac;;
 17.1135 +esac
 17.1136 +case $ac_abs_builddir in
 17.1137 +.) ac_abs_top_srcdir=$ac_top_srcdir;;
 17.1138 +*)
 17.1139 +  case $ac_top_srcdir in
 17.1140 +  .) ac_abs_top_srcdir=$ac_abs_builddir;;
 17.1141 +  [\\/]* | ?:[\\/]* ) ac_abs_top_srcdir=$ac_top_srcdir;;
 17.1142 +  *) ac_abs_top_srcdir=$ac_abs_builddir/$ac_top_srcdir;;
 17.1143 +  esac;;
 17.1144 +esac
 17.1145 +
 17.1146 +    cd $ac_dir
 17.1147 +    # Check for guested configure; otherwise get Cygnus style configure.
 17.1148 +    if test -f $ac_srcdir/configure.gnu; then
 17.1149 +      echo
 17.1150 +      $SHELL $ac_srcdir/configure.gnu  --help=recursive
 17.1151 +    elif test -f $ac_srcdir/configure; then
 17.1152 +      echo
 17.1153 +      $SHELL $ac_srcdir/configure  --help=recursive
 17.1154 +    elif test -f $ac_srcdir/configure.ac ||
 17.1155 +	   test -f $ac_srcdir/configure.in; then
 17.1156 +      echo
 17.1157 +      $ac_configure --help
 17.1158 +    else
 17.1159 +      echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2
 17.1160 +    fi
 17.1161 +    cd "$ac_popdir"
 17.1162 +  done
 17.1163 +fi
 17.1164 +
 17.1165 +test -n "$ac_init_help" && exit 0
 17.1166 +if $ac_init_version; then
 17.1167 +  cat <<\_ACEOF
 17.1168 +gift-gnutella configure 0.0.11
 17.1169 +generated by GNU Autoconf 2.59
 17.1170 +
 17.1171 +Copyright (C) 2003 Free Software Foundation, Inc.
 17.1172 +This configure script is free software; the Free Software Foundation
 17.1173 +gives unlimited permission to copy, distribute and modify it.
 17.1174 +_ACEOF
 17.1175 +  exit 0
 17.1176 +fi
 17.1177 +exec 5>config.log
 17.1178 +cat >&5 <<_ACEOF
 17.1179 +This file contains any messages produced by compilers while
 17.1180 +running configure, to aid debugging if configure makes a mistake.
 17.1181 +
 17.1182 +It was created by gift-gnutella $as_me 0.0.11, which was
 17.1183 +generated by GNU Autoconf 2.59.  Invocation command line was
 17.1184 +
 17.1185 +  $ $0 $@
 17.1186 +
 17.1187 +_ACEOF
 17.1188 +{
 17.1189 +cat <<_ASUNAME
 17.1190 +## --------- ##
 17.1191 +## Platform. ##
 17.1192 +## --------- ##
 17.1193 +
 17.1194 +hostname = `(hostname || uname -n) 2>/dev/null | sed 1q`
 17.1195 +uname -m = `(uname -m) 2>/dev/null || echo unknown`
 17.1196 +uname -r = `(uname -r) 2>/dev/null || echo unknown`
 17.1197 +uname -s = `(uname -s) 2>/dev/null || echo unknown`
 17.1198 +uname -v = `(uname -v) 2>/dev/null || echo unknown`
 17.1199 +
 17.1200 +/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown`
 17.1201 +/bin/uname -X     = `(/bin/uname -X) 2>/dev/null     || echo unknown`
 17.1202 +
 17.1203 +/bin/arch              = `(/bin/arch) 2>/dev/null              || echo unknown`
 17.1204 +/usr/bin/arch -k       = `(/usr/bin/arch -k) 2>/dev/null       || echo unknown`
 17.1205 +/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown`
 17.1206 +hostinfo               = `(hostinfo) 2>/dev/null               || echo unknown`
 17.1207 +/bin/machine           = `(/bin/machine) 2>/dev/null           || echo unknown`
 17.1208 +/usr/bin/oslevel       = `(/usr/bin/oslevel) 2>/dev/null       || echo unknown`
 17.1209 +/bin/universe          = `(/bin/universe) 2>/dev/null          || echo unknown`
 17.1210 +
 17.1211 +_ASUNAME
 17.1212 +
 17.1213 +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
 17.1214 +for as_dir in $PATH
 17.1215 +do
 17.1216 +  IFS=$as_save_IFS
 17.1217 +  test -z "$as_dir" && as_dir=.
 17.1218 +  echo "PATH: $as_dir"
 17.1219 +done
 17.1220 +
 17.1221 +} >&5
 17.1222 +
 17.1223 +cat >&5 <<_ACEOF
 17.1224 +
 17.1225 +
 17.1226 +## ----------- ##
 17.1227 +## Core tests. ##
 17.1228 +## ----------- ##
 17.1229 +
 17.1230 +_ACEOF
 17.1231 +
 17.1232 +
 17.1233 +# Keep a trace of the command line.
 17.1234 +# Strip out --no-create and --no-recursion so they do not pile up.
 17.1235 +# Strip out --silent because we don't want to record it for future runs.
 17.1236 +# Also quote any args containing shell meta-characters.
 17.1237 +# Make two passes to allow for proper duplicate-argument suppression.
 17.1238 +ac_configure_args=
 17.1239 +ac_configure_args0=
 17.1240 +ac_configure_args1=
 17.1241 +ac_sep=
 17.1242 +ac_must_keep_next=false
 17.1243 +for ac_pass in 1 2
 17.1244 +do
 17.1245 +  for ac_arg
 17.1246 +  do
 17.1247 +    case $ac_arg in
 17.1248 +    -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;;
 17.1249 +    -q | -quiet | --quiet | --quie | --qui | --qu | --q \
 17.1250 +    | -silent | --silent | --silen | --sile | --sil)
 17.1251 +      continue ;;
 17.1252 +    *" "*|*"	"*|*[\[\]\~\#\$\^\&\*\(\)\{\}\\\|\;\<\>\?\"\']*)
 17.1253 +      ac_arg=`echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;;
 17.1254 +    esac
 17.1255 +    case $ac_pass in
 17.1256 +    1) ac_configure_args0="$ac_configure_args0 '$ac_arg'" ;;
 17.1257 +    2)
 17.1258 +      ac_configure_args1="$ac_configure_args1 '$ac_arg'"
 17.1259 +      if test $ac_must_keep_next = true; then
 17.1260 +	ac_must_keep_next=false # Got value, back to normal.
 17.1261 +      else
 17.1262 +	case $ac_arg in
 17.1263 +	  *=* | --config-cache | -C | -disable-* | --disable-* \
 17.1264 +	  | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \
 17.1265 +	  | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \
 17.1266 +	  | -with-* | --with-* | -without-* | --without-* | --x)
 17.1267 +	    case "$ac_configure_args0 " in
 17.1268 +	      "$ac_configure_args1"*" '$ac_arg' "* ) continue ;;
 17.1269 +	    esac
 17.1270 +	    ;;
 17.1271 +	  -* ) ac_must_keep_next=true ;;
 17.1272 +	esac
 17.1273 +      fi
 17.1274 +      ac_configure_args="$ac_configure_args$ac_sep'$ac_arg'"
 17.1275 +      # Get rid of the leading space.
 17.1276 +      ac_sep=" "
 17.1277 +      ;;
 17.1278 +    esac
 17.1279 +  done
 17.1280 +done
 17.1281 +$as_unset ac_configure_args0 || test "${ac_configure_args0+set}" != set || { ac_configure_args0=; export ac_configure_args0; }
 17.1282 +$as_unset ac_configure_args1 || test "${ac_configure_args1+set}" != set || { ac_configure_args1=; export ac_configure_args1; }
 17.1283 +
 17.1284 +# When interrupted or exit'd, cleanup temporary files, and complete
 17.1285 +# config.log.  We remove comments because anyway the quotes in there
 17.1286 +# would cause problems or look ugly.
 17.1287 +# WARNING: Be sure not to use single quotes in there, as some shells,
 17.1288 +# such as our DU 5.0 friend, will then `close' the trap.
 17.1289 +trap 'exit_status=$?
 17.1290 +  # Save into config.log some information that might help in debugging.
 17.1291 +  {
 17.1292 +    echo
 17.1293 +
 17.1294 +    cat <<\_ASBOX
 17.1295 +## ---------------- ##
 17.1296 +## Cache variables. ##
 17.1297 +## ---------------- ##
 17.1298 +_ASBOX
 17.1299 +    echo
 17.1300 +    # The following way of writing the cache mishandles newlines in values,
 17.1301 +{
 17.1302 +  (set) 2>&1 |
 17.1303 +    case `(ac_space='"'"' '"'"'; set | grep ac_space) 2>&1` in
 17.1304 +    *ac_space=\ *)
 17.1305 +      sed -n \
 17.1306 +	"s/'"'"'/'"'"'\\\\'"'"''"'"'/g;
 17.1307 +	  s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='"'"'\\2'"'"'/p"
 17.1308 +      ;;
 17.1309 +    *)
 17.1310 +      sed -n \
 17.1311 +	"s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1=\\2/p"
 17.1312 +      ;;
 17.1313 +    esac;
 17.1314 +}
 17.1315 +    echo
 17.1316 +
 17.1317 +    cat <<\_ASBOX
 17.1318 +## ----------------- ##
 17.1319 +## Output variables. ##
 17.1320 +## ----------------- ##
 17.1321 +_ASBOX
 17.1322 +    echo
 17.1323 +    for ac_var in $ac_subst_vars
 17.1324 +    do
 17.1325 +      eval ac_val=$`echo $ac_var`
 17.1326 +      echo "$ac_var='"'"'$ac_val'"'"'"
 17.1327 +    done | sort
 17.1328 +    echo
 17.1329 +
 17.1330 +    if test -n "$ac_subst_files"; then
 17.1331 +      cat <<\_ASBOX
 17.1332 +## ------------- ##
 17.1333 +## Output files. ##
 17.1334 +## ------------- ##
 17.1335 +_ASBOX
 17.1336 +      echo
 17.1337 +      for ac_var in $ac_subst_files
 17.1338 +      do
 17.1339 +	eval ac_val=$`echo $ac_var`
 17.1340 +	echo "$ac_var='"'"'$ac_val'"'"'"
 17.1341 +      done | sort
 17.1342 +      echo
 17.1343 +    fi
 17.1344 +
 17.1345 +    if test -s confdefs.h; then
 17.1346 +      cat <<\_ASBOX
 17.1347 +## ----------- ##
 17.1348 +## confdefs.h. ##
 17.1349 +## ----------- ##
 17.1350 +_ASBOX
 17.1351 +      echo
 17.1352 +      sed "/^$/d" confdefs.h | sort
 17.1353 +      echo
 17.1354 +    fi
 17.1355 +    test "$ac_signal" != 0 &&
 17.1356 +      echo "$as_me: caught signal $ac_signal"
 17.1357 +    echo "$as_me: exit $exit_status"
 17.1358 +  } >&5
 17.1359 +  rm -f core *.core &&
 17.1360 +  rm -rf conftest* confdefs* conf$$* $ac_clean_files &&
 17.1361 +    exit $exit_status
 17.1362 +     ' 0
 17.1363 +for ac_signal in 1 2 13 15; do
 17.1364 +  trap 'ac_signal='$ac_signal'; { (exit 1); exit 1; }' $ac_signal
 17.1365 +done
 17.1366 +ac_signal=0
 17.1367 +
 17.1368 +# confdefs.h avoids OS command line length limits that DEFS can exceed.
 17.1369 +rm -rf conftest* confdefs.h
 17.1370 +# AIX cpp loses on an empty file, so make sure it contains at least a newline.
 17.1371 +echo >confdefs.h
 17.1372 +
 17.1373 +# Predefined preprocessor variables.
 17.1374 +
 17.1375 +cat >>confdefs.h <<_ACEOF
 17.1376 +#define PACKAGE_NAME "$PACKAGE_NAME"
 17.1377 +_ACEOF
 17.1378 +
 17.1379 +
 17.1380 +cat >>confdefs.h <<_ACEOF
 17.1381 +#define PACKAGE_TARNAME "$PACKAGE_TARNAME"
 17.1382 +_ACEOF
 17.1383 +
 17.1384 +
 17.1385 +cat >>confdefs.h <<_ACEOF
 17.1386 +#define PACKAGE_VERSION "$PACKAGE_VERSION"
 17.1387 +_ACEOF
 17.1388 +
 17.1389 +
 17.1390 +cat >>confdefs.h <<_ACEOF
 17.1391 +#define PACKAGE_STRING "$PACKAGE_STRING"
 17.1392 +_ACEOF
 17.1393 +
 17.1394 +
 17.1395 +cat >>confdefs.h <<_ACEOF
 17.1396 +#define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT"
 17.1397 +_ACEOF
 17.1398 +
 17.1399 +
 17.1400 +# Let the site file select an alternate cache file if it wants to.
 17.1401 +# Prefer explicitly selected file to automatically selected ones.
 17.1402 +if test -z "$CONFIG_SITE"; then
 17.1403 +  if test "x$prefix" != xNONE; then
 17.1404 +    CONFIG_SITE="$prefix/share/config.site $prefix/etc/config.site"
 17.1405 +  else
 17.1406 +    CONFIG_SITE="$ac_default_prefix/share/config.site $ac_default_prefix/etc/config.site"
 17.1407 +  fi
 17.1408 +fi
 17.1409 +for ac_site_file in $CONFIG_SITE; do
 17.1410 +  if test -r "$ac_site_file"; then
 17.1411 +    { echo "$as_me:$LINENO: loading site script $ac_site_file" >&5
 17.1412 +echo "$as_me: loading site script $ac_site_file" >&6;}
 17.1413 +    sed 's/^/| /' "$ac_site_file" >&5
 17.1414 +    . "$ac_site_file"
 17.1415 +  fi
 17.1416 +done
 17.1417 +
 17.1418 +if test -r "$cache_file"; then
 17.1419 +  # Some versions of bash will fail to source /dev/null (special
 17.1420 +  # files actually), so we avoid doing that.
 17.1421 +  if test -f "$cache_file"; then
 17.1422 +    { echo "$as_me:$LINENO: loading cache $cache_file" >&5
 17.1423 +echo "$as_me: loading cache $cache_file" >&6;}
 17.1424 +    case $cache_file in
 17.1425 +      [\\/]* | ?:[\\/]* ) . $cache_file;;
 17.1426 +      *)                      . ./$cache_file;;
 17.1427 +    esac
 17.1428 +  fi
 17.1429 +else
 17.1430 +  { echo "$as_me:$LINENO: creating cache $cache_file" >&5
 17.1431 +echo "$as_me: creating cache $cache_file" >&6;}
 17.1432 +  >$cache_file
 17.1433 +fi
 17.1434 +
 17.1435 +# Check that the precious variables saved in the cache have kept the same
 17.1436 +# value.
 17.1437 +ac_cache_corrupted=false
 17.1438 +for ac_var in `(set) 2>&1 |
 17.1439 +	       sed -n 's/^ac_env_\([a-zA-Z_0-9]*\)_set=.*/\1/p'`; do
 17.1440 +  eval ac_old_set=\$ac_cv_env_${ac_var}_set
 17.1441 +  eval ac_new_set=\$ac_env_${ac_var}_set
 17.1442 +  eval ac_old_val="\$ac_cv_env_${ac_var}_value"
 17.1443 +  eval ac_new_val="\$ac_env_${ac_var}_value"
 17.1444 +  case $ac_old_set,$ac_new_set in
 17.1445 +    set,)
 17.1446 +      { echo "$as_me:$LINENO: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5
 17.1447 +echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;}
 17.1448 +      ac_cache_corrupted=: ;;
 17.1449 +    ,set)
 17.1450 +      { echo "$as_me:$LINENO: error: \`$ac_var' was not set in the previous run" >&5
 17.1451 +echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;}
 17.1452 +      ac_cache_corrupted=: ;;
 17.1453 +    ,);;
 17.1454 +    *)
 17.1455 +      if test "x$ac_old_val" != "x$ac_new_val"; then
 17.1456 +	{ echo "$as_me:$LINENO: error: \`$ac_var' has changed since the previous run:" >&5
 17.1457 +echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;}
 17.1458 +	{ echo "$as_me:$LINENO:   former value:  $ac_old_val" >&5
 17.1459 +echo "$as_me:   former value:  $ac_old_val" >&2;}
 17.1460 +	{ echo "$as_me:$LINENO:   current value: $ac_new_val" >&5
 17.1461 +echo "$as_me:   current value: $ac_new_val" >&2;}
 17.1462 +	ac_cache_corrupted=:
 17.1463 +      fi;;
 17.1464 +  esac
 17.1465 +  # Pass precious variables to config.status.
 17.1466 +  if test "$ac_new_set" = set; then
 17.1467 +    case $ac_new_val in
 17.1468 +    *" "*|*"	"*|*[\[\]\~\#\$\^\&\*\(\)\{\}\\\|\;\<\>\?\"\']*)
 17.1469 +      ac_arg=$ac_var=`echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;;
 17.1470 +    *) ac_arg=$ac_var=$ac_new_val ;;
 17.1471 +    esac
 17.1472 +    case " $ac_configure_args " in
 17.1473 +      *" '$ac_arg' "*) ;; # Avoid dups.  Use of quotes ensures accuracy.
 17.1474 +      *) ac_configure_args="$ac_configure_args '$ac_arg'" ;;
 17.1475 +    esac
 17.1476 +  fi
 17.1477 +done
 17.1478 +if $ac_cache_corrupted; then
 17.1479 +  { echo "$as_me:$LINENO: error: changes in the environment can compromise the build" >&5
 17.1480 +echo "$as_me: error: changes in the environment can compromise the build" >&2;}
 17.1481 +  { { echo "$as_me:$LINENO: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&5
 17.1482 +echo "$as_me: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&2;}
 17.1483 +   { (exit 1); exit 1; }; }
 17.1484 +fi
 17.1485 +
 17.1486 +ac_ext=c
 17.1487 +ac_cpp='$CPP $CPPFLAGS'
 17.1488 +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
 17.1489 +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
 17.1490 +ac_compiler_gnu=$ac_cv_c_compiler_gnu
 17.1491 +
 17.1492 +
 17.1493 +
 17.1494 +
 17.1495 +
 17.1496 +
 17.1497 +
 17.1498 +
 17.1499 +
 17.1500 +
 17.1501 +
 17.1502 +
 17.1503 +
 17.1504 +
 17.1505 +
 17.1506 +
 17.1507 +
 17.1508 +
 17.1509 +
 17.1510 +
 17.1511 +
 17.1512 +
 17.1513 +
 17.1514 +
 17.1515 +
 17.1516 +
 17.1517 +
 17.1518 +
 17.1519 +
 17.1520 +
 17.1521 +cat >>confdefs.h <<\_ACEOF
 17.1522 +#define GT_MAJOR_VERSION "0"
 17.1523 +_ACEOF
 17.1524 +
 17.1525 +
 17.1526 +cat >>confdefs.h <<\_ACEOF
 17.1527 +#define GT_MINOR_VERSION "0"
 17.1528 +_ACEOF
 17.1529 +
 17.1530 +
 17.1531 +cat >>confdefs.h <<\_ACEOF
 17.1532 +#define GT_MICRO_VERSION "10"
 17.1533 +_ACEOF
 17.1534 +
 17.1535 +
 17.1536 +if test -e "$srcdir/CVS"; then
 17.1537 +
 17.1538 +cat >>confdefs.h <<\_ACEOF
 17.1539 +#define GT_EXTRA_VERSION "-cvs"
 17.1540 +_ACEOF
 17.1541 +
 17.1542 +else
 17.1543 +
 17.1544 +cat >>confdefs.h <<\_ACEOF
 17.1545 +#define GT_EXTRA_VERSION ""
 17.1546 +_ACEOF
 17.1547 +
 17.1548 +fi
 17.1549 +
 17.1550 +
 17.1551 +am__api_version="1.7"
 17.1552 +ac_aux_dir=
 17.1553 +for ac_dir in $srcdir $srcdir/.. $srcdir/../..; do
 17.1554 +  if test -f $ac_dir/install-sh; then
 17.1555 +    ac_aux_dir=$ac_dir
 17.1556 +    ac_install_sh="$ac_aux_dir/install-sh -c"
 17.1557 +    break
 17.1558 +  elif test -f $ac_dir/install.sh; then
 17.1559 +    ac_aux_dir=$ac_dir
 17.1560 +    ac_install_sh="$ac_aux_dir/install.sh -c"
 17.1561 +    break
 17.1562 +  elif test -f $ac_dir/shtool; then
 17.1563 +    ac_aux_dir=$ac_dir
 17.1564 +    ac_install_sh="$ac_aux_dir/shtool install -c"
 17.1565 +    break
 17.1566 +  fi
 17.1567 +done
 17.1568 +if test -z "$ac_aux_dir"; then
 17.1569 +  { { echo "$as_me:$LINENO: error: cannot find install-sh or install.sh in $srcdir $srcdir/.. $srcdir/../.." >&5
 17.1570 +echo "$as_me: error: cannot find install-sh or install.sh in $srcdir $srcdir/.. $srcdir/../.." >&2;}
 17.1571 +   { (exit 1); exit 1; }; }
 17.1572 +fi
 17.1573 +ac_config_guess="$SHELL $ac_aux_dir/config.guess"
 17.1574 +ac_config_sub="$SHELL $ac_aux_dir/config.sub"
 17.1575 +ac_configure="$SHELL $ac_aux_dir/configure" # This should be Cygnus configure.
 17.1576 +
 17.1577 +# Find a good install program.  We prefer a C program (faster),
 17.1578 +# so one script is as good as another.  But avoid the broken or
 17.1579 +# incompatible versions:
 17.1580 +# SysV /etc/install, /usr/sbin/install
 17.1581 +# SunOS /usr/etc/install
 17.1582 +# IRIX /sbin/install
 17.1583 +# AIX /bin/install
 17.1584 +# AmigaOS /C/install, which installs bootblocks on floppy discs
 17.1585 +# AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag
 17.1586 +# AFS /usr/afsws/bin/install, which mishandles nonexistent args
 17.1587 +# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff"
 17.1588 +# OS/2's system install, which has a completely different semantic
 17.1589 +# ./install, which can be erroneously created by make from ./install.sh.
 17.1590 +echo "$as_me:$LINENO: checking for a BSD-compatible install" >&5
 17.1591 +echo $ECHO_N "checking for a BSD-compatible install... $ECHO_C" >&6
 17.1592 +if test -z "$INSTALL"; then
 17.1593 +if test "${ac_cv_path_install+set}" = set; then
 17.1594 +  echo $ECHO_N "(cached) $ECHO_C" >&6
 17.1595 +else
 17.1596 +  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
 17.1597 +for as_dir in $PATH
 17.1598 +do
 17.1599 +  IFS=$as_save_IFS
 17.1600 +  test -z "$as_dir" && as_dir=.
 17.1601 +  # Account for people who put trailing slashes in PATH elements.
 17.1602 +case $as_dir/ in
 17.1603 +  ./ | .// | /cC/* | \
 17.1604 +  /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \
 17.1605 +  ?:\\/os2\\/install\\/* | ?:\\/OS2\\/INSTALL\\/* | \
 17.1606 +  /usr/ucb/* ) ;;
 17.1607 +  *)
 17.1608 +    # OSF1 and SCO ODT 3.0 have their own names for install.
 17.1609 +    # Don't use installbsd from OSF since it installs stuff as root
 17.1610 +    # by default.
 17.1611 +    for ac_prog in ginstall scoinst install; do
 17.1612 +      for ac_exec_ext in '' $ac_executable_extensions; do
 17.1613 +	if $as_executable_p "$as_dir/$ac_prog$ac_exec_ext"; then
 17.1614 +	  if test $ac_prog = install &&
 17.1615 +	    grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
 17.1616 +	    # AIX install.  It has an incompatible calling convention.
 17.1617 +	    :
 17.1618 +	  elif test $ac_prog = install &&
 17.1619 +	    grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
 17.1620 +	    # program-specific install script used by HP pwplus--don't use.
 17.1621 +	    :
 17.1622 +	  else
 17.1623 +	    ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c"
 17.1624 +	    break 3
 17.1625 +	  fi
 17.1626 +	fi
 17.1627 +      done
 17.1628 +    done
 17.1629 +    ;;
 17.1630 +esac
 17.1631 +done
 17.1632 +
 17.1633 +
 17.1634 +fi
 17.1635 +  if test "${ac_cv_path_install+set}" = set; then
 17.1636 +    INSTALL=$ac_cv_path_install
 17.1637 +  else
 17.1638 +    # As a last resort, use the slow shell script.  We don't cache a
 17.1639 +    # path for INSTALL within a source directory, because that will
 17.1640 +    # break other packages using the cache if that directory is
 17.1641 +    # removed, or if the path is relative.
 17.1642 +    INSTALL=$ac_install_sh
 17.1643 +  fi
 17.1644 +fi
 17.1645 +echo "$as_me:$LINENO: result: $INSTALL" >&5
 17.1646 +echo "${ECHO_T}$INSTALL" >&6
 17.1647 +
 17.1648 +# Use test -z because SunOS4 sh mishandles braces in ${var-val}.
 17.1649 +# It thinks the first close brace ends the variable substitution.
 17.1650 +test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}'
 17.1651 +
 17.1652 +test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}'
 17.1653 +
 17.1654 +test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644'
 17.1655 +
 17.1656 +echo "$as_me:$LINENO: checking whether build environment is sane" >&5
 17.1657 +echo $ECHO_N "checking whether build environment is sane... $ECHO_C" >&6
 17.1658 +# Just in case
 17.1659 +sleep 1
 17.1660 +echo timestamp > conftest.file
 17.1661 +# Do `set' in a subshell so we don't clobber the current shell's
 17.1662 +# arguments.  Must try -L first in case configure is actually a
 17.1663 +# symlink; some systems play weird games with the mod time of symlinks
 17.1664 +# (eg FreeBSD returns the mod time of the symlink's containing
 17.1665 +# directory).
 17.1666 +if (
 17.1667 +   set X `ls -Lt $srcdir/configure conftest.file 2> /dev/null`
 17.1668 +   if test "$*" = "X"; then
 17.1669 +      # -L didn't work.
 17.1670 +      set X `ls -t $srcdir/configure conftest.file`
 17.1671 +   fi
 17.1672 +   rm -f conftest.file
 17.1673 +   if test "$*" != "X $srcdir/configure conftest.file" \
 17.1674 +      && test "$*" != "X conftest.file $srcdir/configure"; then
 17.1675 +
 17.1676 +      # If neither matched, then we have a broken ls.  This can happen
 17.1677 +      # if, for instance, CONFIG_SHELL is bash and it inherits a
 17.1678 +      # broken ls alias from the environment.  This has actually
 17.1679 +      # happened.  Such a system could not be considered "sane".
 17.1680 +      { { echo "$as_me:$LINENO: error: ls -t appears to fail.  Make sure there is not a broken
 17.1681 +alias in your environment" >&5
 17.1682 +echo "$as_me: error: ls -t appears to fail.  Make sure there is not a broken
 17.1683 +alias in your environment" >&2;}
 17.1684 +   { (exit 1); exit 1; }; }
 17.1685 +   fi
 17.1686 +
 17.1687 +   test "$2" = conftest.file
 17.1688 +   )
 17.1689 +then
 17.1690 +   # Ok.
 17.1691 +   :
 17.1692 +else
 17.1693 +   { { echo "$as_me:$LINENO: error: newly created file is older than distributed files!
 17.1694 +Check your system clock" >&5
 17.1695 +echo "$as_me: error: newly created file is older than distributed files!
 17.1696 +Check your system clock" >&2;}
 17.1697 +   { (exit 1); exit 1; }; }
 17.1698 +fi
 17.1699 +echo "$as_me:$LINENO: result: yes" >&5
 17.1700 +echo "${ECHO_T}yes" >&6
 17.1701 +test "$program_prefix" != NONE &&
 17.1702 +  program_transform_name="s,^,$program_prefix,;$program_transform_name"
 17.1703 +# Use a double $ so make ignores it.
 17.1704 +test "$program_suffix" != NONE &&
 17.1705 +  program_transform_name="s,\$,$program_suffix,;$program_transform_name"
 17.1706 +# Double any \ or $.  echo might interpret backslashes.
 17.1707 +# By default was `s,x,x', remove it if useless.
 17.1708 +cat <<\_ACEOF >conftest.sed
 17.1709 +s/[\\$]/&&/g;s/;s,x,x,$//
 17.1710 +_ACEOF
 17.1711 +program_transform_name=`echo $program_transform_name | sed -f conftest.sed`
 17.1712 +rm conftest.sed
 17.1713 +
 17.1714 +
 17.1715 +# expand $ac_aux_dir to an absolute path
 17.1716 +am_aux_dir=`cd $ac_aux_dir && pwd`
 17.1717 +
 17.1718 +test x"${MISSING+set}" = xset || MISSING="\${SHELL} $am_aux_dir/missing"
 17.1719 +# Use eval to expand $SHELL
 17.1720 +if eval "$MISSING --run true"; then
 17.1721 +  am_missing_run="$MISSING --run "
 17.1722 +else
 17.1723 +  am_missing_run=
 17.1724 +  { echo "$as_me:$LINENO: WARNING: \`missing' script is too old or missing" >&5
 17.1725 +echo "$as_me: WARNING: \`missing' script is too old or missing" >&2;}
 17.1726 +fi
 17.1727 +
 17.1728 +for ac_prog in gawk mawk nawk awk
 17.1729 +do
 17.1730 +  # Extract the first word of "$ac_prog", so it can be a program name with args.
 17.1731 +set dummy $ac_prog; ac_word=$2
 17.1732 +echo "$as_me:$LINENO: checking for $ac_word" >&5
 17.1733 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
 17.1734 +if test "${ac_cv_prog_AWK+set}" = set; then
 17.1735 +  echo $ECHO_N "(cached) $ECHO_C" >&6
 17.1736 +else
 17.1737 +  if test -n "$AWK"; then
 17.1738 +  ac_cv_prog_AWK="$AWK" # Let the user override the test.
 17.1739 +else
 17.1740 +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
 17.1741 +for as_dir in $PATH
 17.1742 +do
 17.1743 +  IFS=$as_save_IFS
 17.1744 +  test -z "$as_dir" && as_dir=.
 17.1745 +  for ac_exec_ext in '' $ac_executable_extensions; do
 17.1746 +  if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
 17.1747 +    ac_cv_prog_AWK="$ac_prog"
 17.1748 +    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
 17.1749 +    break 2
 17.1750 +  fi
 17.1751 +done
 17.1752 +done
 17.1753 +
 17.1754 +fi
 17.1755 +fi
 17.1756 +AWK=$ac_cv_prog_AWK
 17.1757 +if test -n "$AWK"; then
 17.1758 +  echo "$as_me:$LINENO: result: $AWK" >&5
 17.1759 +echo "${ECHO_T}$AWK" >&6
 17.1760 +else
 17.1761 +  echo "$as_me:$LINENO: result: no" >&5
 17.1762 +echo "${ECHO_T}no" >&6
 17.1763 +fi
 17.1764 +
 17.1765 +  test -n "$AWK" && break
 17.1766 +done
 17.1767 +
 17.1768 +echo "$as_me:$LINENO: checking whether ${MAKE-make} sets \$(MAKE)" >&5
 17.1769 +echo $ECHO_N "checking whether ${MAKE-make} sets \$(MAKE)... $ECHO_C" >&6
 17.1770 +set dummy ${MAKE-make}; ac_make=`echo "$2" | sed 'y,:./+-,___p_,'`
 17.1771 +if eval "test \"\${ac_cv_prog_make_${ac_make}_set+set}\" = set"; then
 17.1772 +  echo $ECHO_N "(cached) $ECHO_C" >&6
 17.1773 +else
 17.1774 +  cat >conftest.make <<\_ACEOF
 17.1775 +all:
 17.1776 +	@echo 'ac_maketemp="$(MAKE)"'
 17.1777 +_ACEOF
 17.1778 +# GNU make sometimes prints "make[1]: Entering...", which would confuse us.
 17.1779 +eval `${MAKE-make} -f conftest.make 2>/dev/null | grep temp=`
 17.1780 +if test -n "$ac_maketemp"; then
 17.1781 +  eval ac_cv_prog_make_${ac_make}_set=yes
 17.1782 +else
 17.1783 +  eval ac_cv_prog_make_${ac_make}_set=no
 17.1784 +fi
 17.1785 +rm -f conftest.make
 17.1786 +fi
 17.1787 +if eval "test \"`echo '$ac_cv_prog_make_'${ac_make}_set`\" = yes"; then
 17.1788 +  echo "$as_me:$LINENO: result: yes" >&5
 17.1789 +echo "${ECHO_T}yes" >&6
 17.1790 +  SET_MAKE=
 17.1791 +else
 17.1792 +  echo "$as_me:$LINENO: result: no" >&5
 17.1793 +echo "${ECHO_T}no" >&6
 17.1794 +  SET_MAKE="MAKE=${MAKE-make}"
 17.1795 +fi
 17.1796 +
 17.1797 +rm -rf .tst 2>/dev/null
 17.1798 +mkdir .tst 2>/dev/null
 17.1799 +if test -d .tst; then
 17.1800 +  am__leading_dot=.
 17.1801 +else
 17.1802 +  am__leading_dot=_
 17.1803 +fi
 17.1804 +rmdir .tst 2>/dev/null
 17.1805 +
 17.1806 + # test to see if srcdir already configured
 17.1807 +if test "`cd $srcdir && pwd`" != "`pwd`" &&
 17.1808 +   test -f $srcdir/config.status; then
 17.1809 +  { { echo "$as_me:$LINENO: error: source directory already configured; run \"make distclean\" there first" >&5
 17.1810 +echo "$as_me: error: source directory already configured; run \"make distclean\" there first" >&2;}
 17.1811 +   { (exit 1); exit 1; }; }
 17.1812 +fi
 17.1813 +
 17.1814 +# test whether we have cygpath
 17.1815 +if test -z "$CYGPATH_W"; then
 17.1816 +  if (cygpath --version) >/dev/null 2>/dev/null; then
 17.1817 +    CYGPATH_W='cygpath -w'
 17.1818 +  else
 17.1819 +    CYGPATH_W=echo
 17.1820 +  fi
 17.1821 +fi
 17.1822 +
 17.1823 +
 17.1824 +# Define the identity of the package.
 17.1825 + PACKAGE='gift-gnutella'
 17.1826 + VERSION='0.0.11'
 17.1827 +
 17.1828 +
 17.1829 +cat >>confdefs.h <<_ACEOF
 17.1830 +#define PACKAGE "$PACKAGE"
 17.1831 +_ACEOF
 17.1832 +
 17.1833 +
 17.1834 +cat >>confdefs.h <<_ACEOF
 17.1835 +#define VERSION "$VERSION"
 17.1836 +_ACEOF
 17.1837 +
 17.1838 +# Some tools Automake needs.
 17.1839 +
 17.1840 +ACLOCAL=${ACLOCAL-"${am_missing_run}aclocal-${am__api_version}"}
 17.1841 +
 17.1842 +
 17.1843 +AUTOCONF=${AUTOCONF-"${am_missing_run}autoconf"}
 17.1844 +
 17.1845 +
 17.1846 +AUTOMAKE=${AUTOMAKE-"${am_missing_run}automake-${am__api_version}"}
 17.1847 +
 17.1848 +
 17.1849 +AUTOHEADER=${AUTOHEADER-"${am_missing_run}autoheader"}
 17.1850 +
 17.1851 +
 17.1852 +MAKEINFO=${MAKEINFO-"${am_missing_run}makeinfo"}
 17.1853 +
 17.1854 +
 17.1855 +AMTAR=${AMTAR-"${am_missing_run}tar"}
 17.1856 +
 17.1857 +install_sh=${install_sh-"$am_aux_dir/install-sh"}
 17.1858 +
 17.1859 +# Installed binaries are usually stripped using `strip' when the user
 17.1860 +# run `make install-strip'.  However `strip' might not be the right
 17.1861 +# tool to use in cross-compilation environments, therefore Automake
 17.1862 +# will honor the `STRIP' environment variable to overrule this program.
 17.1863 +if test "$cross_compiling" != no; then
 17.1864 +  if test -n "$ac_tool_prefix"; then
 17.1865 +  # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args.
 17.1866 +set dummy ${ac_tool_prefix}strip; ac_word=$2
 17.1867 +echo "$as_me:$LINENO: checking for $ac_word" >&5
 17.1868 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
 17.1869 +if test "${ac_cv_prog_STRIP+set}" = set; then
 17.1870 +  echo $ECHO_N "(cached) $ECHO_C" >&6
 17.1871 +else
 17.1872 +  if test -n "$STRIP"; then
 17.1873 +  ac_cv_prog_STRIP="$STRIP" # Let the user override the test.
 17.1874 +else
 17.1875 +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
 17.1876 +for as_dir in $PATH
 17.1877 +do
 17.1878 +  IFS=$as_save_IFS
 17.1879 +  test -z "$as_dir" && as_dir=.
 17.1880 +  for ac_exec_ext in '' $ac_executable_extensions; do
 17.1881 +  if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
 17.1882 +    ac_cv_prog_STRIP="${ac_tool_prefix}strip"
 17.1883 +    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
 17.1884 +    break 2
 17.1885 +  fi
 17.1886 +done
 17.1887 +done
 17.1888 +
 17.1889 +fi
 17.1890 +fi
 17.1891 +STRIP=$ac_cv_prog_STRIP
 17.1892 +if test -n "$STRIP"; then
 17.1893 +  echo "$as_me:$LINENO: result: $STRIP" >&5
 17.1894 +echo "${ECHO_T}$STRIP" >&6
 17.1895 +else
 17.1896 +  echo "$as_me:$LINENO: result: no" >&5
 17.1897 +echo "${ECHO_T}no" >&6
 17.1898 +fi
 17.1899 +
 17.1900 +fi
 17.1901 +if test -z "$ac_cv_prog_STRIP"; then
 17.1902 +  ac_ct_STRIP=$STRIP
 17.1903 +  # Extract the first word of "strip", so it can be a program name with args.
 17.1904 +set dummy strip; ac_word=$2
 17.1905 +echo "$as_me:$LINENO: checking for $ac_word" >&5
 17.1906 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
 17.1907 +if test "${ac_cv_prog_ac_ct_STRIP+set}" = set; then
 17.1908 +  echo $ECHO_N "(cached) $ECHO_C" >&6
 17.1909 +else
 17.1910 +  if test -n "$ac_ct_STRIP"; then
 17.1911 +  ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test.
 17.1912 +else
 17.1913 +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
 17.1914 +for as_dir in $PATH
 17.1915 +do
 17.1916 +  IFS=$as_save_IFS
 17.1917 +  test -z "$as_dir" && as_dir=.
 17.1918 +  for ac_exec_ext in '' $ac_executable_extensions; do
 17.1919 +  if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
 17.1920 +    ac_cv_prog_ac_ct_STRIP="strip"
 17.1921 +    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
 17.1922 +    break 2
 17.1923 +  fi
 17.1924 +done
 17.1925 +done
 17.1926 +
 17.1927 +  test -z "$ac_cv_prog_ac_ct_STRIP" && ac_cv_prog_ac_ct_STRIP=":"
 17.1928 +fi
 17.1929 +fi
 17.1930 +ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP
 17.1931 +if test -n "$ac_ct_STRIP"; then
 17.1932 +  echo "$as_me:$LINENO: result: $ac_ct_STRIP" >&5
 17.1933 +echo "${ECHO_T}$ac_ct_STRIP" >&6
 17.1934 +else
 17.1935 +  echo "$as_me:$LINENO: result: no" >&5
 17.1936 +echo "${ECHO_T}no" >&6
 17.1937 +fi
 17.1938 +
 17.1939 +  STRIP=$ac_ct_STRIP
 17.1940 +else
 17.1941 +  STRIP="$ac_cv_prog_STRIP"
 17.1942 +fi
 17.1943 +
 17.1944 +fi
 17.1945 +INSTALL_STRIP_PROGRAM="\${SHELL} \$(install_sh) -c -s"
 17.1946 +
 17.1947 +# We need awk for the "check" target.  The system "awk" is bad on
 17.1948 +# some platforms.
 17.1949 +
 17.1950 +
 17.1951 +
 17.1952 +          ac_config_headers="$ac_config_headers config.h"
 17.1953 +
 17.1954 +
 17.1955 +echo "$as_me:$LINENO: checking whether to enable maintainer-specific portions of Makefiles" >&5
 17.1956 +echo $ECHO_N "checking whether to enable maintainer-specific portions of Makefiles... $ECHO_C" >&6
 17.1957 +    # Check whether --enable-maintainer-mode or --disable-maintainer-mode was given.
 17.1958 +if test "${enable_maintainer_mode+set}" = set; then
 17.1959 +  enableval="$enable_maintainer_mode"
 17.1960 +  USE_MAINTAINER_MODE=$enableval
 17.1961 +else
 17.1962 +  USE_MAINTAINER_MODE=no
 17.1963 +fi;
 17.1964 +  echo "$as_me:$LINENO: result: $USE_MAINTAINER_MODE" >&5
 17.1965 +echo "${ECHO_T}$USE_MAINTAINER_MODE" >&6
 17.1966 +
 17.1967 +
 17.1968 +if test $USE_MAINTAINER_MODE = yes; then
 17.1969 +  MAINTAINER_MODE_TRUE=
 17.1970 +  MAINTAINER_MODE_FALSE='#'
 17.1971 +else
 17.1972 +  MAINTAINER_MODE_TRUE='#'
 17.1973 +  MAINTAINER_MODE_FALSE=
 17.1974 +fi
 17.1975 +
 17.1976 +  MAINT=$MAINTAINER_MODE_TRUE
 17.1977 +
 17.1978 +
 17.1979 +
 17.1980 +
 17.1981 +
 17.1982 +
 17.1983 +
 17.1984 +
 17.1985 +
 17.1986 +
 17.1987 +ac_ext=c
 17.1988 +ac_cpp='$CPP $CPPFLAGS'
 17.1989 +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
 17.1990 +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
 17.1991 +ac_compiler_gnu=$ac_cv_c_compiler_gnu
 17.1992 +if test -n "$ac_tool_prefix"; then
 17.1993 +  # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args.
 17.1994 +set dummy ${ac_tool_prefix}gcc; ac_word=$2
 17.1995 +echo "$as_me:$LINENO: checking for $ac_word" >&5
 17.1996 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
 17.1997 +if test "${ac_cv_prog_CC+set}" = set; then
 17.1998 +  echo $ECHO_N "(cached) $ECHO_C" >&6
 17.1999 +else
 17.2000 +  if test -n "$CC"; then
 17.2001 +  ac_cv_prog_CC="$CC" # Let the user override the test.
 17.2002 +else
 17.2003 +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
 17.2004 +for as_dir in $PATH
 17.2005 +do
 17.2006 +  IFS=$as_save_IFS
 17.2007 +  test -z "$as_dir" && as_dir=.
 17.2008 +  for ac_exec_ext in '' $ac_executable_extensions; do
 17.2009 +  if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
 17.2010 +    ac_cv_prog_CC="${ac_tool_prefix}gcc"
 17.2011 +    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
 17.2012 +    break 2
 17.2013 +  fi
 17.2014 +done
 17.2015 +done
 17.2016 +
 17.2017 +fi
 17.2018 +fi
 17.2019 +CC=$ac_cv_prog_CC
 17.2020 +if test -n "$CC"; then
 17.2021 +  echo "$as_me:$LINENO: result: $CC" >&5
 17.2022 +echo "${ECHO_T}$CC" >&6
 17.2023 +else
 17.2024 +  echo "$as_me:$LINENO: result: no" >&5
 17.2025 +echo "${ECHO_T}no" >&6
 17.2026 +fi
 17.2027 +
 17.2028 +fi
 17.2029 +if test -z "$ac_cv_prog_CC"; then
 17.2030 +  ac_ct_CC=$CC
 17.2031 +  # Extract the first word of "gcc", so it can be a program name with args.
 17.2032 +set dummy gcc; ac_word=$2
 17.2033 +echo "$as_me:$LINENO: checking for $ac_word" >&5
 17.2034 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
 17.2035 +if test "${ac_cv_prog_ac_ct_CC+set}" = set; then
 17.2036 +  echo $ECHO_N "(cached) $ECHO_C" >&6
 17.2037 +else
 17.2038 +  if test -n "$ac_ct_CC"; then
 17.2039 +  ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
 17.2040 +else
 17.2041 +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
 17.2042 +for as_dir in $PATH
 17.2043 +do
 17.2044 +  IFS=$as_save_IFS
 17.2045 +  test -z "$as_dir" && as_dir=.
 17.2046 +  for ac_exec_ext in '' $ac_executable_extensions; do
 17.2047 +  if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
 17.2048 +    ac_cv_prog_ac_ct_CC="gcc"
 17.2049 +    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
 17.2050 +    break 2
 17.2051 +  fi
 17.2052 +done
 17.2053 +done
 17.2054 +
 17.2055 +fi
 17.2056 +fi
 17.2057 +ac_ct_CC=$ac_cv_prog_ac_ct_CC
 17.2058 +if test -n "$ac_ct_CC"; then
 17.2059 +  echo "$as_me:$LINENO: result: $ac_ct_CC" >&5
 17.2060 +echo "${ECHO_T}$ac_ct_CC" >&6
 17.2061 +else
 17.2062 +  echo "$as_me:$LINENO: result: no" >&5
 17.2063 +echo "${ECHO_T}no" >&6
 17.2064 +fi
 17.2065 +
 17.2066 +  CC=$ac_ct_CC
 17.2067 +else
 17.2068 +  CC="$ac_cv_prog_CC"
 17.2069 +fi
 17.2070 +
 17.2071 +if test -z "$CC"; then
 17.2072 +  if test -n "$ac_tool_prefix"; then
 17.2073 +  # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args.
 17.2074 +set dummy ${ac_tool_prefix}cc; ac_word=$2
 17.2075 +echo "$as_me:$LINENO: checking for $ac_word" >&5
 17.2076 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
 17.2077 +if test "${ac_cv_prog_CC+set}" = set; then
 17.2078 +  echo $ECHO_N "(cached) $ECHO_C" >&6
 17.2079 +else
 17.2080 +  if test -n "$CC"; then
 17.2081 +  ac_cv_prog_CC="$CC" # Let the user override the test.
 17.2082 +else
 17.2083 +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
 17.2084 +for as_dir in $PATH
 17.2085 +do
 17.2086 +  IFS=$as_save_IFS
 17.2087 +  test -z "$as_dir" && as_dir=.
 17.2088 +  for ac_exec_ext in '' $ac_executable_extensions; do
 17.2089 +  if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
 17.2090 +    ac_cv_prog_CC="${ac_tool_prefix}cc"
 17.2091 +    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
 17.2092 +    break 2
 17.2093 +  fi
 17.2094 +done
 17.2095 +done
 17.2096 +
 17.2097 +fi
 17.2098 +fi
 17.2099 +CC=$ac_cv_prog_CC
 17.2100 +if test -n "$CC"; then
 17.2101 +  echo "$as_me:$LINENO: result: $CC" >&5
 17.2102 +echo "${ECHO_T}$CC" >&6
 17.2103 +else
 17.2104 +  echo "$as_me:$LINENO: result: no" >&5
 17.2105 +echo "${ECHO_T}no" >&6
 17.2106 +fi
 17.2107 +
 17.2108 +fi
 17.2109 +if test -z "$ac_cv_prog_CC"; then
 17.2110 +  ac_ct_CC=$CC
 17.2111 +  # Extract the first word of "cc", so it can be a program name with args.
 17.2112 +set dummy cc; ac_word=$2
 17.2113 +echo "$as_me:$LINENO: checking for $ac_word" >&5
 17.2114 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
 17.2115 +if test "${ac_cv_prog_ac_ct_CC+set}" = set; then
 17.2116 +  echo $ECHO_N "(cached) $ECHO_C" >&6
 17.2117 +else
 17.2118 +  if test -n "$ac_ct_CC"; then
 17.2119 +  ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
 17.2120 +else
 17.2121 +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
 17.2122 +for as_dir in $PATH
 17.2123 +do
 17.2124 +  IFS=$as_save_IFS
 17.2125 +  test -z "$as_dir" && as_dir=.
 17.2126 +  for ac_exec_ext in '' $ac_executable_extensions; do
 17.2127 +  if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
 17.2128 +    ac_cv_prog_ac_ct_CC="cc"
 17.2129 +    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
 17.2130 +    break 2
 17.2131 +  fi
 17.2132 +done
 17.2133 +done
 17.2134 +
 17.2135 +fi
 17.2136 +fi
 17.2137 +ac_ct_CC=$ac_cv_prog_ac_ct_CC
 17.2138 +if test -n "$ac_ct_CC"; then
 17.2139 +  echo "$as_me:$LINENO: result: $ac_ct_CC" >&5
 17.2140 +echo "${ECHO_T}$ac_ct_CC" >&6
 17.2141 +else
 17.2142 +  echo "$as_me:$LINENO: result: no" >&5
 17.2143 +echo "${ECHO_T}no" >&6
 17.2144 +fi
 17.2145 +
 17.2146 +  CC=$ac_ct_CC
 17.2147 +else
 17.2148 +  CC="$ac_cv_prog_CC"
 17.2149 +fi
 17.2150 +
 17.2151 +fi
 17.2152 +if test -z "$CC"; then
 17.2153 +  # Extract the first word of "cc", so it can be a program name with args.
 17.2154 +set dummy cc; ac_word=$2
 17.2155 +echo "$as_me:$LINENO: checking for $ac_word" >&5
 17.2156 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
 17.2157 +if test "${ac_cv_prog_CC+set}" = set; then
 17.2158 +  echo $ECHO_N "(cached) $ECHO_C" >&6
 17.2159 +else
 17.2160 +  if test -n "$CC"; then
 17.2161 +  ac_cv_prog_CC="$CC" # Let the user override the test.
 17.2162 +else
 17.2163 +  ac_prog_rejected=no
 17.2164 +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
 17.2165 +for as_dir in $PATH
 17.2166 +do
 17.2167 +  IFS=$as_save_IFS
 17.2168 +  test -z "$as_dir" && as_dir=.
 17.2169 +  for ac_exec_ext in '' $ac_executable_extensions; do
 17.2170 +  if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
 17.2171 +    if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then
 17.2172 +       ac_prog_rejected=yes
 17.2173 +       continue
 17.2174 +     fi
 17.2175 +    ac_cv_prog_CC="cc"
 17.2176 +    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
 17.2177 +    break 2
 17.2178 +  fi
 17.2179 +done
 17.2180 +done
 17.2181 +
 17.2182 +if test $ac_prog_rejected = yes; then
 17.2183 +  # We found a bogon in the path, so make sure we never use it.
 17.2184 +  set dummy $ac_cv_prog_CC
 17.2185 +  shift
 17.2186 +  if test $# != 0; then
 17.2187 +    # We chose a different compiler from the bogus one.
 17.2188 +    # However, it has the same basename, so the bogon will be chosen
 17.2189 +    # first if we set CC to just the basename; use the full file name.
 17.2190 +    shift
 17.2191 +    ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@"
 17.2192 +  fi
 17.2193 +fi
 17.2194 +fi
 17.2195 +fi
 17.2196 +CC=$ac_cv_prog_CC
 17.2197 +if test -n "$CC"; then
 17.2198 +  echo "$as_me:$LINENO: result: $CC" >&5
 17.2199 +echo "${ECHO_T}$CC" >&6
 17.2200 +else
 17.2201 +  echo "$as_me:$LINENO: result: no" >&5
 17.2202 +echo "${ECHO_T}no" >&6
 17.2203 +fi
 17.2204 +
 17.2205 +fi
 17.2206 +if test -z "$CC"; then
 17.2207 +  if test -n "$ac_tool_prefix"; then
 17.2208 +  for ac_prog in cl
 17.2209 +  do
 17.2210 +    # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args.
 17.2211 +set dummy $ac_tool_prefix$ac_prog; ac_word=$2
 17.2212 +echo "$as_me:$LINENO: checking for $ac_word" >&5
 17.2213 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
 17.2214 +if test "${ac_cv_prog_CC+set}" = set; then
 17.2215 +  echo $ECHO_N "(cached) $ECHO_C" >&6
 17.2216 +else
 17.2217 +  if test -n "$CC"; then
 17.2218 +  ac_cv_prog_CC="$CC" # Let the user override the test.
 17.2219 +else
 17.2220 +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
 17.2221 +for as_dir in $PATH
 17.2222 +do
 17.2223 +  IFS=$as_save_IFS
 17.2224 +  test -z "$as_dir" && as_dir=.
 17.2225 +  for ac_exec_ext in '' $ac_executable_extensions; do
 17.2226 +  if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
 17.2227 +    ac_cv_prog_CC="$ac_tool_prefix$ac_prog"
 17.2228 +    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
 17.2229 +    break 2
 17.2230 +  fi
 17.2231 +done
 17.2232 +done
 17.2233 +
 17.2234 +fi
 17.2235 +fi
 17.2236 +CC=$ac_cv_prog_CC
 17.2237 +if test -n "$CC"; then
 17.2238 +  echo "$as_me:$LINENO: result: $CC" >&5
 17.2239 +echo "${ECHO_T}$CC" >&6
 17.2240 +else
 17.2241 +  echo "$as_me:$LINENO: result: no" >&5
 17.2242 +echo "${ECHO_T}no" >&6
 17.2243 +fi
 17.2244 +
 17.2245 +    test -n "$CC" && break
 17.2246 +  done
 17.2247 +fi
 17.2248 +if test -z "$CC"; then
 17.2249 +  ac_ct_CC=$CC
 17.2250 +  for ac_prog in cl
 17.2251 +do
 17.2252 +  # Extract the first word of "$ac_prog", so it can be a program name with args.
 17.2253 +set dummy $ac_prog; ac_word=$2
 17.2254 +echo "$as_me:$LINENO: checking for $ac_word" >&5
 17.2255 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
 17.2256 +if test "${ac_cv_prog_ac_ct_CC+set}" = set; then
 17.2257 +  echo $ECHO_N "(cached) $ECHO_C" >&6
 17.2258 +else
 17.2259 +  if test -n "$ac_ct_CC"; then
 17.2260 +  ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
 17.2261 +else
 17.2262 +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
 17.2263 +for as_dir in $PATH
 17.2264 +do
 17.2265 +  IFS=$as_save_IFS
 17.2266 +  test -z "$as_dir" && as_dir=.
 17.2267 +  for ac_exec_ext in '' $ac_executable_extensions; do
 17.2268 +  if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
 17.2269 +    ac_cv_prog_ac_ct_CC="$ac_prog"
 17.2270 +    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
 17.2271 +    break 2
 17.2272 +  fi
 17.2273 +done
 17.2274 +done
 17.2275 +
 17.2276 +fi
 17.2277 +fi
 17.2278 +ac_ct_CC=$ac_cv_prog_ac_ct_CC
 17.2279 +if test -n "$ac_ct_CC"; then
 17.2280 +  echo "$as_me:$LINENO: result: $ac_ct_CC" >&5
 17.2281 +echo "${ECHO_T}$ac_ct_CC" >&6
 17.2282 +else
 17.2283 +  echo "$as_me:$LINENO: result: no" >&5
 17.2284 +echo "${ECHO_T}no" >&6
 17.2285 +fi
 17.2286 +
 17.2287 +  test -n "$ac_ct_CC" && break
 17.2288 +done
 17.2289 +
 17.2290 +  CC=$ac_ct_CC
 17.2291 +fi
 17.2292 +
 17.2293 +fi
 17.2294 +
 17.2295 +
 17.2296 +test -z "$CC" && { { echo "$as_me:$LINENO: error: no acceptable C compiler found in \$PATH
 17.2297 +See \`config.log' for more details." >&5
 17.2298 +echo "$as_me: error: no acceptable C compiler found in \$PATH
 17.2299 +See \`config.log' for more details." >&2;}
 17.2300 +   { (exit 1); exit 1; }; }
 17.2301 +
 17.2302 +# Provide some information about the compiler.
 17.2303 +echo "$as_me:$LINENO:" \
 17.2304 +     "checking for C compiler version" >&5
 17.2305 +ac_compiler=`set X $ac_compile; echo $2`
 17.2306 +{ (eval echo "$as_me:$LINENO: \"$ac_compiler --version </dev/null >&5\"") >&5
 17.2307 +  (eval $ac_compiler --version </dev/null >&5) 2>&5
 17.2308 +  ac_status=$?
 17.2309 +  echo "$as_me:$LINENO: \$? = $ac_status" >&5
 17.2310 +  (exit $ac_status); }
 17.2311 +{ (eval echo "$as_me:$LINENO: \"$ac_compiler -v </dev/null >&5\"") >&5
 17.2312 +  (eval $ac_compiler -v </dev/null >&5) 2>&5
 17.2313 +  ac_status=$?
 17.2314 +  echo "$as_me:$LINENO: \$? = $ac_status" >&5
 17.2315 +  (exit $ac_status); }
 17.2316 +{ (eval echo "$as_me:$LINENO: \"$ac_compiler -V </dev/null >&5\"") >&5
 17.2317 +  (eval $ac_compiler -V </dev/null >&5) 2>&5
 17.2318 +  ac_status=$?
 17.2319 +  echo "$as_me:$LINENO: \$? = $ac_status" >&5
 17.2320 +  (exit $ac_status); }
 17.2321 +
 17.2322 +cat >conftest.$ac_ext <<_ACEOF
 17.2323 +/* confdefs.h.  */
 17.2324 +_ACEOF
 17.2325 +cat confdefs.h >>conftest.$ac_ext
 17.2326 +cat >>conftest.$ac_ext <<_ACEOF
 17.2327 +/* end confdefs.h.  */
 17.2328 +
 17.2329 +int
 17.2330 +main ()
 17.2331 +{
 17.2332 +
 17.2333 +  ;
 17.2334 +  return 0;
 17.2335 +}
 17.2336 +_ACEOF
 17.2337 +ac_clean_files_save=$ac_clean_files
 17.2338 +ac_clean_files="$ac_clean_files a.out a.exe b.out"
 17.2339 +# Try to create an executable without -o first, disregard a.out.
 17.2340 +# It will help us diagnose broken compilers, and finding out an intuition
 17.2341 +# of exeext.
 17.2342 +echo "$as_me:$LINENO: checking for C compiler default output file name" >&5
 17.2343 +echo $ECHO_N "checking for C compiler default output file name... $ECHO_C" >&6
 17.2344 +ac_link_default=`echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'`
 17.2345 +if { (eval echo "$as_me:$LINENO: \"$ac_link_default\"") >&5
 17.2346 +  (eval $ac_link_default) 2>&5
 17.2347 +  ac_status=$?
 17.2348 +  echo "$as_me:$LINENO: \$? = $ac_status" >&5
 17.2349 +  (exit $ac_status); }; then
 17.2350 +  # Find the output, starting from the most likely.  This scheme is
 17.2351 +# not robust to junk in `.', hence go to wildcards (a.*) only as a last
 17.2352 +# resort.
 17.2353 +
 17.2354 +# Be careful to initialize this variable, since it used to be cached.
 17.2355 +# Otherwise an old cache value of `no' led to `EXEEXT = no' in a Makefile.
 17.2356 +ac_cv_exeext=
 17.2357 +# b.out is created by i960 compilers.
 17.2358 +for ac_file in a_out.exe a.exe conftest.exe a.out conftest a.* conftest.* b.out
 17.2359 +do
 17.2360 +  test -f "$ac_file" || continue
 17.2361 +  case $ac_file in
 17.2362 +    *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.o | *.obj )
 17.2363 +	;;
 17.2364 +    conftest.$ac_ext )
 17.2365 +	# This is the source file.
 17.2366 +	;;
 17.2367 +    [ab].out )
 17.2368 +	# We found the default executable, but exeext='' is most
 17.2369 +	# certainly right.
 17.2370 +	break;;
 17.2371 +    *.* )
 17.2372 +	ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'`
 17.2373 +	# FIXME: I believe we export ac_cv_exeext for Libtool,
 17.2374 +	# but it would be cool to find out if it's true.  Does anybody
 17.2375 +	# maintain Libtool? --akim.
 17.2376 +	export ac_cv_exeext
 17.2377 +	break;;
 17.2378 +    * )
 17.2379 +	break;;
 17.2380 +  esac
 17.2381 +done
 17.2382 +else
 17.2383 +  echo "$as_me: failed program was:" >&5
 17.2384 +sed 's/^/| /' conftest.$ac_ext >&5
 17.2385 +
 17.2386 +{ { echo "$as_me:$LINENO: error: C compiler cannot create executables
 17.2387 +See \`config.log' for more details." >&5
 17.2388 +echo "$as_me: error: C compiler cannot create executables
 17.2389 +See \`config.log' for more details." >&2;}
 17.2390 +   { (exit 77); exit 77; }; }
 17.2391 +fi
 17.2392 +
 17.2393 +ac_exeext=$ac_cv_exeext
 17.2394 +echo "$as_me:$LINENO: result: $ac_file" >&5
 17.2395 +echo "${ECHO_T}$ac_file" >&6
 17.2396 +
 17.2397 +# Check the compiler produces executables we can run.  If not, either
 17.2398 +# the compiler is broken, or we cross compile.
 17.2399 +echo "$as_me:$LINENO: checking whether the C compiler works" >&5
 17.2400 +echo $ECHO_N "checking whether the C compiler works... $ECHO_C" >&6
 17.2401 +# FIXME: These cross compiler hacks should be removed for Autoconf 3.0
 17.2402 +# If not cross compiling, check that we can run a simple program.
 17.2403 +if test "$cross_compiling" != yes; then
 17.2404 +  if { ac_try='./$ac_file'
 17.2405 +  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
 17.2406 +  (eval $ac_try) 2>&5
 17.2407 +  ac_status=$?
 17.2408 +  echo "$as_me:$LINENO: \$? = $ac_status" >&5
 17.2409 +  (exit $ac_status); }; }; then
 17.2410 +    cross_compiling=no
 17.2411 +  else
 17.2412 +    if test "$cross_compiling" = maybe; then
 17.2413 +	cross_compiling=yes
 17.2414 +    else
 17.2415 +	{ { echo "$as_me:$LINENO: error: cannot run C compiled programs.
 17.2416 +If you meant to cross compile, use \`--host'.
 17.2417 +See \`config.log' for more details." >&5
 17.2418 +echo "$as_me: error: cannot run C compiled programs.
 17.2419 +If you meant to cross compile, use \`--host'.
 17.2420 +See \`config.log' for more details." >&2;}
 17.2421 +   { (exit 1); exit 1; }; }
 17.2422 +    fi
 17.2423 +  fi
 17.2424 +fi
 17.2425 +echo "$as_me:$LINENO: result: yes" >&5
 17.2426 +echo "${ECHO_T}yes" >&6
 17.2427 +
 17.2428 +rm -f a.out a.exe conftest$ac_cv_exeext b.out
 17.2429 +ac_clean_files=$ac_clean_files_save
 17.2430 +# Check the compiler produces executables we can run.  If not, either
 17.2431 +# the compiler is broken, or we cross compile.
 17.2432 +echo "$as_me:$LINENO: checking whether we are cross compiling" >&5
 17.2433 +echo $ECHO_N "checking whether we are cross compiling... $ECHO_C" >&6
 17.2434 +echo "$as_me:$LINENO: result: $cross_compiling" >&5
 17.2435 +echo "${ECHO_T}$cross_compiling" >&6
 17.2436 +
 17.2437 +echo "$as_me:$LINENO: checking for suffix of executables" >&5
 17.2438 +echo $ECHO_N "checking for suffix of executables... $ECHO_C" >&6
 17.2439 +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
 17.2440 +  (eval $ac_link) 2>&5
 17.2441 +  ac_status=$?
 17.2442 +  echo "$as_me:$LINENO: \$? = $ac_status" >&5
 17.2443 +  (exit $ac_status); }; then
 17.2444 +  # If both `conftest.exe' and `conftest' are `present' (well, observable)
 17.2445 +# catch `conftest.exe'.  For instance with Cygwin, `ls conftest' will
 17.2446 +# work properly (i.e., refer to `conftest.exe'), while it won't with
 17.2447 +# `rm'.
 17.2448 +for ac_file in conftest.exe conftest conftest.*; do
 17.2449 +  test -f "$ac_file" || continue
 17.2450 +  case $ac_file in
 17.2451 +    *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.o | *.obj ) ;;
 17.2452 +    *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'`
 17.2453 +	  export ac_cv_exeext
 17.2454 +	  break;;
 17.2455 +    * ) break;;
 17.2456 +  esac
 17.2457 +done
 17.2458 +else
 17.2459 +  { { echo "$as_me:$LINENO: error: cannot compute suffix of executables: cannot compile and link
 17.2460 +See \`config.log' for more details." >&5
 17.2461 +echo "$as_me: error: cannot compute suffix of executables: cannot compile and link
 17.2462 +See \`config.log' for more details." >&2;}
 17.2463 +   { (exit 1); exit 1; }; }
 17.2464 +fi
 17.2465 +
 17.2466 +rm -f conftest$ac_cv_exeext
 17.2467 +echo "$as_me:$LINENO: result: $ac_cv_exeext" >&5
 17.2468 +echo "${ECHO_T}$ac_cv_exeext" >&6
 17.2469 +
 17.2470 +rm -f conftest.$ac_ext
 17.2471 +EXEEXT=$ac_cv_exeext
 17.2472 +ac_exeext=$EXEEXT
 17.2473 +echo "$as_me:$LINENO: checking for suffix of object files" >&5
 17.2474 +echo $ECHO_N "checking for suffix of object files... $ECHO_C" >&6
 17.2475 +if test "${ac_cv_objext+set}" = set; then
 17.2476 +  echo $ECHO_N "(cached) $ECHO_C" >&6
 17.2477 +else
 17.2478 +  cat >conftest.$ac_ext <<_ACEOF
 17.2479 +/* confdefs.h.  */
 17.2480 +_ACEOF
 17.2481 +cat confdefs.h >>conftest.$ac_ext
 17.2482 +cat >>conftest.$ac_ext <<_ACEOF
 17.2483 +/* end confdefs.h.  */
 17.2484 +
 17.2485 +int
 17.2486 +main ()
 17.2487 +{
 17.2488 +
 17.2489 +  ;
 17.2490 +  return 0;
 17.2491 +}
 17.2492 +_ACEOF
 17.2493 +rm -f conftest.o conftest.obj
 17.2494 +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
 17.2495 +  (eval $ac_compile) 2>&5
 17.2496 +  ac_status=$?
 17.2497 +  echo "$as_me:$LINENO: \$? = $ac_status" >&5
 17.2498 +  (exit $ac_status); }; then
 17.2499 +  for ac_file in `(ls conftest.o conftest.obj; ls conftest.*) 2>/dev/null`; do
 17.2500 +  case $ac_file in
 17.2501 +    *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg ) ;;
 17.2502 +    *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'`
 17.2503 +       break;;
 17.2504 +  esac
 17.2505 +done
 17.2506 +else
 17.2507 +  echo "$as_me: failed program was:" >&5
 17.2508 +sed 's/^/| /' conftest.$ac_ext >&5
 17.2509 +
 17.2510 +{ { echo "$as_me:$LINENO: error: cannot compute suffix of object files: cannot compile
 17.2511 +See \`config.log' for more details." >&5
 17.2512 +echo "$as_me: error: cannot compute suffix of object files: cannot compile
 17.2513 +See \`config.log' for more details." >&2;}
 17.2514 +   { (exit 1); exit 1; }; }
 17.2515 +fi
 17.2516 +
 17.2517 +rm -f conftest.$ac_cv_objext conftest.$ac_ext
 17.2518 +fi
 17.2519 +echo "$as_me:$LINENO: result: $ac_cv_objext" >&5
 17.2520 +echo "${ECHO_T}$ac_cv_objext" >&6
 17.2521 +OBJEXT=$ac_cv_objext
 17.2522 +ac_objext=$OBJEXT
 17.2523 +echo "$as_me:$LINENO: checking whether we are using the GNU C compiler" >&5
 17.2524 +echo $ECHO_N "checking whether we are using the GNU C compiler... $ECHO_C" >&6
 17.2525 +if test "${ac_cv_c_compiler_gnu+set}" = set; then
 17.2526 +  echo $ECHO_N "(cached) $ECHO_C" >&6
 17.2527 +else
 17.2528 +  cat >conftest.$ac_ext <<_ACEOF
 17.2529 +/* confdefs.h.  */
 17.2530 +_ACEOF
 17.2531 +cat confdefs.h >>conftest.$ac_ext
 17.2532 +cat >>conftest.$ac_ext <<_ACEOF
 17.2533 +/* end confdefs.h.  */
 17.2534 +
 17.2535 +int
 17.2536 +main ()
 17.2537 +{
 17.2538 +#ifndef __GNUC__
 17.2539 +       choke me
 17.2540 +#endif
 17.2541 +
 17.2542 +  ;
 17.2543 +  return 0;
 17.2544 +}
 17.2545 +_ACEOF
 17.2546 +rm -f conftest.$ac_objext
 17.2547 +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
 17.2548 +  (eval $ac_compile) 2>conftest.er1
 17.2549 +  ac_status=$?
 17.2550 +  grep -v '^ *+' conftest.er1 >conftest.err
 17.2551 +  rm -f conftest.er1
 17.2552 +  cat conftest.err >&5
 17.2553 +  echo "$as_me:$LINENO: \$? = $ac_status" >&5
 17.2554 +  (exit $ac_status); } &&
 17.2555 +	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
 17.2556 +  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
 17.2557 +  (eval $ac_try) 2>&5
 17.2558 +  ac_status=$?
 17.2559 +  echo "$as_me:$LINENO: \$? = $ac_status" >&5
 17.2560 +  (exit $ac_status); }; } &&
 17.2561 +	 { ac_try='test -s conftest.$ac_objext'
 17.2562 +  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
 17.2563 +  (eval $ac_try) 2>&5
 17.2564 +  ac_status=$?
 17.2565 +  echo "$as_me:$LINENO: \$? = $ac_status" >&5
 17.2566 +  (exit $ac_status); }; }; then
 17.2567 +  ac_compiler_gnu=yes
 17.2568 +else
 17.2569 +  echo "$as_me: failed program was:" >&5
 17.2570 +sed 's/^/| /' conftest.$ac_ext >&5
 17.2571 +
 17.2572 +ac_compiler_gnu=no
 17.2573 +fi
 17.2574 +rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
 17.2575 +ac_cv_c_compiler_gnu=$ac_compiler_gnu
 17.2576 +
 17.2577 +fi
 17.2578 +echo "$as_me:$LINENO: result: $ac_cv_c_compiler_gnu" >&5
 17.2579 +echo "${ECHO_T}$ac_cv_c_compiler_gnu" >&6
 17.2580 +GCC=`test $ac_compiler_gnu = yes && echo yes`
 17.2581 +ac_test_CFLAGS=${CFLAGS+set}
 17.2582 +ac_save_CFLAGS=$CFLAGS
 17.2583 +CFLAGS="-g"
 17.2584 +echo "$as_me:$LINENO: checking whether $CC accepts -g" >&5
 17.2585 +echo $ECHO_N "checking whether $CC accepts -g... $ECHO_C" >&6
 17.2586 +if test "${ac_cv_prog_cc_g+set}" = set; then
 17.2587 +  echo $ECHO_N "(cached) $ECHO_C" >&6
 17.2588 +else
 17.2589 +  cat >conftest.$ac_ext <<_ACEOF
 17.2590 +/* confdefs.h.  */
 17.2591 +_ACEOF
 17.2592 +cat confdefs.h >>conftest.$ac_ext
 17.2593 +cat >>conftest.$ac_ext <<_ACEOF
 17.2594 +/* end confdefs.h.  */
 17.2595 +
 17.2596 +int
 17.2597 +main ()
 17.2598 +{
 17.2599 +
 17.2600 +  ;
 17.2601 +  return 0;
 17.2602 +}
 17.2603 +_ACEOF
 17.2604 +rm -f conftest.$ac_objext
 17.2605 +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
 17.2606 +  (eval $ac_compile) 2>conftest.er1
 17.2607 +  ac_status=$?
 17.2608 +  grep -v '^ *+' conftest.er1 >conftest.err
 17.2609 +  rm -f conftest.er1
 17.2610 +  cat conftest.err >&5
 17.2611 +  echo "$as_me:$LINENO: \$? = $ac_status" >&5
 17.2612 +  (exit $ac_status); } &&
 17.2613 +	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
 17.2614 +  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
 17.2615 +  (eval $ac_try) 2>&5
 17.2616 +  ac_status=$?
 17.2617 +  echo "$as_me:$LINENO: \$? = $ac_status" >&5
 17.2618 +  (exit $ac_status); }; } &&
 17.2619 +	 { ac_try='test -s conftest.$ac_objext'
 17.2620 +  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
 17.2621 +  (eval $ac_try) 2>&5
 17.2622 +  ac_status=$?
 17.2623 +  echo "$as_me:$LINENO: \$? = $ac_status" >&5
 17.2624 +  (exit $ac_status); }; }; then
 17.2625 +  ac_cv_prog_cc_g=yes
 17.2626 +else
 17.2627 +  echo "$as_me: failed program was:" >&5
 17.2628 +sed 's/^/| /' conftest.$ac_ext >&5
 17.2629 +
 17.2630 +ac_cv_prog_cc_g=no
 17.2631 +fi
 17.2632 +rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
 17.2633 +fi
 17.2634 +echo "$as_me:$LINENO: result: $ac_cv_prog_cc_g" >&5
 17.2635 +echo "${ECHO_T}$ac_cv_prog_cc_g" >&6
 17.2636 +if test "$ac_test_CFLAGS" = set; then
 17.2637 +  CFLAGS=$ac_save_CFLAGS
 17.2638 +elif test $ac_cv_prog_cc_g = yes; then
 17.2639 +  if test "$GCC" = yes; then
 17.2640 +    CFLAGS="-g -O2"
 17.2641 +  else
 17.2642 +    CFLAGS="-g"
 17.2643 +  fi
 17.2644 +else
 17.2645 +  if test "$GCC" = yes; then
 17.2646 +    CFLAGS="-O2"
 17.2647 +  else
 17.2648 +    CFLAGS=
 17.2649 +  fi
 17.2650 +fi
 17.2651 +echo "$as_me:$LINENO: checking for $CC option to accept ANSI C" >&5
 17.2652 +echo $ECHO_N "checking for $CC option to accept ANSI C... $ECHO_C" >&6
 17.2653 +if test "${ac_cv_prog_cc_stdc+set}" = set; then
 17.2654 +  echo $ECHO_N "(cached) $ECHO_C" >&6
 17.2655 +else
 17.2656 +  ac_cv_prog_cc_stdc=no
 17.2657 +ac_save_CC=$CC
 17.2658 +cat >conftest.$ac_ext <<_ACEOF
 17.2659 +/* confdefs.h.  */
 17.2660 +_ACEOF
 17.2661 +cat confdefs.h >>conftest.$ac_ext
 17.2662 +cat >>conftest.$ac_ext <<_ACEOF
 17.2663 +/* end confdefs.h.  */
 17.2664 +#include <stdarg.h>
 17.2665 +#include <stdio.h>
 17.2666 +#include <sys/types.h>
 17.2667 +#include <sys/stat.h>
 17.2668 +/* Most of the following tests are stolen from RCS 5.7's src/conf.sh.  */
 17.2669 +struct buf { int x; };
 17.2670 +FILE * (*rcsopen) (struct buf *, struct stat *, int);
 17.2671 +static char *e (p, i)
 17.2672 +     char **p;
 17.2673 +     int i;
 17.2674 +{
 17.2675 +  return p[i];
 17.2676 +}
 17.2677 +static char *f (char * (*g) (char **, int), char **p, ...)
 17.2678 +{
 17.2679 +  char *s;
 17.2680 +  va_list v;
 17.2681 +  va_start (v,p);
 17.2682 +  s = g (p, va_arg (v,int));
 17.2683 +  va_end (v);
 17.2684 +  return s;
 17.2685 +}
 17.2686 +
 17.2687 +/* OSF 4.0 Compaq cc is some sort of almost-ANSI by default.  It has
 17.2688 +   function prototypes and stuff, but not '\xHH' hex character constants.
 17.2689 +   These don't provoke an error unfortunately, instead are silently treated
 17.2690 +   as 'x'.  The following induces an error, until -std1 is added to get
 17.2691 +   proper ANSI mode.  Curiously '\x00'!='x' always comes out true, for an
 17.2692 +   array size at least.  It's necessary to write '\x00'==0 to get something
 17.2693 +   that's true only with -std1.  */
 17.2694 +int osf4_cc_array ['\x00' == 0 ? 1 : -1];
 17.2695 +
 17.2696 +int test (int i, double x);
 17.2697 +struct s1 {int (*f) (int a);};
 17.2698 +struct s2 {int (*f) (double a);};
 17.2699 +int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int);
 17.2700 +int argc;
 17.2701 +char **argv;
 17.2702 +int
 17.2703 +main ()
 17.2704 +{
 17.2705 +return f (e, argv, 0) != argv[0]  ||  f (e, argv, 1) != argv[1];
 17.2706 +  ;
 17.2707 +  return 0;
 17.2708 +}
 17.2709 +_ACEOF
 17.2710 +# Don't try gcc -ansi; that turns off useful extensions and
 17.2711 +# breaks some systems' header files.
 17.2712 +# AIX			-qlanglvl=ansi
 17.2713 +# Ultrix and OSF/1	-std1
 17.2714 +# HP-UX 10.20 and later	-Ae
 17.2715 +# HP-UX older versions	-Aa -D_HPUX_SOURCE
 17.2716 +# SVR4			-Xc -D__EXTENSIONS__
 17.2717 +for ac_arg in "" -qlanglvl=ansi -std1 -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__"
 17.2718 +do
 17.2719 +  CC="$ac_save_CC $ac_arg"
 17.2720 +  rm -f conftest.$ac_objext
 17.2721 +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
 17.2722 +  (eval $ac_compile) 2>conftest.er1
 17.2723 +  ac_status=$?
 17.2724 +  grep -v '^ *+' conftest.er1 >conftest.err
 17.2725 +  rm -f conftest.er1
 17.2726 +  cat conftest.err >&5
 17.2727 +  echo "$as_me:$LINENO: \$? = $ac_status" >&5
 17.2728 +  (exit $ac_status); } &&
 17.2729 +	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
 17.2730 +  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
 17.2731 +  (eval $ac_try) 2>&5
 17.2732 +  ac_status=$?
 17.2733 +  echo "$as_me:$LINENO: \$? = $ac_status" >&5
 17.2734 +  (exit $ac_status); }; } &&
 17.2735 +	 { ac_try='test -s conftest.$ac_objext'
 17.2736 +  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
 17.2737 +  (eval $ac_try) 2>&5
 17.2738 +  ac_status=$?
 17.2739 +  echo "$as_me:$LINENO: \$? = $ac_status" >&5
 17.2740 +  (exit $ac_status); }; }; then
 17.2741 +  ac_cv_prog_cc_stdc=$ac_arg
 17.2742 +break
 17.2743 +else
 17.2744 +  echo "$as_me: failed program was:" >&5
 17.2745 +sed 's/^/| /' conftest.$ac_ext >&5
 17.2746 +
 17.2747 +fi
 17.2748 +rm -f conftest.err conftest.$ac_objext
 17.2749 +done
 17.2750 +rm -f conftest.$ac_ext conftest.$ac_objext
 17.2751 +CC=$ac_save_CC
 17.2752 +
 17.2753 +fi
 17.2754 +
 17.2755 +case "x$ac_cv_prog_cc_stdc" in
 17.2756 +  x|xno)
 17.2757 +    echo "$as_me:$LINENO: result: none needed" >&5
 17.2758 +echo "${ECHO_T}none needed" >&6 ;;
 17.2759 +  *)
 17.2760 +    echo "$as_me:$LINENO: result: $ac_cv_prog_cc_stdc" >&5
 17.2761 +echo "${ECHO_T}$ac_cv_prog_cc_stdc" >&6
 17.2762 +    CC="$CC $ac_cv_prog_cc_stdc" ;;
 17.2763 +esac
 17.2764 +
 17.2765 +# Some people use a C++ compiler to compile C.  Since we use `exit',
 17.2766 +# in C++ we need to declare it.  In case someone uses the same compiler
 17.2767 +# for both compiling C and C++ we need to have the C++ compiler decide
 17.2768 +# the declaration of exit, since it's the most demanding environment.
 17.2769 +cat >conftest.$ac_ext <<_ACEOF
 17.2770 +#ifndef __cplusplus
 17.2771 +  choke me
 17.2772 +#endif
 17.2773 +_ACEOF
 17.2774 +rm -f conftest.$ac_objext
 17.2775 +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
 17.2776 +  (eval $ac_compile) 2>conftest.er1
 17.2777 +  ac_status=$?
 17.2778 +  grep -v '^ *+' conftest.er1 >conftest.err
 17.2779 +  rm -f conftest.er1
 17.2780 +  cat conftest.err >&5
 17.2781 +  echo "$as_me:$LINENO: \$? = $ac_status" >&5
 17.2782 +  (exit $ac_status); } &&
 17.2783 +	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
 17.2784 +  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
 17.2785 +  (eval $ac_try) 2>&5
 17.2786 +  ac_status=$?
 17.2787 +  echo "$as_me:$LINENO: \$? = $ac_status" >&5
 17.2788 +  (exit $ac_status); }; } &&
 17.2789 +	 { ac_try='test -s conftest.$ac_objext'
 17.2790 +  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
 17.2791 +  (eval $ac_try) 2>&5
 17.2792 +  ac_status=$?
 17.2793 +  echo "$as_me:$LINENO: \$? = $ac_status" >&5
 17.2794 +  (exit $ac_status); }; }; then
 17.2795 +  for ac_declaration in \
 17.2796 +   '' \
 17.2797 +   'extern "C" void std::exit (int) throw (); using std::exit;' \
 17.2798 +   'extern "C" void std::exit (int); using std::exit;' \
 17.2799 +   'extern "C" void exit (int) throw ();' \
 17.2800 +   'extern "C" void exit (int);' \
 17.2801 +   'void exit (int);'
 17.2802 +do
 17.2803 +  cat >conftest.$ac_ext <<_ACEOF
 17.2804 +/* confdefs.h.  */
 17.2805 +_ACEOF
 17.2806 +cat confdefs.h >>conftest.$ac_ext
 17.2807 +cat >>conftest.$ac_ext <<_ACEOF
 17.2808 +/* end confdefs.h.  */
 17.2809 +$ac_declaration
 17.2810 +#include <stdlib.h>
 17.2811 +int
 17.2812 +main ()
 17.2813 +{
 17.2814 +exit (42);
 17.2815 +  ;
 17.2816 +  return 0;
 17.2817 +}
 17.2818 +_ACEOF
 17.2819 +rm -f conftest.$ac_objext
 17.2820 +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
 17.2821 +  (eval $ac_compile) 2>conftest.er1
 17.2822 +  ac_status=$?
 17.2823 +  grep -v '^ *+' conftest.er1 >conftest.err
 17.2824 +  rm -f conftest.er1
 17.2825 +  cat conftest.err >&5
 17.2826 +  echo "$as_me:$LINENO: \$? = $ac_status" >&5
 17.2827 +  (exit $ac_status); } &&
 17.2828 +	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
 17.2829 +  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
 17.2830 +  (eval $ac_try) 2>&5
 17.2831 +  ac_status=$?
 17.2832 +  echo "$as_me:$LINENO: \$? = $ac_status" >&5
 17.2833 +  (exit $ac_status); }; } &&
 17.2834 +	 { ac_try='test -s conftest.$ac_objext'
 17.2835 +  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
 17.2836 +  (eval $ac_try) 2>&5
 17.2837 +  ac_status=$?
 17.2838 +  echo "$as_me:$LINENO: \$? = $ac_status" >&5
 17.2839 +  (exit $ac_status); }; }; then
 17.2840 +  :
 17.2841 +else
 17.2842 +  echo "$as_me: failed program was:" >&5
 17.2843 +sed 's/^/| /' conftest.$ac_ext >&5
 17.2844 +
 17.2845 +continue
 17.2846 +fi
 17.2847 +rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
 17.2848 +  cat >conftest.$ac_ext <<_ACEOF
 17.2849 +/* confdefs.h.  */
 17.2850 +_ACEOF
 17.2851 +cat confdefs.h >>conftest.$ac_ext
 17.2852 +cat >>conftest.$ac_ext <<_ACEOF
 17.2853 +/* end confdefs.h.  */
 17.2854 +$ac_declaration
 17.2855 +int
 17.2856 +main ()
 17.2857 +{
 17.2858 +exit (42);
 17.2859 +  ;
 17.2860 +  return 0;
 17.2861 +}
 17.2862 +_ACEOF
 17.2863 +rm -f conftest.$ac_objext
 17.2864 +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
 17.2865 +  (eval $ac_compile) 2>conftest.er1
 17.2866 +  ac_status=$?
 17.2867 +  grep -v '^ *+' conftest.er1 >conftest.err
 17.2868 +  rm -f conftest.er1
 17.2869 +  cat conftest.err >&5
 17.2870 +  echo "$as_me:$LINENO: \$? = $ac_status" >&5
 17.2871 +  (exit $ac_status); } &&
 17.2872 +	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
 17.2873 +  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
 17.2874 +  (eval $ac_try) 2>&5
 17.2875 +  ac_status=$?
 17.2876 +  echo "$as_me:$LINENO: \$? = $ac_status" >&5
 17.2877 +  (exit $ac_status); }; } &&
 17.2878 +	 { ac_try='test -s conftest.$ac_objext'
 17.2879 +  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
 17.2880 +  (eval $ac_try) 2>&5
 17.2881 +  ac_status=$?
 17.2882 +  echo "$as_me:$LINENO: \$? = $ac_status" >&5
 17.2883 +  (exit $ac_status); }; }; then
 17.2884 +  break
 17.2885 +else
 17.2886 +  echo "$as_me: failed program was:" >&5
 17.2887 +sed 's/^/| /' conftest.$ac_ext >&5
 17.2888 +
 17.2889 +fi
 17.2890 +rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
 17.2891 +done
 17.2892 +rm -f conftest*
 17.2893 +if test -n "$ac_declaration"; then
 17.2894 +  echo '#ifdef __cplusplus' >>confdefs.h
 17.2895 +  echo $ac_declaration      >>confdefs.h
 17.2896 +  echo '#endif'             >>confdefs.h
 17.2897 +fi
 17.2898 +
 17.2899 +else
 17.2900 +  echo "$as_me: failed program was:" >&5
 17.2901 +sed 's/^/| /' conftest.$ac_ext >&5
 17.2902 +
 17.2903 +fi
 17.2904 +rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
 17.2905 +ac_ext=c
 17.2906 +ac_cpp='$CPP $CPPFLAGS'
 17.2907 +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
 17.2908 +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
 17.2909 +ac_compiler_gnu=$ac_cv_c_compiler_gnu
 17.2910 +DEPDIR="${am__leading_dot}deps"
 17.2911 +
 17.2912 +          ac_config_commands="$ac_config_commands depfiles"
 17.2913 +
 17.2914 +
 17.2915 +am_make=${MAKE-make}
 17.2916 +cat > confinc << 'END'
 17.2917 +am__doit:
 17.2918 +	@echo done
 17.2919 +.PHONY: am__doit
 17.2920 +END
 17.2921 +# If we don't find an include directive, just comment out the code.
 17.2922 +echo "$as_me:$LINENO: checking for style of include used by $am_make" >&5
 17.2923 +echo $ECHO_N "checking for style of include used by $am_make... $ECHO_C" >&6
 17.2924 +am__include="#"
 17.2925 +am__quote=
 17.2926 +_am_result=none
 17.2927 +# First try GNU make style include.
 17.2928 +echo "include confinc" > confmf
 17.2929 +# We grep out `Entering directory' and `Leaving directory'
 17.2930 +# messages which can occur if `w' ends up in MAKEFLAGS.
 17.2931 +# In particular we don't look at `^make:' because GNU make might
 17.2932 +# be invoked under some other name (usually "gmake"), in which
 17.2933 +# case it prints its new name instead of `make'.
 17.2934 +if test "`$am_make -s -f confmf 2> /dev/null | grep -v 'ing directory'`" = "done"; then
 17.2935 +   am__include=include
 17.2936 +   am__quote=
 17.2937 +   _am_result=GNU
 17.2938 +fi
 17.2939 +# Now try BSD make style include.
 17.2940 +if test "$am__include" = "#"; then
 17.2941 +   echo '.include "confinc"' > confmf
 17.2942 +   if test "`$am_make -s -f confmf 2> /dev/null`" = "done"; then
 17.2943 +      am__include=.include
 17.2944 +      am__quote="\""
 17.2945 +      _am_result=BSD
 17.2946 +   fi
 17.2947 +fi
 17.2948 +
 17.2949 +
 17.2950 +echo "$as_me:$LINENO: result: $_am_result" >&5
 17.2951 +echo "${ECHO_T}$_am_result" >&6
 17.2952 +rm -f confinc confmf
 17.2953 +
 17.2954 +# Check whether --enable-dependency-tracking or --disable-dependency-tracking was given.
 17.2955 +if test "${enable_dependency_tracking+set}" = set; then
 17.2956 +  enableval="$enable_dependency_tracking"
 17.2957 +
 17.2958 +fi;
 17.2959 +if test "x$enable_dependency_tracking" != xno; then
 17.2960 +  am_depcomp="$ac_aux_dir/depcomp"
 17.2961 +  AMDEPBACKSLASH='\'
 17.2962 +fi
 17.2963 +
 17.2964 +
 17.2965 +if test "x$enable_dependency_tracking" != xno; then
 17.2966 +  AMDEP_TRUE=
 17.2967 +  AMDEP_FALSE='#'
 17.2968 +else
 17.2969 +  AMDEP_TRUE='#'
 17.2970 +  AMDEP_FALSE=
 17.2971 +fi
 17.2972 +
 17.2973 +
 17.2974 +
 17.2975 +
 17.2976 +depcc="$CC"   am_compiler_list=
 17.2977 +
 17.2978 +echo "$as_me:$LINENO: checking dependency style of $depcc" >&5
 17.2979 +echo $ECHO_N "checking dependency style of $depcc... $ECHO_C" >&6
 17.2980 +if test "${am_cv_CC_dependencies_compiler_type+set}" = set; then
 17.2981 +  echo $ECHO_N "(cached) $ECHO_C" >&6
 17.2982 +else
 17.2983 +  if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then
 17.2984 +  # We make a subdir and do the tests there.  Otherwise we can end up
 17.2985 +  # making bogus files that we don't know about and never remove.  For
 17.2986 +  # instance it was reported that on HP-UX the gcc test will end up
 17.2987 +  # making a dummy file named `D' -- because `-MD' means `put the output
 17.2988 +  # in D'.
 17.2989 +  mkdir conftest.dir
 17.2990 +  # Copy depcomp to subdir because otherwise we won't find it if we're
 17.2991 +  # using a relative directory.
 17.2992 +  cp "$am_depcomp" conftest.dir
 17.2993 +  cd conftest.dir
 17.2994 +  # We will build objects and dependencies in a subdirectory because
 17.2995 +  # it helps to detect inapplicable dependency modes.  For instance
 17.2996 +  # both Tru64's cc and ICC support -MD to output dependencies as a
 17.2997 +  # side effect of compilation, but ICC will put the dependencies in
 17.2998 +  # the current directory while Tru64 will put them in the object
 17.2999 +  # directory.
 17.3000 +  mkdir sub
 17.3001 +
 17.3002 +  am_cv_CC_dependencies_compiler_type=none
 17.3003 +  if test "$am_compiler_list" = ""; then
 17.3004 +     am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp`
 17.3005 +  fi
 17.3006 +  for depmode in $am_compiler_list; do
 17.3007 +    # Setup a source with many dependencies, because some compilers
 17.3008 +    # like to wrap large dependency lists on column 80 (with \), and
 17.3009 +    # we should not choose a depcomp mode which is confused by this.
 17.3010 +    #
 17.3011 +    # We need to recreate these files for each test, as the compiler may
 17.3012 +    # overwrite some of them when testing with obscure command lines.
 17.3013 +    # This happens at least with the AIX C compiler.
 17.3014 +    : > sub/conftest.c
 17.3015 +    for i in 1 2 3 4 5 6; do
 17.3016 +      echo '#include "conftst'$i'.h"' >> sub/conftest.c
 17.3017 +      : > sub/conftst$i.h
 17.3018 +    done
 17.3019 +    echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf
 17.3020 +
 17.3021 +    case $depmode in
 17.3022 +    nosideeffect)
 17.3023 +      # after this tag, mechanisms are not by side-effect, so they'll
 17.3024 +      # only be used when explicitly requested
 17.3025 +      if test "x$enable_dependency_tracking" = xyes; then
 17.3026 +	continue
 17.3027 +      else
 17.3028 +	break
 17.3029 +      fi
 17.3030 +      ;;
 17.3031 +    none) break ;;
 17.3032 +    esac
 17.3033 +    # We check with `-c' and `-o' for the sake of the "dashmstdout"
 17.3034 +    # mode.  It turns out that the SunPro C++ compiler does not properly
 17.3035 +    # handle `-M -o', and we need to detect this.
 17.3036 +    if depmode=$depmode \
 17.3037 +       source=sub/conftest.c object=sub/conftest.${OBJEXT-o} \
 17.3038 +       depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \
 17.3039 +       $SHELL ./depcomp $depcc -c -o sub/conftest.${OBJEXT-o} sub/conftest.c \
 17.3040 +         >/dev/null 2>conftest.err &&
 17.3041 +       grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 &&
 17.3042 +       grep sub/conftest.${OBJEXT-o} sub/conftest.Po > /dev/null 2>&1 &&
 17.3043 +       ${MAKE-make} -s -f confmf > /dev/null 2>&1; then
 17.3044 +      # icc doesn't choke on unknown options, it will just issue warnings
 17.3045 +      # (even with -Werror).  So we grep stderr for any message
 17.3046 +      # that says an option was ignored.
 17.3047 +      if grep 'ignoring option' conftest.err >/dev/null 2>&1; then :; else
 17.3048 +        am_cv_CC_dependencies_compiler_type=$depmode
 17.3049 +        break
 17.3050 +      fi
 17.3051 +    fi
 17.3052 +  done
 17.3053 +
 17.3054 +  cd ..
 17.3055 +  rm -rf conftest.dir
 17.3056 +else
 17.3057 +  am_cv_CC_dependencies_compiler_type=none
 17.3058 +fi
 17.3059 +
 17.3060 +fi
 17.3061 +echo "$as_me:$LINENO: result: $am_cv_CC_dependencies_compiler_type" >&5
 17.3062 +echo "${ECHO_T}$am_cv_CC_dependencies_compiler_type" >&6
 17.3063 +CCDEPMODE=depmode=$am_cv_CC_dependencies_compiler_type
 17.3064 +
 17.3065 +
 17.3066 +
 17.3067 +if
 17.3068 +  test "x$enable_dependency_tracking" != xno \
 17.3069 +  && test "$am_cv_CC_dependencies_compiler_type" = gcc3; then
 17.3070 +  am__fastdepCC_TRUE=
 17.3071 +  am__fastdepCC_FALSE='#'
 17.3072 +else
 17.3073 +  am__fastdepCC_TRUE='#'
 17.3074 +  am__fastdepCC_FALSE=
 17.3075 +fi
 17.3076 +
 17.3077 +
 17.3078 +
 17.3079 +
 17.3080 +
 17.3081 +
 17.3082 +echo "$as_me:$LINENO: checking for ${CC-cc} option to accept ANSI C" >&5
 17.3083 +echo $ECHO_N "checking for ${CC-cc} option to accept ANSI C... $ECHO_C" >&6
 17.3084 +if test "${am_cv_prog_cc_stdc+set}" = set; then
 17.3085 +  echo $ECHO_N "(cached) $ECHO_C" >&6
 17.3086 +else
 17.3087 +  am_cv_prog_cc_stdc=no
 17.3088 +ac_save_CC="$CC"
 17.3089 +# Don't try gcc -ansi; that turns off useful extensions and
 17.3090 +# breaks some systems' header files.
 17.3091 +# AIX			-qlanglvl=ansi
 17.3092 +# Ultrix and OSF/1	-std1
 17.3093 +# HP-UX 10.20 and later	-Ae
 17.3094 +# HP-UX older versions	-Aa -D_HPUX_SOURCE
 17.3095 +# SVR4			-Xc -D__EXTENSIONS__
 17.3096 +for ac_arg in "" -qlanglvl=ansi -std1 -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__"
 17.3097 +do
 17.3098 +  CC="$ac_save_CC $ac_arg"
 17.3099 +  cat >conftest.$ac_ext <<_ACEOF
 17.3100 +/* confdefs.h.  */
 17.3101 +_ACEOF
 17.3102 +cat confdefs.h >>conftest.$ac_ext
 17.3103 +cat >>conftest.$ac_ext <<_ACEOF
 17.3104 +/* end confdefs.h.  */
 17.3105 +#include <stdarg.h>
 17.3106 +#include <stdio.h>
 17.3107 +#include <sys/types.h>
 17.3108 +#include <sys/stat.h>
 17.3109 +/* Most of the following tests are stolen from RCS 5.7's src/conf.sh.  */
 17.3110 +struct buf { int x; };
 17.3111 +FILE * (*rcsopen) (struct buf *, struct stat *, int);
 17.3112 +static char *e (p, i)
 17.3113 +     char **p;
 17.3114 +     int i;
 17.3115 +{
 17.3116 +  return p[i];
 17.3117 +}
 17.3118 +static char *f (char * (*g) (char **, int), char **p, ...)
 17.3119 +{
 17.3120 +  char *s;
 17.3121 +  va_list v;
 17.3122 +  va_start (v,p);
 17.3123 +  s = g (p, va_arg (v,int));
 17.3124 +  va_end (v);
 17.3125 +  return s;
 17.3126 +}
 17.3127 +int test (int i, double x);
 17.3128 +struct s1 {int (*f) (int a);};
 17.3129 +struct s2 {int (*f) (double a);};
 17.3130 +int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int);
 17.3131 +int argc;
 17.3132 +char **argv;
 17.3133 +
 17.3134 +int
 17.3135 +main ()
 17.3136 +{
 17.3137 +
 17.3138 +return f (e, argv, 0) != argv[0]  ||  f (e, argv, 1) != argv[1];
 17.3139 +
 17.3140 +  ;
 17.3141 +  return 0;
 17.3142 +}
 17.3143 +_ACEOF
 17.3144 +rm -f conftest.$ac_objext
 17.3145 +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
 17.3146 +  (eval $ac_compile) 2>conftest.er1
 17.3147 +  ac_status=$?
 17.3148 +  grep -v '^ *+' conftest.er1 >conftest.err
 17.3149 +  rm -f conftest.er1
 17.3150 +  cat conftest.err >&5
 17.3151 +  echo "$as_me:$LINENO: \$? = $ac_status" >&5
 17.3152 +  (exit $ac_status); } &&
 17.3153 +	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
 17.3154 +  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
 17.3155 +  (eval $ac_try) 2>&5
 17.3156 +  ac_status=$?
 17.3157 +  echo "$as_me:$LINENO: \$? = $ac_status" >&5
 17.3158 +  (exit $ac_status); }; } &&
 17.3159 +	 { ac_try='test -s conftest.$ac_objext'
 17.3160 +  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
 17.3161 +  (eval $ac_try) 2>&5
 17.3162 +  ac_status=$?
 17.3163 +  echo "$as_me:$LINENO: \$? = $ac_status" >&5
 17.3164 +  (exit $ac_status); }; }; then
 17.3165 +  am_cv_prog_cc_stdc="$ac_arg"; break
 17.3166 +else
 17.3167 +  echo "$as_me: failed program was:" >&5
 17.3168 +sed 's/^/| /' conftest.$ac_ext >&5
 17.3169 +
 17.3170 +fi
 17.3171 +rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
 17.3172 +done
 17.3173 +CC="$ac_save_CC"
 17.3174 +
 17.3175 +fi
 17.3176 +
 17.3177 +if test -z "$am_cv_prog_cc_stdc"; then
 17.3178 +  echo "$as_me:$LINENO: result: none needed" >&5
 17.3179 +echo "${ECHO_T}none needed" >&6
 17.3180 +else
 17.3181 +  echo "$as_me:$LINENO: result: $am_cv_prog_cc_stdc" >&5
 17.3182 +echo "${ECHO_T}$am_cv_prog_cc_stdc" >&6
 17.3183 +fi
 17.3184 +case "x$am_cv_prog_cc_stdc" in
 17.3185 +  x|xno) ;;
 17.3186 +  *) CC="$CC $am_cv_prog_cc_stdc" ;;
 17.3187 +esac
 17.3188 +
 17.3189 +ac_ext=c
 17.3190 +ac_cpp='$CPP $CPPFLAGS'
 17.3191 +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
 17.3192 +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
 17.3193 +ac_compiler_gnu=$ac_cv_c_compiler_gnu
 17.3194 +echo "$as_me:$LINENO: checking how to run the C preprocessor" >&5
 17.3195 +echo $ECHO_N "checking how to run the C preprocessor... $ECHO_C" >&6
 17.3196 +# On Suns, sometimes $CPP names a directory.
 17.3197 +if test -n "$CPP" && test -d "$CPP"; then
 17.3198 +  CPP=
 17.3199 +fi
 17.3200 +if test -z "$CPP"; then
 17.3201 +  if test "${ac_cv_prog_CPP+set}" = set; then
 17.3202 +  echo $ECHO_N "(cached) $ECHO_C" >&6
 17.3203 +else
 17.3204 +      # Double quotes because CPP needs to be expanded
 17.3205 +    for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp"
 17.3206 +    do
 17.3207 +      ac_preproc_ok=false
 17.3208 +for ac_c_preproc_warn_flag in '' yes
 17.3209 +do
 17.3210 +  # Use a header file that comes with gcc, so configuring glibc
 17.3211 +  # with a fresh cross-compiler works.
 17.3212 +  # Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
 17.3213 +  # <limits.h> exists even on freestanding compilers.
 17.3214 +  # On the NeXT, cc -E runs the code through the compiler's parser,
 17.3215 +  # not just through cpp. "Syntax error" is here to catch this case.
 17.3216 +  cat >conftest.$ac_ext <<_ACEOF
 17.3217 +/* confdefs.h.  */
 17.3218 +_ACEOF
 17.3219 +cat confdefs.h >>conftest.$ac_ext
 17.3220 +cat >>conftest.$ac_ext <<_ACEOF
 17.3221 +/* end confdefs.h.  */
 17.3222 +#ifdef __STDC__
 17.3223 +# include <limits.h>
 17.3224 +#else
 17.3225 +# include <assert.h>
 17.3226 +#endif
 17.3227 +		     Syntax error
 17.3228 +_ACEOF
 17.3229 +if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
 17.3230 +  (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
 17.3231 +  ac_status=$?
 17.3232 +  grep -v '^ *+' conftest.er1 >conftest.err
 17.3233 +  rm -f conftest.er1
 17.3234 +  cat conftest.err >&5
 17.3235 +  echo "$as_me:$LINENO: \$? = $ac_status" >&5
 17.3236 +  (exit $ac_status); } >/dev/null; then
 17.3237 +  if test -s conftest.err; then
 17.3238 +    ac_cpp_err=$ac_c_preproc_warn_flag
 17.3239 +    ac_cpp_err=$ac_cpp_err$ac_c_werror_flag
 17.3240 +  else
 17.3241 +    ac_cpp_err=
 17.3242 +  fi
 17.3243 +else
 17.3244 +  ac_cpp_err=yes
 17.3245 +fi
 17.3246 +if test -z "$ac_cpp_err"; then
 17.3247 +  :
 17.3248 +else
 17.3249 +  echo "$as_me: failed program was:" >&5
 17.3250 +sed 's/^/| /' conftest.$ac_ext >&5
 17.3251 +
 17.3252 +  # Broken: fails on valid input.
 17.3253 +continue
 17.3254 +fi
 17.3255 +rm -f conftest.err conftest.$ac_ext
 17.3256 +
 17.3257 +  # OK, works on sane cases.  Now check whether non-existent headers
 17.3258 +  # can be detected and how.
 17.3259 +  cat >conftest.$ac_ext <<_ACEOF
 17.3260 +/* confdefs.h.  */
 17.3261 +_ACEOF
 17.3262 +cat confdefs.h >>conftest.$ac_ext
 17.3263 +cat >>conftest.$ac_ext <<_ACEOF
 17.3264 +/* end confdefs.h.  */
 17.3265 +#include <ac_nonexistent.h>
 17.3266 +_ACEOF
 17.3267 +if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
 17.3268 +  (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
 17.3269 +  ac_status=$?
 17.3270 +  grep -v '^ *+' conftest.er1 >conftest.err
 17.3271 +  rm -f conftest.er1
 17.3272 +  cat conftest.err >&5
 17.3273 +  echo "$as_me:$LINENO: \$? = $ac_status" >&5
 17.3274 +  (exit $ac_status); } >/dev/null; then
 17.3275 +  if test -s conftest.err; then
 17.3276 +    ac_cpp_err=$ac_c_preproc_warn_flag
 17.3277 +    ac_cpp_err=$ac_cpp_err$ac_c_werror_flag
 17.3278 +  else
 17.3279 +    ac_cpp_err=
 17.3280 +  fi
 17.3281 +else
 17.3282 +  ac_cpp_err=yes
 17.3283 +fi
 17.3284 +if test -z "$ac_cpp_err"; then
 17.3285 +  # Broken: success on invalid input.
 17.3286 +continue
 17.3287 +else
 17.3288 +  echo "$as_me: failed program was:" >&5
 17.3289 +sed 's/^/| /' conftest.$ac_ext >&5
 17.3290 +
 17.3291 +  # Passes both tests.
 17.3292 +ac_preproc_ok=:
 17.3293 +break
 17.3294 +fi
 17.3295 +rm -f conftest.err conftest.$ac_ext
 17.3296 +
 17.3297 +done
 17.3298 +# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
 17.3299 +rm -f conftest.err conftest.$ac_ext
 17.3300 +if $ac_preproc_ok; then
 17.3301 +  break
 17.3302 +fi
 17.3303 +
 17.3304 +    done
 17.3305 +    ac_cv_prog_CPP=$CPP
 17.3306 +
 17.3307 +fi
 17.3308 +  CPP=$ac_cv_prog_CPP
 17.3309 +else
 17.3310 +  ac_cv_prog_CPP=$CPP
 17.3311 +fi
 17.3312 +echo "$as_me:$LINENO: result: $CPP" >&5
 17.3313 +echo "${ECHO_T}$CPP" >&6
 17.3314 +ac_preproc_ok=false
 17.3315 +for ac_c_preproc_warn_flag in '' yes
 17.3316 +do
 17.3317 +  # Use a header file that comes with gcc, so configuring glibc
 17.3318 +  # with a fresh cross-compiler works.
 17.3319 +  # Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
 17.3320 +  # <limits.h> exists even on freestanding compilers.
 17.3321 +  # On the NeXT, cc -E runs the code through the compiler's parser,
 17.3322 +  # not just through cpp. "Syntax error" is here to catch this case.
 17.3323 +  cat >conftest.$ac_ext <<_ACEOF
 17.3324 +/* confdefs.h.  */
 17.3325 +_ACEOF
 17.3326 +cat confdefs.h >>conftest.$ac_ext
 17.3327 +cat >>conftest.$ac_ext <<_ACEOF
 17.3328 +/* end confdefs.h.  */
 17.3329 +#ifdef __STDC__
 17.3330 +# include <limits.h>
 17.3331 +#else
 17.3332 +# include <assert.h>
 17.3333 +#endif
 17.3334 +		     Syntax error
 17.3335 +_ACEOF
 17.3336 +if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
 17.3337 +  (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
 17.3338 +  ac_status=$?
 17.3339 +  grep -v '^ *+' conftest.er1 >conftest.err
 17.3340 +  rm -f conftest.er1
 17.3341 +  cat conftest.err >&5
 17.3342 +  echo "$as_me:$LINENO: \$? = $ac_status" >&5
 17.3343 +  (exit $ac_status); } >/dev/null; then
 17.3344 +  if test -s conftest.err; then
 17.3345 +    ac_cpp_err=$ac_c_preproc_warn_flag
 17.3346 +    ac_cpp_err=$ac_cpp_err$ac_c_werror_flag
 17.3347 +  else
 17.3348 +    ac_cpp_err=
 17.3349 +  fi
 17.3350 +else
 17.3351 +  ac_cpp_err=yes
 17.3352 +fi
 17.3353 +if test -z "$ac_cpp_err"; then
 17.3354 +  :
 17.3355 +else
 17.3356 +  echo "$as_me: failed program was:" >&5
 17.3357 +sed 's/^/| /' conftest.$ac_ext >&5
 17.3358 +
 17.3359 +  # Broken: fails on valid input.
 17.3360 +continue
 17.3361 +fi
 17.3362 +rm -f conftest.err conftest.$ac_ext
 17.3363 +
 17.3364 +  # OK, works on sane cases.  Now check whether non-existent headers
 17.3365 +  # can be detected and how.
 17.3366 +  cat >conftest.$ac_ext <<_ACEOF
 17.3367 +/* confdefs.h.  */
 17.3368 +_ACEOF
 17.3369 +cat confdefs.h >>conftest.$ac_ext
 17.3370 +cat >>conftest.$ac_ext <<_ACEOF
 17.3371 +/* end confdefs.h.  */
 17.3372 +#include <ac_nonexistent.h>
 17.3373 +_ACEOF
 17.3374 +if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
 17.3375 +  (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
 17.3376 +  ac_status=$?
 17.3377 +  grep -v '^ *+' conftest.er1 >conftest.err
 17.3378 +  rm -f conftest.er1
 17.3379 +  cat conftest.err >&5
 17.3380 +  echo "$as_me:$LINENO: \$? = $ac_status" >&5
 17.3381 +  (exit $ac_status); } >/dev/null; then
 17.3382 +  if test -s conftest.err; then
 17.3383 +    ac_cpp_err=$ac_c_preproc_warn_flag
 17.3384 +    ac_cpp_err=$ac_cpp_err$ac_c_werror_flag
 17.3385 +  else
 17.3386 +    ac_cpp_err=
 17.3387 +  fi
 17.3388 +else
 17.3389 +  ac_cpp_err=yes
 17.3390 +fi
 17.3391 +if test -z "$ac_cpp_err"; then
 17.3392 +  # Broken: success on invalid input.
 17.3393 +continue
 17.3394 +else
 17.3395 +  echo "$as_me: failed program was:" >&5
 17.3396 +sed 's/^/| /' conftest.$ac_ext >&5
 17.3397 +
 17.3398 +  # Passes both tests.
 17.3399 +ac_preproc_ok=:
 17.3400 +break
 17.3401 +fi
 17.3402 +rm -f conftest.err conftest.$ac_ext
 17.3403 +
 17.3404 +done
 17.3405 +# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
 17.3406 +rm -f conftest.err conftest.$ac_ext
 17.3407 +if $ac_preproc_ok; then
 17.3408 +  :
 17.3409 +else
 17.3410 +  { { echo "$as_me:$LINENO: error: C preprocessor \"$CPP\" fails sanity check
 17.3411 +See \`config.log' for more details." >&5
 17.3412 +echo "$as_me: error: C preprocessor \"$CPP\" fails sanity check
 17.3413 +See \`config.log' for more details." >&2;}
 17.3414 +   { (exit 1); exit 1; }; }
 17.3415 +fi
 17.3416 +
 17.3417 +ac_ext=c
 17.3418 +ac_cpp='$CPP $CPPFLAGS'
 17.3419 +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
 17.3420 +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
 17.3421 +ac_compiler_gnu=$ac_cv_c_compiler_gnu
 17.3422 +
 17.3423 +
 17.3424 +echo "$as_me:$LINENO: checking for egrep" >&5
 17.3425 +echo $ECHO_N "checking for egrep... $ECHO_C" >&6
 17.3426 +if test "${ac_cv_prog_egrep+set}" = set; then
 17.3427 +  echo $ECHO_N "(cached) $ECHO_C" >&6
 17.3428 +else
 17.3429 +  if echo a | (grep -E '(a|b)') >/dev/null 2>&1
 17.3430 +    then ac_cv_prog_egrep='grep -E'
 17.3431 +    else ac_cv_prog_egrep='egrep'
 17.3432 +    fi
 17.3433 +fi
 17.3434 +echo "$as_me:$LINENO: result: $ac_cv_prog_egrep" >&5
 17.3435 +echo "${ECHO_T}$ac_cv_prog_egrep" >&6
 17.3436 + EGREP=$ac_cv_prog_egrep
 17.3437 +
 17.3438 +
 17.3439 +echo "$as_me:$LINENO: checking for ANSI C header files" >&5
 17.3440 +echo $ECHO_N "checking for ANSI C header files... $ECHO_C" >&6
 17.3441 +if test "${ac_cv_header_stdc+set}" = set; then
 17.3442 +  echo $ECHO_N "(cached) $ECHO_C" >&6
 17.3443 +else
 17.3444 +  cat >conftest.$ac_ext <<_ACEOF
 17.3445 +/* confdefs.h.  */
 17.3446 +_ACEOF
 17.3447 +cat confdefs.h >>conftest.$ac_ext
 17.3448 +cat >>conftest.$ac_ext <<_ACEOF
 17.3449 +/* end confdefs.h.  */
 17.3450 +#include <stdlib.h>
 17.3451 +#include <stdarg.h>
 17.3452 +#include <string.h>
 17.3453 +#include <float.h>
 17.3454 +
 17.3455 +int
 17.3456 +main ()
 17.3457 +{
 17.3458 +
 17.3459 +  ;
 17.3460 +  return 0;
 17.3461 +}
 17.3462 +_ACEOF
 17.3463 +rm -f conftest.$ac_objext
 17.3464 +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
 17.3465 +  (eval $ac_compile) 2>conftest.er1
 17.3466 +  ac_status=$?
 17.3467 +  grep -v '^ *+' conftest.er1 >conftest.err
 17.3468 +  rm -f conftest.er1
 17.3469 +  cat conftest.err >&5
 17.3470 +  echo "$as_me:$LINENO: \$? = $ac_status" >&5
 17.3471 +  (exit $ac_status); } &&
 17.3472 +	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
 17.3473 +  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
 17.3474 +  (eval $ac_try) 2>&5
 17.3475 +  ac_status=$?
 17.3476 +  echo "$as_me:$LINENO: \$? = $ac_status" >&5
 17.3477 +  (exit $ac_status); }; } &&
 17.3478 +	 { ac_try='test -s conftest.$ac_objext'
 17.3479 +  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
 17.3480 +  (eval $ac_try) 2>&5
 17.3481 +  ac_status=$?
 17.3482 +  echo "$as_me:$LINENO: \$? = $ac_status" >&5
 17.3483 +  (exit $ac_status); }; }; then
 17.3484 +  ac_cv_header_stdc=yes
 17.3485 +else
 17.3486 +  echo "$as_me: failed program was:" >&5
 17.3487 +sed 's/^/| /' conftest.$ac_ext >&5
 17.3488 +
 17.3489 +ac_cv_header_stdc=no
 17.3490 +fi
 17.3491 +rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
 17.3492 +
 17.3493 +if test $ac_cv_header_stdc = yes; then
 17.3494 +  # SunOS 4.x string.h does not declare mem*, contrary to ANSI.
 17.3495 +  cat >conftest.$ac_ext <<_ACEOF
 17.3496 +/* confdefs.h.  */
 17.3497 +_ACEOF
 17.3498 +cat confdefs.h >>conftest.$ac_ext
 17.3499 +cat >>conftest.$ac_ext <<_ACEOF
 17.3500 +/* end confdefs.h.  */
 17.3501 +#include <string.h>
 17.3502 +
 17.3503 +_ACEOF
 17.3504 +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
 17.3505 +  $EGREP "memchr" >/dev/null 2>&1; then
 17.3506 +  :
 17.3507 +else
 17.3508 +  ac_cv_header_stdc=no
 17.3509 +fi
 17.3510 +rm -f conftest*
 17.3511 +
 17.3512 +fi
 17.3513 +
 17.3514 +if test $ac_cv_header_stdc = yes; then
 17.3515 +  # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI.
 17.3516 +  cat >conftest.$ac_ext <<_ACEOF
 17.3517 +/* confdefs.h.  */
 17.3518 +_ACEOF
 17.3519 +cat confdefs.h >>conftest.$ac_ext
 17.3520 +cat >>conftest.$ac_ext <<_ACEOF
 17.3521 +/* end confdefs.h.  */
 17.3522 +#include <stdlib.h>
 17.3523 +
 17.3524 +_ACEOF
 17.3525 +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
 17.3526 +  $EGREP "free" >/dev/null 2>&1; then
 17.3527 +  :
 17.3528 +else
 17.3529 +  ac_cv_header_stdc=no
 17.3530 +fi
 17.3531 +rm -f conftest*
 17.3532 +
 17.3533 +fi
 17.3534 +
 17.3535 +if test $ac_cv_header_stdc = yes; then
 17.3536 +  # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi.
 17.3537 +  if test "$cross_compiling" = yes; then
 17.3538 +  :
 17.3539 +else
 17.3540 +  cat >conftest.$ac_ext <<_ACEOF
 17.3541 +/* confdefs.h.  */
 17.3542 +_ACEOF
 17.3543 +cat confdefs.h >>conftest.$ac_ext
 17.3544 +cat >>conftest.$ac_ext <<_ACEOF
 17.3545 +/* end confdefs.h.  */
 17.3546 +#include <ctype.h>
 17.3547 +#if ((' ' & 0x0FF) == 0x020)
 17.3548 +# define ISLOWER(c) ('a' <= (c) && (c) <= 'z')
 17.3549 +# define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c))
 17.3550 +#else
 17.3551 +# define ISLOWER(c) \
 17.3552 +		   (('a' <= (c) && (c) <= 'i') \
 17.3553 +		     || ('j' <= (c) && (c) <= 'r') \
 17.3554 +		     || ('s' <= (c) && (c) <= 'z'))
 17.3555 +# define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c))
 17.3556 +#endif
 17.3557 +
 17.3558 +#define XOR(e, f) (((e) && !(f)) || (!(e) && (f)))
 17.3559 +int
 17.3560 +main ()
 17.3561 +{
 17.3562 +  int i;
 17.3563 +  for (i = 0; i < 256; i++)
 17.3564 +    if (XOR (islower (i), ISLOWER (i))
 17.3565 +	|| toupper (i) != TOUPPER (i))
 17.3566 +      exit(2);
 17.3567 +  exit (0);
 17.3568 +}
 17.3569 +_ACEOF
 17.3570 +rm -f conftest$ac_exeext
 17.3571 +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
 17.3572 +  (eval $ac_link) 2>&5
 17.3573 +  ac_status=$?
 17.3574 +  echo "$as_me:$LINENO: \$? = $ac_status" >&5
 17.3575 +  (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
 17.3576 +  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
 17.3577 +  (eval $ac_try) 2>&5
 17.3578 +  ac_status=$?
 17.3579 +  echo "$as_me:$LINENO: \$? = $ac_status" >&5
 17.3580 +  (exit $ac_status); }; }; then
 17.3581 +  :
 17.3582 +else
 17.3583 +  echo "$as_me: program exited with status $ac_status" >&5
 17.3584 +echo "$as_me: failed program was:" >&5
 17.3585 +sed 's/^/| /' conftest.$ac_ext >&5
 17.3586 +
 17.3587 +( exit $ac_status )
 17.3588 +ac_cv_header_stdc=no
 17.3589 +fi
 17.3590 +rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
 17.3591 +fi
 17.3592 +fi
 17.3593 +fi
 17.3594 +echo "$as_me:$LINENO: result: $ac_cv_header_stdc" >&5
 17.3595 +echo "${ECHO_T}$ac_cv_header_stdc" >&6
 17.3596 +if test $ac_cv_header_stdc = yes; then
 17.3597 +
 17.3598 +cat >>confdefs.h <<\_ACEOF
 17.3599 +#define STDC_HEADERS 1
 17.3600 +_ACEOF
 17.3601 +
 17.3602 +fi
 17.3603 +
 17.3604 +# Find a good install program.  We prefer a C program (faster),
 17.3605 +# so one script is as good as another.  But avoid the broken or
 17.3606 +# incompatible versions:
 17.3607 +# SysV /etc/install, /usr/sbin/install
 17.3608 +# SunOS /usr/etc/install
 17.3609 +# IRIX /sbin/install
 17.3610 +# AIX /bin/install
 17.3611 +# AmigaOS /C/install, which installs bootblocks on floppy discs
 17.3612 +# AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag
 17.3613 +# AFS /usr/afsws/bin/install, which mishandles nonexistent args
 17.3614 +# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff"
 17.3615 +# OS/2's system install, which has a completely different semantic
 17.3616 +# ./install, which can be erroneously created by make from ./install.sh.
 17.3617 +echo "$as_me:$LINENO: checking for a BSD-compatible install" >&5
 17.3618 +echo $ECHO_N "checking for a BSD-compatible install... $ECHO_C" >&6
 17.3619 +if test -z "$INSTALL"; then
 17.3620 +if test "${ac_cv_path_install+set}" = set; then
 17.3621 +  echo $ECHO_N "(cached) $ECHO_C" >&6
 17.3622 +else
 17.3623 +  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
 17.3624 +for as_dir in $PATH
 17.3625 +do
 17.3626 +  IFS=$as_save_IFS
 17.3627 +  test -z "$as_dir" && as_dir=.
 17.3628 +  # Account for people who put trailing slashes in PATH elements.
 17.3629 +case $as_dir/ in
 17.3630 +  ./ | .// | /cC/* | \
 17.3631 +  /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \
 17.3632 +  ?:\\/os2\\/install\\/* | ?:\\/OS2\\/INSTALL\\/* | \
 17.3633 +  /usr/ucb/* ) ;;
 17.3634 +  *)
 17.3635 +    # OSF1 and SCO ODT 3.0 have their own names for install.
 17.3636 +    # Don't use installbsd from OSF since it installs stuff as root
 17.3637 +    # by default.
 17.3638 +    for ac_prog in ginstall scoinst install; do
 17.3639 +      for ac_exec_ext in '' $ac_executable_extensions; do
 17.3640 +	if $as_executable_p "$as_dir/$ac_prog$ac_exec_ext"; then
 17.3641 +	  if test $ac_prog = install &&
 17.3642 +	    grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
 17.3643 +	    # AIX install.  It has an incompatible calling convention.
 17.3644 +	    :
 17.3645 +	  elif test $ac_prog = install &&
 17.3646 +	    grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
 17.3647 +	    # program-specific install script used by HP pwplus--don't use.
 17.3648 +	    :
 17.3649 +	  else
 17.3650 +	    ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c"
 17.3651 +	    break 3
 17.3652 +	  fi
 17.3653 +	fi
 17.3654 +      done
 17.3655 +    done
 17.3656 +    ;;
 17.3657 +esac
 17.3658 +done
 17.3659 +
 17.3660 +
 17.3661 +fi
 17.3662 +  if test "${ac_cv_path_install+set}" = set; then
 17.3663 +    INSTALL=$ac_cv_path_install
 17.3664 +  else
 17.3665 +    # As a last resort, use the slow shell script.  We don't cache a
 17.3666 +    # path for INSTALL within a source directory, because that will
 17.3667 +    # break other packages using the cache if that directory is
 17.3668 +    # removed, or if the path is relative.
 17.3669 +    INSTALL=$ac_install_sh
 17.3670 +  fi
 17.3671 +fi
 17.3672 +echo "$as_me:$LINENO: result: $INSTALL" >&5
 17.3673 +echo "${ECHO_T}$INSTALL" >&6
 17.3674 +
 17.3675 +# Use test -z because SunOS4 sh mishandles braces in ${var-val}.
 17.3676 +# It thinks the first close brace ends the variable substitution.
 17.3677 +test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}'
 17.3678 +
 17.3679 +test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}'
 17.3680 +
 17.3681 +test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644'
 17.3682 +
 17.3683 +
 17.3684 +# Check whether --enable-static or --disable-static was given.
 17.3685 +if test "${enable_static+set}" = set; then
 17.3686 +  enableval="$enable_static"
 17.3687 +  p=${PACKAGE-default}
 17.3688 +    case $enableval in
 17.3689 +    yes) enable_static=yes ;;
 17.3690 +    no) enable_static=no ;;
 17.3691 +    *)
 17.3692 +     enable_static=no
 17.3693 +      # Look at the argument we got.  We use all the common list separators.
 17.3694 +      lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR,"
 17.3695 +      for pkg in $enableval; do
 17.3696 +	IFS="$lt_save_ifs"
 17.3697 +	if test "X$pkg" = "X$p"; then
 17.3698 +	  enable_static=yes
 17.3699 +	fi
 17.3700 +      done
 17.3701 +      IFS="$lt_save_ifs"
 17.3702 +      ;;
 17.3703 +    esac
 17.3704 +else
 17.3705 +  enable_static=no
 17.3706 +fi;
 17.3707 +
 17.3708 +
 17.3709 +# Check whether --enable-shared or --disable-shared was given.
 17.3710 +if test "${enable_shared+set}" = set; then
 17.3711 +  enableval="$enable_shared"
 17.3712 +  p=${PACKAGE-default}
 17.3713 +    case $enableval in
 17.3714 +    yes) enable_shared=yes ;;
 17.3715 +    no) enable_shared=no ;;
 17.3716 +    *)
 17.3717 +      enable_shared=no
 17.3718 +      # Look at the argument we got.  We use all the common list separators.
 17.3719 +      lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR,"
 17.3720 +      for pkg in $enableval; do
 17.3721 +	IFS="$lt_save_ifs"
 17.3722 +	if test "X$pkg" = "X$p"; then
 17.3723 +	  enable_shared=yes
 17.3724 +	fi
 17.3725 +      done
 17.3726 +      IFS="$lt_save_ifs"
 17.3727 +      ;;
 17.3728 +    esac
 17.3729 +else
 17.3730 +  enable_shared=yes
 17.3731 +fi;
 17.3732 +
 17.3733 +# Check whether --enable-fast-install or --disable-fast-install was given.
 17.3734 +if test "${enable_fast_install+set}" = set; then
 17.3735 +  enableval="$enable_fast_install"
 17.3736 +  p=${PACKAGE-default}
 17.3737 +    case $enableval in
 17.3738 +    yes) enable_fast_install=yes ;;
 17.3739 +    no) enable_fast_install=no ;;
 17.3740 +    *)
 17.3741 +      enable_fast_install=no
 17.3742 +      # Look at the argument we got.  We use all the common list separators.
 17.3743 +      lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR,"
 17.3744 +      for pkg in $enableval; do
 17.3745 +	IFS="$lt_save_ifs"
 17.3746 +	if test "X$pkg" = "X$p"; then
 17.3747 +	  enable_fast_install=yes
 17.3748 +	fi
 17.3749 +      done
 17.3750 +      IFS="$lt_save_ifs"
 17.3751 +      ;;
 17.3752 +    esac
 17.3753 +else
 17.3754 +  enable_fast_install=yes
 17.3755 +fi;
 17.3756 +
 17.3757 +# Make sure we can run config.sub.
 17.3758 +$ac_config_sub sun4 >/dev/null 2>&1 ||
 17.3759 +  { { echo "$as_me:$LINENO: error: cannot run $ac_config_sub" >&5
 17.3760 +echo "$as_me: error: cannot run $ac_config_sub" >&2;}
 17.3761 +   { (exit 1); exit 1; }; }
 17.3762 +
 17.3763 +echo "$as_me:$LINENO: checking build system type" >&5
 17.3764 +echo $ECHO_N "checking build system type... $ECHO_C" >&6
 17.3765 +if test "${ac_cv_build+set}" = set; then
 17.3766 +  echo $ECHO_N "(cached) $ECHO_C" >&6
 17.3767 +else
 17.3768 +  ac_cv_build_alias=$build_alias
 17.3769 +test -z "$ac_cv_build_alias" &&
 17.3770 +  ac_cv_build_alias=`$ac_config_guess`
 17.3771 +test -z "$ac_cv_build_alias" &&
 17.3772 +  { { echo "$as_me:$LINENO: error: cannot guess build type; you must specify one" >&5
 17.3773 +echo "$as_me: error: cannot guess build type; you must specify one" >&2;}
 17.3774 +   { (exit 1); exit 1; }; }
 17.3775 +ac_cv_build=`$ac_config_sub $ac_cv_build_alias` ||
 17.3776 +  { { echo "$as_me:$LINENO: error: $ac_config_sub $ac_cv_build_alias failed" >&5
 17.3777 +echo "$as_me: error: $ac_config_sub $ac_cv_build_alias failed" >&2;}
 17.3778 +   { (exit 1); exit 1; }; }
 17.3779 +
 17.3780 +fi
 17.3781 +echo "$as_me:$LINENO: result: $ac_cv_build" >&5
 17.3782 +echo "${ECHO_T}$ac_cv_build" >&6
 17.3783 +build=$ac_cv_build
 17.3784 +build_cpu=`echo $ac_cv_build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'`
 17.3785 +build_vendor=`echo $ac_cv_build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'`
 17.3786 +build_os=`echo $ac_cv_build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'`
 17.3787 +
 17.3788 +
 17.3789 +echo "$as_me:$LINENO: checking host system type" >&5
 17.3790 +echo $ECHO_N "checking host system type... $ECHO_C" >&6
 17.3791 +if test "${ac_cv_host+set}" = set; then
 17.3792 +  echo $ECHO_N "(cached) $ECHO_C" >&6
 17.3793 +else
 17.3794 +  ac_cv_host_alias=$host_alias
 17.3795 +test -z "$ac_cv_host_alias" &&
 17.3796 +  ac_cv_host_alias=$ac_cv_build_alias
 17.3797 +ac_cv_host=`$ac_config_sub $ac_cv_host_alias` ||
 17.3798 +  { { echo "$as_me:$LINENO: error: $ac_config_sub $ac_cv_host_alias failed" >&5
 17.3799 +echo "$as_me: error: $ac_config_sub $ac_cv_host_alias failed" >&2;}
 17.3800 +   { (exit 1); exit 1; }; }
 17.3801 +
 17.3802 +fi
 17.3803 +echo "$as_me:$LINENO: result: $ac_cv_host" >&5
 17.3804 +echo "${ECHO_T}$ac_cv_host" >&6
 17.3805 +host=$ac_cv_host
 17.3806 +host_cpu=`echo $ac_cv_host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'`
 17.3807 +host_vendor=`echo $ac_cv_host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'`
 17.3808 +host_os=`echo $ac_cv_host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'`
 17.3809 +
 17.3810 +
 17.3811 +echo "$as_me:$LINENO: checking for a sed that does not truncate output" >&5
 17.3812 +echo $ECHO_N "checking for a sed that does not truncate output... $ECHO_C" >&6
 17.3813 +if test "${lt_cv_path_SED+set}" = set; then
 17.3814 +  echo $ECHO_N "(cached) $ECHO_C" >&6
 17.3815 +else
 17.3816 +  # Loop through the user's path and test for sed and gsed.
 17.3817 +# Then use that list of sed's as ones to test for truncation.
 17.3818 +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
 17.3819 +for as_dir in $PATH
 17.3820 +do
 17.3821 +  IFS=$as_save_IFS
 17.3822 +  test -z "$as_dir" && as_dir=.
 17.3823 +  for lt_ac_prog in sed gsed; do
 17.3824 +    for ac_exec_ext in '' $ac_executable_extensions; do
 17.3825 +      if $as_executable_p "$as_dir/$lt_ac_prog$ac_exec_ext"; then
 17.3826 +        lt_ac_sed_list="$lt_ac_sed_list $as_dir/$lt_ac_prog$ac_exec_ext"
 17.3827 +      fi
 17.3828 +    done
 17.3829 +  done
 17.3830 +done
 17.3831 +lt_ac_max=0
 17.3832 +lt_ac_count=0
 17.3833 +# Add /usr/xpg4/bin/sed as it is typically found on Solaris
 17.3834 +# along with /bin/sed that truncates output.
 17.3835 +for lt_ac_sed in $lt_ac_sed_list /usr/xpg4/bin/sed; do
 17.3836 +  test ! -f $lt_ac_sed && continue
 17.3837 +  cat /dev/null > conftest.in
 17.3838 +  lt_ac_count=0
 17.3839 +  echo $ECHO_N "0123456789$ECHO_C" >conftest.in
 17.3840 +  # Check for GNU sed and select it if it is found.
 17.3841 +  if "$lt_ac_sed" --version 2>&1 < /dev/null | grep 'GNU' > /dev/null; then
 17.3842 +    lt_cv_path_SED=$lt_ac_sed
 17.3843 +    break
 17.3844 +  fi
 17.3845 +  while true; do
 17.3846 +    cat conftest.in conftest.in >conftest.tmp
 17.3847 +    mv conftest.tmp conftest.in
 17.3848 +    cp conftest.in conftest.nl
 17.3849 +    echo >>conftest.nl
 17.3850 +    $lt_ac_sed -e 's/a$//' < conftest.nl >conftest.out || break
 17.3851 +    cmp -s conftest.out conftest.nl || break
 17.3852 +    # 10000 chars as input seems more than enough
 17.3853 +    test $lt_ac_count -gt 10 && break
 17.3854 +    lt_ac_count=`expr $lt_ac_count + 1`
 17.3855 +    if test $lt_ac_count -gt $lt_ac_max; then
 17.3856 +      lt_ac_max=$lt_ac_count
 17.3857 +      lt_cv_path_SED=$lt_ac_sed
 17.3858 +    fi
 17.3859 +  done
 17.3860 +done
 17.3861 +
 17.3862 +fi
 17.3863 +
 17.3864 +SED=$lt_cv_path_SED
 17.3865 +echo "$as_me:$LINENO: result: $SED" >&5
 17.3866 +echo "${ECHO_T}$SED" >&6
 17.3867 +
 17.3868 +
 17.3869 +# Check whether --with-gnu-ld or --without-gnu-ld was given.
 17.3870 +if test "${with_gnu_ld+set}" = set; then
 17.3871 +  withval="$with_gnu_ld"
 17.3872 +  test "$withval" = no || with_gnu_ld=yes
 17.3873 +else
 17.3874 +  with_gnu_ld=no
 17.3875 +fi;
 17.3876 +ac_prog=ld
 17.3877 +if test "$GCC" = yes; then
 17.3878 +  # Check if gcc -print-prog-name=ld gives a path.
 17.3879 +  echo "$as_me:$LINENO: checking for ld used by $CC" >&5
 17.3880 +echo $ECHO_N "checking for ld used by $CC... $ECHO_C" >&6
 17.3881 +  case $host in
 17.3882 +  *-*-mingw*)
 17.3883 +    # gcc leaves a trailing carriage return which upsets mingw
 17.3884 +    ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;;
 17.3885 +  *)
 17.3886 +    ac_prog=`($CC -print-prog-name=ld) 2>&5` ;;
 17.3887 +  esac
 17.3888 +  case $ac_prog in
 17.3889 +    # Accept absolute paths.
 17.3890 +    [\\/]* | ?:[\\/]*)
 17.3891 +      re_direlt='/[^/][^/]*/\.\./'
 17.3892 +      # Canonicalize the pathname of ld
 17.3893 +      ac_prog=`echo $ac_prog| $SED 's%\\\\%/%g'`
 17.3894 +      while echo $ac_prog | grep "$re_direlt" > /dev/null 2>&1; do
 17.3895 +	ac_prog=`echo $ac_prog| $SED "s%$re_direlt%/%"`
 17.3896 +      done
 17.3897 +      test -z "$LD" && LD="$ac_prog"
 17.3898 +      ;;
 17.3899 +  "")
 17.3900 +    # If it fails, then pretend we aren't using GCC.
 17.3901 +    ac_prog=ld
 17.3902 +    ;;
 17.3903 +  *)
 17.3904 +    # If it is relative, then search for the first ld in PATH.
 17.3905 +    with_gnu_ld=unknown
 17.3906 +    ;;
 17.3907 +  esac
 17.3908 +elif test "$with_gnu_ld" = yes; then
 17.3909 +  echo "$as_me:$LINENO: checking for GNU ld" >&5
 17.3910 +echo $ECHO_N "checking for GNU ld... $ECHO_C" >&6
 17.3911 +else
 17.3912 +  echo "$as_me:$LINENO: checking for non-GNU ld" >&5
 17.3913 +echo $ECHO_N "checking for non-GNU ld... $ECHO_C" >&6
 17.3914 +fi
 17.3915 +if test "${lt_cv_path_LD+set}" = set; then
 17.3916 +  echo $ECHO_N "(cached) $ECHO_C" >&6
 17.3917 +else
 17.3918 +  if test -z "$LD"; then
 17.3919 +  lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
 17.3920 +  for ac_dir in $PATH; do
 17.3921 +    IFS="$lt_save_ifs"
 17.3922 +    test -z "$ac_dir" && ac_dir=.
 17.3923 +    if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then
 17.3924 +      lt_cv_path_LD="$ac_dir/$ac_prog"
 17.3925 +      # Check to see if the program is GNU ld.  I'd rather use --version,
 17.3926 +      # but apparently some variants of GNU ld only accept -v.
 17.3927 +      # Break only if it was the GNU/non-GNU ld that we prefer.
 17.3928 +      case `"$lt_cv_path_LD" -v 2>&1 </dev/null` in
 17.3929 +      *GNU* | *'with BFD'*)
 17.3930 +	test "$with_gnu_ld" != no && break
 17.3931 +	;;
 17.3932 +      *)
 17.3933 +	test "$with_gnu_ld" != yes && break
 17.3934 +	;;
 17.3935 +      esac
 17.3936 +    fi
 17.3937 +  done
 17.3938 +  IFS="$lt_save_ifs"
 17.3939 +else
 17.3940 +  lt_cv_path_LD="$LD" # Let the user override the test with a path.
 17.3941 +fi
 17.3942 +fi
 17.3943 +
 17.3944 +LD="$lt_cv_path_LD"
 17.3945 +if test -n "$LD"; then
 17.3946 +  echo "$as_me:$LINENO: result: $LD" >&5
 17.3947 +echo "${ECHO_T}$LD" >&6
 17.3948 +else
 17.3949 +  echo "$as_me:$LINENO: result: no" >&5
 17.3950 +echo "${ECHO_T}no" >&6
 17.3951 +fi
 17.3952 +test -z "$LD" && { { echo "$as_me:$LINENO: error: no acceptable ld found in \$PATH" >&5
 17.3953 +echo "$as_me: error: no acceptable ld found in \$PATH" >&2;}
 17.3954 +   { (exit 1); exit 1; }; }
 17.3955 +echo "$as_me:$LINENO: checking if the linker ($LD) is GNU ld" >&5
 17.3956 +echo $ECHO_N "checking if the linker ($LD) is GNU ld... $ECHO_C" >&6
 17.3957 +if test "${lt_cv_prog_gnu_ld+set}" = set; then
 17.3958 +  echo $ECHO_N "(cached) $ECHO_C" >&6
 17.3959 +else
 17.3960 +  # I'd rather use --version here, but apparently some GNU lds only accept -v.
 17.3961 +case `$LD -v 2>&1 </dev/null` in
 17.3962 +*GNU* | *'with BFD'*)
 17.3963 +  lt_cv_prog_gnu_ld=yes
 17.3964 +  ;;
 17.3965 +*)
 17.3966 +  lt_cv_prog_gnu_ld=no
 17.3967 +  ;;
 17.3968 +esac
 17.3969 +fi
 17.3970 +echo "$as_me:$LINENO: result: $lt_cv_prog_gnu_ld" >&5
 17.3971 +echo "${ECHO_T}$lt_cv_prog_gnu_ld" >&6
 17.3972 +with_gnu_ld=$lt_cv_prog_gnu_ld
 17.3973 +
 17.3974 +
 17.3975 +echo "$as_me:$LINENO: checking for $LD option to reload object files" >&5
 17.3976 +echo $ECHO_N "checking for $LD option to reload object files... $ECHO_C" >&6
 17.3977 +if test "${lt_cv_ld_reload_flag+set}" = set; then
 17.3978 +  echo $ECHO_N "(cached) $ECHO_C" >&6
 17.3979 +else
 17.3980 +  lt_cv_ld_reload_flag='-r'
 17.3981 +fi
 17.3982 +echo "$as_me:$LINENO: result: $lt_cv_ld_reload_flag" >&5
 17.3983 +echo "${ECHO_T}$lt_cv_ld_reload_flag" >&6
 17.3984 +reload_flag=$lt_cv_ld_reload_flag
 17.3985 +case $reload_flag in
 17.3986 +"" | " "*) ;;
 17.3987 +*) reload_flag=" $reload_flag" ;;
 17.3988 +esac
 17.3989 +reload_cmds='$LD$reload_flag -o $output$reload_objs'
 17.3990 +case $host_os in
 17.3991 +  darwin*)
 17.3992 +    if test "$GCC" = yes; then
 17.3993 +      reload_cmds='$LTCC $LTCFLAGS -nostdlib ${wl}-r -o $output$reload_objs'
 17.3994 +    else
 17.3995 +      reload_cmds='$LD$reload_flag -o $output$reload_objs'
 17.3996 +    fi
 17.3997 +    ;;
 17.3998 +esac
 17.3999 +
 17.4000 +echo "$as_me:$LINENO: checking for BSD-compatible nm" >&5
 17.4001 +echo $ECHO_N "checking for BSD-compatible nm... $ECHO_C" >&6
 17.4002 +if test "${lt_cv_path_NM+set}" = set; then
 17.4003 +  echo $ECHO_N "(cached) $ECHO_C" >&6
 17.4004 +else
 17.4005 +  if test -n "$NM"; then
 17.4006 +  # Let the user override the test.
 17.4007 +  lt_cv_path_NM="$NM"
 17.4008 +else
 17.4009 +  lt_nm_to_check="${ac_tool_prefix}nm"
 17.4010 +  if test -n "$ac_tool_prefix" && test "$build" = "$host"; then
 17.4011 +    lt_nm_to_check="$lt_nm_to_check nm"
 17.4012 +  fi
 17.4013 +  for lt_tmp_nm in $lt_nm_to_check; do
 17.4014 +    lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
 17.4015 +    for ac_dir in $PATH /usr/ccs/bin/elf /usr/ccs/bin /usr/ucb /bin; do
 17.4016 +      IFS="$lt_save_ifs"
 17.4017 +      test -z "$ac_dir" && ac_dir=.
 17.4018 +      tmp_nm="$ac_dir/$lt_tmp_nm"
 17.4019 +      if test -f "$tmp_nm" || test -f "$tmp_nm$ac_exeext" ; then
 17.4020 +	# Check to see if the nm accepts a BSD-compat flag.
 17.4021 +	# Adding the `sed 1q' prevents false positives on HP-UX, which says:
 17.4022 +	#   nm: unknown option "B" ignored
 17.4023 +	# Tru64's nm complains that /dev/null is an invalid object file
 17.4024 +	case `"$tmp_nm" -B /dev/null 2>&1 | sed '1q'` in
 17.4025 +	*/dev/null* | *'Invalid file or object type'*)
 17.4026 +	  lt_cv_path_NM="$tmp_nm -B"
 17.4027 +	  break
 17.4028 +	  ;;
 17.4029 +	*)
 17.4030 +	  case `"$tmp_nm" -p /dev/null 2>&1 | sed '1q'` in
 17.4031 +	  */dev/null*)
 17.4032 +	    lt_cv_path_NM="$tmp_nm -p"
 17.4033 +	    break
 17.4034 +	    ;;
 17.4035 +	  *)
 17.4036 +	    lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but
 17.4037 +	    continue # so that we can try to find one that supports BSD flags
 17.4038 +	    ;;
 17.4039 +	  esac
 17.4040 +	  ;;
 17.4041 +	esac
 17.4042 +      fi
 17.4043 +    done
 17.4044 +    IFS="$lt_save_ifs"
 17.4045 +  done
 17.4046 +  test -z "$lt_cv_path_NM" && lt_cv_path_NM=nm
 17.4047 +fi
 17.4048 +fi
 17.4049 +echo "$as_me:$LINENO: result: $lt_cv_path_NM" >&5
 17.4050 +echo "${ECHO_T}$lt_cv_path_NM" >&6
 17.4051 +NM="$lt_cv_path_NM"
 17.4052 +
 17.4053 +echo "$as_me:$LINENO: checking whether ln -s works" >&5
 17.4054 +echo $ECHO_N "checking whether ln -s works... $ECHO_C" >&6
 17.4055 +LN_S=$as_ln_s
 17.4056 +if test "$LN_S" = "ln -s"; then
 17.4057 +  echo "$as_me:$LINENO: result: yes" >&5
 17.4058 +echo "${ECHO_T}yes" >&6
 17.4059 +else
 17.4060 +  echo "$as_me:$LINENO: result: no, using $LN_S" >&5
 17.4061 +echo "${ECHO_T}no, using $LN_S" >&6
 17.4062 +fi
 17.4063 +
 17.4064 +echo "$as_me:$LINENO: checking how to recognise dependent libraries" >&5
 17.4065 +echo $ECHO_N "checking how to recognise dependent libraries... $ECHO_C" >&6
 17.4066 +if test "${lt_cv_deplibs_check_method+set}" = set; then
 17.4067 +  echo $ECHO_N "(cached) $ECHO_C" >&6
 17.4068 +else
 17.4069 +  lt_cv_file_magic_cmd='$MAGIC_CMD'
 17.4070 +lt_cv_file_magic_test_file=
 17.4071 +lt_cv_deplibs_check_method='unknown'
 17.4072 +# Need to set the preceding variable on all platforms that support
 17.4073 +# interlibrary dependencies.
 17.4074 +# 'none' -- dependencies not supported.
 17.4075 +# `unknown' -- same as none, but documents that we really don't know.
 17.4076 +# 'pass_all' -- all dependencies passed with no checks.
 17.4077 +# 'test_compile' -- check by making test program.
 17.4078 +# 'file_magic [[regex]]' -- check by looking for files in library path
 17.4079 +# which responds to the $file_magic_cmd with a given extended regex.
 17.4080 +# If you have `file' or equivalent on your system and you're not sure
 17.4081 +# whether `pass_all' will *always* work, you probably want this one.
 17.4082 +
 17.4083 +case $host_os in
 17.4084 +aix4* | aix5*)
 17.4085 +  lt_cv_deplibs_check_method=pass_all
 17.4086 +  ;;
 17.4087 +
 17.4088 +beos*)
 17.4089 +  lt_cv_deplibs_check_method=pass_all
 17.4090 +  ;;
 17.4091 +
 17.4092 +bsdi[45]*)
 17.4093 +  lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib)'
 17.4094 +  lt_cv_file_magic_cmd='/usr/bin/file -L'
 17.4095 +  lt_cv_file_magic_test_file=/shlib/libc.so
 17.4096 +  ;;
 17.4097 +
 17.4098 +cygwin*)
 17.4099 +  # func_win32_libid is a shell function defined in ltmain.sh
 17.4100 +  lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL'
 17.4101 +  lt_cv_file_magic_cmd='func_win32_libid'
 17.4102 +  ;;
 17.4103 +
 17.4104 +mingw* | pw32*)
 17.4105 +  # Base MSYS/MinGW do not provide the 'file' command needed by
 17.4106 +  # func_win32_libid shell function, so use a weaker test based on 'objdump'.
 17.4107 +  lt_cv_deplibs_check_method='file_magic file format pei*-i386(.*architecture: i386)?'
 17.4108 +  lt_cv_file_magic_cmd='$OBJDUMP -f'
 17.4109 +  ;;
 17.4110 +
 17.4111 +darwin* | rhapsody*)
 17.4112 +  lt_cv_deplibs_check_method=pass_all
 17.4113 +  ;;
 17.4114 +
 17.4115 +freebsd* | kfreebsd*-gnu | dragonfly*)
 17.4116 +  if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then
 17.4117 +    case $host_cpu in
 17.4118 +    i*86 )
 17.4119 +      # Not sure whether the presence of OpenBSD here was a mistake.
 17.4120 +      # Let's accept both of them until this is cleared up.
 17.4121 +      lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD|DragonFly)/i[3-9]86 (compact )?demand paged shared library'
 17.4122 +      lt_cv_file_magic_cmd=/usr/bin/file
 17.4123 +      lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*`
 17.4124 +      ;;
 17.4125 +    esac
 17.4126 +  else
 17.4127 +    lt_cv_deplibs_check_method=pass_all
 17.4128 +  fi
 17.4129 +  ;;
 17.4130 +
 17.4131 +gnu*)
 17.4132 +  lt_cv_deplibs_check_method=pass_all
 17.4133 +  ;;
 17.4134 +
 17.4135 +hpux10.20* | hpux11*)
 17.4136 +  lt_cv_file_magic_cmd=/usr/bin/file
 17.4137 +  case $host_cpu in
 17.4138 +  ia64*)
 17.4139 +    lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF-[0-9][0-9]) shared object file - IA64'
 17.4140 +    lt_cv_file_magic_test_file=/usr/lib/hpux32/libc.so
 17.4141 +    ;;
 17.4142 +  hppa*64*)
 17.4143 +    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]'
 17.4144 +    lt_cv_file_magic_test_file=/usr/lib/pa20_64/libc.sl
 17.4145 +    ;;
 17.4146 +  *)
 17.4147 +    lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|PA-RISC[0-9].[0-9]) shared library'
 17.4148 +    lt_cv_file_magic_test_file=/usr/lib/libc.sl
 17.4149 +    ;;
 17.4150 +  esac
 17.4151 +  ;;
 17.4152 +
 17.4153 +interix3*)
 17.4154 +  # PIC code is broken on Interix 3.x, that's why |\.a not |_pic\.a here
 17.4155 +  lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so|\.a)$'
 17.4156 +  ;;
 17.4157 +
 17.4158 +irix5* | irix6* | nonstopux*)
 17.4159 +  case $LD in
 17.4160 +  *-32|*"-32 ") libmagic=32-bit;;
 17.4161 +  *-n32|*"-n32 ") libmagic=N32;;
 17.4162 +  *-64|*"-64 ") libmagic=64-bit;;
 17.4163 +  *) libmagic=never-match;;
 17.4164 +  esac
 17.4165 +  lt_cv_deplibs_check_method=pass_all
 17.4166 +  ;;
 17.4167 +
 17.4168 +# This must be Linux ELF.
 17.4169 +linux*)
 17.4170 +  lt_cv_deplibs_check_method=pass_all
 17.4171 +  ;;
 17.4172 +
 17.4173 +netbsd* | netbsdelf*-gnu | knetbsd*-gnu)
 17.4174 +  if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then
 17.4175 +    lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|_pic\.a)$'
 17.4176 +  else
 17.4177 +    lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so|_pic\.a)$'
 17.4178 +  fi
 17.4179 +  ;;
 17.4180 +
 17.4181 +newos6*)
 17.4182 +  lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (executable|dynamic lib)'
 17.4183 +  lt_cv_file_magic_cmd=/usr/bin/file
 17.4184 +  lt_cv_file_magic_test_file=/usr/lib/libnls.so
 17.4185 +  ;;
 17.4186 +
 17.4187 +nto-qnx*)
 17.4188 +  lt_cv_deplibs_check_method=unknown
 17.4189 +  ;;
 17.4190 +
 17.4191 +openbsd*)
 17.4192 +  if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
 17.4193 +    lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|\.so|_pic\.a)$'
 17.4194 +  else
 17.4195 +    lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|_pic\.a)$'
 17.4196 +  fi
 17.4197 +  ;;
 17.4198 +
 17.4199 +osf3* | osf4* | osf5*)
 17.4200 +  lt_cv_deplibs_check_method=pass_all
 17.4201 +  ;;
 17.4202 +
 17.4203 +solaris*)
 17.4204 +  lt_cv_deplibs_check_method=pass_all
 17.4205 +  ;;
 17.4206 +
 17.4207 +sysv4 | sysv4.3*)
 17.4208 +  case $host_vendor in
 17.4209 +  motorola)
 17.4210 +    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]'
 17.4211 +    lt_cv_file_magic_test_file=`echo /usr/lib/libc.so*`
 17.4212 +    ;;
 17.4213 +  ncr)
 17.4214 +    lt_cv_deplibs_check_method=pass_all
 17.4215 +    ;;
 17.4216 +  sequent)
 17.4217 +    lt_cv_file_magic_cmd='/bin/file'
 17.4218 +    lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [LM]SB (shared object|dynamic lib )'
 17.4219 +    ;;
 17.4220 +  sni)
 17.4221 +    lt_cv_file_magic_cmd='/bin/file'
 17.4222 +    lt_cv_deplibs_check_method="file_magic ELF [0-9][0-9]*-bit [LM]SB dynamic lib"
 17.4223 +    lt_cv_file_magic_test_file=/lib/libc.so
 17.4224 +    ;;
 17.4225 +  siemens)
 17.4226 +    lt_cv_deplibs_check_method=pass_all
 17.4227 +    ;;
 17.4228 +  pc)
 17.4229 +    lt_cv_deplibs_check_method=pass_all
 17.4230 +    ;;
 17.4231 +  esac
 17.4232 +  ;;
 17.4233 +
 17.4234 +sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*)
 17.4235 +  lt_cv_deplibs_check_method=pass_all
 17.4236 +  ;;
 17.4237 +esac
 17.4238 +
 17.4239 +fi
 17.4240 +echo "$as_me:$LINENO: result: $lt_cv_deplibs_check_method" >&5
 17.4241 +echo "${ECHO_T}$lt_cv_deplibs_check_method" >&6
 17.4242 +file_magic_cmd=$lt_cv_file_magic_cmd
 17.4243 +deplibs_check_method=$lt_cv_deplibs_check_method
 17.4244 +test -z "$deplibs_check_method" && deplibs_check_method=unknown
 17.4245 +
 17.4246 +
 17.4247 +
 17.4248 +
 17.4249 +# If no C compiler was specified, use CC.
 17.4250 +LTCC=${LTCC-"$CC"}
 17.4251 +
 17.4252 +# If no C compiler flags were specified, use CFLAGS.
 17.4253 +LTCFLAGS=${LTCFLAGS-"$CFLAGS"}
 17.4254 +
 17.4255 +# Allow CC to be a program name with arguments.
 17.4256 +compiler=$CC
 17.4257 +
 17.4258 +# Check whether --enable-libtool-lock or --disable-libtool-lock was given.
 17.4259 +if test "${enable_libtool_lock+set}" = set; then
 17.4260 +  enableval="$enable_libtool_lock"
 17.4261 +
 17.4262 +fi;
 17.4263 +test "x$enable_libtool_lock" != xno && enable_libtool_lock=yes
 17.4264 +
 17.4265 +# Some flags need to be propagated to the compiler or linker for good
 17.4266 +# libtool support.
 17.4267 +case $host in
 17.4268 +ia64-*-hpux*)
 17.4269 +  # Find out which ABI we are using.
 17.4270 +  echo 'int i;' > conftest.$ac_ext
 17.4271 +  if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
 17.4272 +  (eval $ac_compile) 2>&5
 17.4273 +  ac_status=$?
 17.4274 +  echo "$as_me:$LINENO: \$? = $ac_status" >&5
 17.4275 +  (exit $ac_status); }; then
 17.4276 +    case `/usr/bin/file conftest.$ac_objext` in
 17.4277 +    *ELF-32*)
 17.4278 +      HPUX_IA64_MODE="32"
 17.4279 +      ;;
 17.4280 +    *ELF-64*)
 17.4281 +      HPUX_IA64_MODE="64"
 17.4282 +      ;;
 17.4283 +    esac
 17.4284 +  fi
 17.4285 +  rm -rf conftest*
 17.4286 +  ;;
 17.4287 +*-*-irix6*)
 17.4288 +  # Find out which ABI we are using.
 17.4289 +  echo '#line 4286 "configure"' > conftest.$ac_ext
 17.4290 +  if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
 17.4291 +  (eval $ac_compile) 2>&5
 17.4292 +  ac_status=$?
 17.4293 +  echo "$as_me:$LINENO: \$? = $ac_status" >&5
 17.4294 +  (exit $ac_status); }; then
 17.4295 +   if test "$lt_cv_prog_gnu_ld" = yes; then
 17.4296 +    case `/usr/bin/file conftest.$ac_objext` in
 17.4297 +    *32-bit*)
 17.4298 +      LD="${LD-ld} -melf32bsmip"
 17.4299 +      ;;
 17.4300 +    *N32*)
 17.4301 +      LD="${LD-ld} -melf32bmipn32"
 17.4302 +      ;;
 17.4303 +    *64-bit*)
 17.4304 +      LD="${LD-ld} -melf64bmip"
 17.4305 +      ;;
 17.4306 +    esac
 17.4307 +   else
 17.4308 +    case `/usr/bin/file conftest.$ac_objext` in
 17.4309 +    *32-bit*)
 17.4310 +      LD="${LD-ld} -32"
 17.4311 +      ;;
 17.4312 +    *N32*)
 17.4313 +      LD="${LD-ld} -n32"
 17.4314 +      ;;
 17.4315 +    *64-bit*)
 17.4316 +      LD="${LD-ld} -64"
 17.4317 +      ;;
 17.4318 +    esac
 17.4319 +   fi
 17.4320 +  fi
 17.4321 +  rm -rf conftest*
 17.4322 +  ;;
 17.4323 +
 17.4324 +x86_64-*linux*|ppc*-*linux*|powerpc*-*linux*|s390*-*linux*|sparc*-*linux*)
 17.4325 +  # Find out which ABI we are using.
 17.4326 +  echo 'int i;' > conftest.$ac_ext
 17.4327 +  if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
 17.4328 +  (eval $ac_compile) 2>&5
 17.4329 +  ac_status=$?
 17.4330 +  echo "$as_me:$LINENO: \$? = $ac_status" >&5
 17.4331 +  (exit $ac_status); }; then
 17.4332 +    case `/usr/bin/file conftest.o` in
 17.4333 +    *32-bit*)
 17.4334 +      case $host in
 17.4335 +        x86_64-*linux*)
 17.4336 +          LD="${LD-ld} -m elf_i386"
 17.4337 +          ;;
 17.4338 +        ppc64-*linux*|powerpc64-*linux*)
 17.4339 +          LD="${LD-ld} -m elf32ppclinux"
 17.4340 +          ;;
 17.4341 +        s390x-*linux*)
 17.4342 +          LD="${LD-ld} -m elf_s390"
 17.4343 +          ;;
 17.4344 +        sparc64-*linux*)
 17.4345 +          LD="${LD-ld} -m elf32_sparc"
 17.4346 +          ;;
 17.4347 +      esac
 17.4348 +      ;;
 17.4349 +    *64-bit*)
 17.4350 +      case $host in
 17.4351 +        x86_64-*linux*)
 17.4352 +          LD="${LD-ld} -m elf_x86_64"
 17.4353 +          ;;
 17.4354 +        ppc*-*linux*|powerpc*-*linux*)
 17.4355 +          LD="${LD-ld} -m elf64ppc"
 17.4356 +          ;;
 17.4357 +        s390*-*linux*)
 17.4358 +          LD="${LD-ld} -m elf64_s390"
 17.4359 +          ;;
 17.4360 +        sparc*-*linux*)
 17.4361 +          LD="${LD-ld} -m elf64_sparc"
 17.4362 +          ;;
 17.4363 +      esac
 17.4364 +      ;;
 17.4365 +    esac
 17.4366 +  fi
 17.4367 +  rm -rf conftest*
 17.4368 +  ;;
 17.4369 +
 17.4370 +*-*-sco3.2v5*)
 17.4371 +  # On SCO OpenServer 5, we need -belf to get full-featured binaries.
 17.4372 +  SAVE_CFLAGS="$CFLAGS"
 17.4373 +  CFLAGS="$CFLAGS -belf"
 17.4374 +  echo "$as_me:$LINENO: checking whether the C compiler needs -belf" >&5
 17.4375 +echo $ECHO_N "checking whether the C compiler needs -belf... $ECHO_C" >&6
 17.4376 +if test "${lt_cv_cc_needs_belf+set}" = set; then
 17.4377 +  echo $ECHO_N "(cached) $ECHO_C" >&6
 17.4378 +else
 17.4379 +  ac_ext=c
 17.4380 +ac_cpp='$CPP $CPPFLAGS'
 17.4381 +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
 17.4382 +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
 17.4383 +ac_compiler_gnu=$ac_cv_c_compiler_gnu
 17.4384 +
 17.4385 +     cat >conftest.$ac_ext <<_ACEOF
 17.4386 +/* confdefs.h.  */
 17.4387 +_ACEOF
 17.4388 +cat confdefs.h >>conftest.$ac_ext
 17.4389 +cat >>conftest.$ac_ext <<_ACEOF
 17.4390 +/* end confdefs.h.  */
 17.4391 +
 17.4392 +int
 17.4393 +main ()
 17.4394 +{
 17.4395 +
 17.4396 +  ;
 17.4397 +  return 0;
 17.4398 +}
 17.4399 +_ACEOF
 17.4400 +rm -f conftest.$ac_objext conftest$ac_exeext
 17.4401 +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
 17.4402 +  (eval $ac_link) 2>conftest.er1
 17.4403 +  ac_status=$?
 17.4404 +  grep -v '^ *+' conftest.er1 >conftest.err
 17.4405 +  rm -f conftest.er1
 17.4406 +  cat conftest.err >&5
 17.4407 +  echo "$as_me:$LINENO: \$? = $ac_status" >&5
 17.4408 +  (exit $ac_status); } &&
 17.4409 +	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
 17.4410 +  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
 17.4411 +  (eval $ac_try) 2>&5
 17.4412 +  ac_status=$?
 17.4413 +  echo "$as_me:$LINENO: \$? = $ac_status" >&5
 17.4414 +  (exit $ac_status); }; } &&
 17.4415 +	 { ac_try='test -s conftest$ac_exeext'
 17.4416 +  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
 17.4417 +  (eval $ac_try) 2>&5
 17.4418 +  ac_status=$?
 17.4419 +  echo "$as_me:$LINENO: \$? = $ac_status" >&5
 17.4420 +  (exit $ac_status); }; }; then
 17.4421 +  lt_cv_cc_needs_belf=yes
 17.4422 +else
 17.4423 +  echo "$as_me: failed program was:" >&5
 17.4424 +sed 's/^/| /' conftest.$ac_ext >&5
 17.4425 +
 17.4426 +lt_cv_cc_needs_belf=no
 17.4427 +fi
 17.4428 +rm -f conftest.err conftest.$ac_objext \
 17.4429 +      conftest$ac_exeext conftest.$ac_ext
 17.4430 +     ac_ext=c
 17.4431 +ac_cpp='$CPP $CPPFLAGS'
 17.4432 +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
 17.4433 +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
 17.4434 +ac_compiler_gnu=$ac_cv_c_compiler_gnu
 17.4435 +
 17.4436 +fi
 17.4437 +echo "$as_me:$LINENO: result: $lt_cv_cc_needs_belf" >&5
 17.4438 +echo "${ECHO_T}$lt_cv_cc_needs_belf" >&6
 17.4439 +  if test x"$lt_cv_cc_needs_belf" != x"yes"; then
 17.4440 +    # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf
 17.4441 +    CFLAGS="$SAVE_CFLAGS"
 17.4442 +  fi
 17.4443 +  ;;
 17.4444 +sparc*-*solaris*)
 17.4445 +  # Find out which ABI we are using.
 17.4446 +  echo 'int i;' > conftest.$ac_ext
 17.4447 +  if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
 17.4448 +  (eval $ac_compile) 2>&5
 17.4449 +  ac_status=$?
 17.4450 +  echo "$as_me:$LINENO: \$? = $ac_status" >&5
 17.4451 +  (exit $ac_status); }; then
 17.4452 +    case `/usr/bin/file conftest.o` in
 17.4453 +    *64-bit*)
 17.4454 +      case $lt_cv_prog_gnu_ld in
 17.4455 +      yes*) LD="${LD-ld} -m elf64_sparc" ;;
 17.4456 +      *)    LD="${LD-ld} -64" ;;
 17.4457 +      esac
 17.4458 +      ;;
 17.4459 +    esac
 17.4460 +  fi
 17.4461 +  rm -rf conftest*
 17.4462 +  ;;
 17.4463 +
 17.4464 +
 17.4465 +esac
 17.4466 +
 17.4467 +need_locks="$enable_libtool_lock"
 17.4468 +
 17.4469 +
 17.4470 +# On IRIX 5.3, sys/types and inttypes.h are conflicting.
 17.4471 +
 17.4472 +
 17.4473 +
 17.4474 +
 17.4475 +
 17.4476 +
 17.4477 +
 17.4478 +
 17.4479 +
 17.4480 +for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \
 17.4481 +		  inttypes.h stdint.h unistd.h
 17.4482 +do
 17.4483 +as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
 17.4484 +echo "$as_me:$LINENO: checking for $ac_header" >&5
 17.4485 +echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
 17.4486 +if eval "test \"\${$as_ac_Header+set}\" = set"; then
 17.4487 +  echo $ECHO_N "(cached) $ECHO_C" >&6
 17.4488 +else
 17.4489 +  cat >conftest.$ac_ext <<_ACEOF
 17.4490 +/* confdefs.h.  */
 17.4491 +_ACEOF
 17.4492 +cat confdefs.h >>conftest.$ac_ext
 17.4493 +cat >>conftest.$ac_ext <<_ACEOF
 17.4494 +/* end confdefs.h.  */
 17.4495 +$ac_includes_default
 17.4496 +
 17.4497 +#include <$ac_header>
 17.4498 +_ACEOF
 17.4499 +rm -f conftest.$ac_objext
 17.4500 +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
 17.4501 +  (eval $ac_compile) 2>conftest.er1
 17.4502 +  ac_status=$?
 17.4503 +  grep -v '^ *+' conftest.er1 >conftest.err
 17.4504 +  rm -f conftest.er1
 17.4505 +  cat conftest.err >&5
 17.4506 +  echo "$as_me:$LINENO: \$? = $ac_status" >&5
 17.4507 +  (exit $ac_status); } &&
 17.4508 +	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
 17.4509 +  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
 17.4510 +  (eval $ac_try) 2>&5
 17.4511 +  ac_status=$?
 17.4512 +  echo "$as_me:$LINENO: \$? = $ac_status" >&5
 17.4513 +  (exit $ac_status); }; } &&
 17.4514 +	 { ac_try='test -s conftest.$ac_objext'
 17.4515 +  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
 17.4516 +  (eval $ac_try) 2>&5
 17.4517 +  ac_status=$?
 17.4518 +  echo "$as_me:$LINENO: \$? = $ac_status" >&5
 17.4519 +  (exit $ac_status); }; }; then
 17.4520 +  eval "$as_ac_Header=yes"
 17.4521 +else
 17.4522 +  echo "$as_me: failed program was:" >&5
 17.4523 +sed 's/^/| /' conftest.$ac_ext >&5
 17.4524 +
 17.4525 +eval "$as_ac_Header=no"
 17.4526 +fi
 17.4527 +rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
 17.4528 +fi
 17.4529 +echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
 17.4530 +echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
 17.4531 +if test `eval echo '${'$as_ac_Header'}'` = yes; then
 17.4532 +  cat >>confdefs.h <<_ACEOF
 17.4533 +#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1
 17.4534 +_ACEOF
 17.4535 +
 17.4536 +fi
 17.4537 +
 17.4538 +done
 17.4539 +
 17.4540 +
 17.4541 +
 17.4542 +for ac_header in dlfcn.h
 17.4543 +do
 17.4544 +as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
 17.4545 +if eval "test \"\${$as_ac_Header+set}\" = set"; then
 17.4546 +  echo "$as_me:$LINENO: checking for $ac_header" >&5
 17.4547 +echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
 17.4548 +if eval "test \"\${$as_ac_Header+set}\" = set"; then
 17.4549 +  echo $ECHO_N "(cached) $ECHO_C" >&6
 17.4550 +fi
 17.4551 +echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
 17.4552 +echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
 17.4553 +else
 17.4554 +  # Is the header compilable?
 17.4555 +echo "$as_me:$LINENO: checking $ac_header usability" >&5
 17.4556 +echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6
 17.4557 +cat >conftest.$ac_ext <<_ACEOF
 17.4558 +/* confdefs.h.  */
 17.4559 +_ACEOF
 17.4560 +cat confdefs.h >>conftest.$ac_ext
 17.4561 +cat >>conftest.$ac_ext <<_ACEOF
 17.4562 +/* end confdefs.h.  */
 17.4563 +$ac_includes_default
 17.4564 +#include <$ac_header>
 17.4565 +_ACEOF
 17.4566 +rm -f conftest.$ac_objext
 17.4567 +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
 17.4568 +  (eval $ac_compile) 2>conftest.er1
 17.4569 +  ac_status=$?
 17.4570 +  grep -v '^ *+' conftest.er1 >conftest.err
 17.4571 +  rm -f conftest.er1
 17.4572 +  cat conftest.err >&5
 17.4573 +  echo "$as_me:$LINENO: \$? = $ac_status" >&5
 17.4574 +  (exit $ac_status); } &&
 17.4575 +	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
 17.4576 +  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
 17.4577 +  (eval $ac_try) 2>&5
 17.4578 +  ac_status=$?
 17.4579 +  echo "$as_me:$LINENO: \$? = $ac_status" >&5
 17.4580 +  (exit $ac_status); }; } &&
 17.4581 +	 { ac_try='test -s conftest.$ac_objext'
 17.4582 +  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
 17.4583 +  (eval $ac_try) 2>&5
 17.4584 +  ac_status=$?
 17.4585 +  echo "$as_me:$LINENO: \$? = $ac_status" >&5
 17.4586 +  (exit $ac_status); }; }; then
 17.4587 +  ac_header_compiler=yes
 17.4588 +else
 17.4589 +  echo "$as_me: failed program was:" >&5
 17.4590 +sed 's/^/| /' conftest.$ac_ext >&5
 17.4591 +
 17.4592 +ac_header_compiler=no
 17.4593 +fi
 17.4594 +rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
 17.4595 +echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
 17.4596 +echo "${ECHO_T}$ac_header_compiler" >&6
 17.4597 +
 17.4598 +# Is the header present?
 17.4599 +echo "$as_me:$LINENO: checking $ac_header presence" >&5
 17.4600 +echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6
 17.4601 +cat >conftest.$ac_ext <<_ACEOF
 17.4602 +/* confdefs.h.  */
 17.4603 +_ACEOF
 17.4604 +cat confdefs.h >>conftest.$ac_ext
 17.4605 +cat >>conftest.$ac_ext <<_ACEOF
 17.4606 +/* end confdefs.h.  */
 17.4607 +#include <$ac_header>
 17.4608 +_ACEOF
 17.4609 +if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
 17.4610 +  (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
 17.4611 +  ac_status=$?
 17.4612 +  grep -v '^ *+' conftest.er1 >conftest.err
 17.4613 +  rm -f conftest.er1
 17.4614 +  cat conftest.err >&5
 17.4615 +  echo "$as_me:$LINENO: \$? = $ac_status" >&5
 17.4616 +  (exit $ac_status); } >/dev/null; then
 17.4617 +  if test -s conftest.err; then
 17.4618 +    ac_cpp_err=$ac_c_preproc_warn_flag
 17.4619 +    ac_cpp_err=$ac_cpp_err$ac_c_werror_flag
 17.4620 +  else
 17.4621 +    ac_cpp_err=
 17.4622 +  fi
 17.4623 +else
 17.4624 +  ac_cpp_err=yes
 17.4625 +fi
 17.4626 +if test -z "$ac_cpp_err"; then
 17.4627 +  ac_header_preproc=yes
 17.4628 +else
 17.4629 +  echo "$as_me: failed program was:" >&5
 17.4630 +sed 's/^/| /' conftest.$ac_ext >&5
 17.4631 +
 17.4632 +  ac_header_preproc=no
 17.4633 +fi
 17.4634 +rm -f conftest.err conftest.$ac_ext
 17.4635 +echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
 17.4636 +echo "${ECHO_T}$ac_header_preproc" >&6
 17.4637 +
 17.4638 +# So?  What about this header?
 17.4639 +case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
 17.4640 +  yes:no: )
 17.4641 +    { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5
 17.4642 +echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;}
 17.4643 +    { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5
 17.4644 +echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;}
 17.4645 +    ac_header_preproc=yes
 17.4646 +    ;;
 17.4647 +  no:yes:* )
 17.4648 +    { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5
 17.4649 +echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;}
 17.4650 +    { echo "$as_me:$LINENO: WARNING: $ac_header:     check for missing prerequisite headers?" >&5
 17.4651 +echo "$as_me: WARNING: $ac_header:     check for missing prerequisite headers?" >&2;}
 17.4652 +    { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5
 17.4653 +echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;}
 17.4654 +    { echo "$as_me:$LINENO: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&5
 17.4655 +echo "$as_me: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&2;}
 17.4656 +    { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5
 17.4657 +echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
 17.4658 +    { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5
 17.4659 +echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;}
 17.4660 +    (
 17.4661 +      cat <<\_ASBOX
 17.4662 +## ---------------------------------------- ##
 17.4663 +## Report this to the gift-gnutella lists.  ##
 17.4664 +## ---------------------------------------- ##
 17.4665 +_ASBOX
 17.4666 +    ) |
 17.4667 +      sed "s/^/$as_me: WARNING:     /" >&2
 17.4668 +    ;;
 17.4669 +esac
 17.4670 +echo "$as_me:$LINENO: checking for $ac_header" >&5
 17.4671 +echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
 17.4672 +if eval "test \"\${$as_ac_Header+set}\" = set"; then
 17.4673 +  echo $ECHO_N "(cached) $ECHO_C" >&6
 17.4674 +else
 17.4675 +  eval "$as_ac_Header=\$ac_header_preproc"
 17.4676 +fi
 17.4677 +echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
 17.4678 +echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
 17.4679 +
 17.4680 +fi
 17.4681 +if test `eval echo '${'$as_ac_Header'}'` = yes; then
 17.4682 +  cat >>confdefs.h <<_ACEOF
 17.4683 +#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1
 17.4684 +_ACEOF
 17.4685 +
 17.4686 +fi
 17.4687 +
 17.4688 +done
 17.4689 +
 17.4690 +ac_ext=cc
 17.4691 +ac_cpp='$CXXCPP $CPPFLAGS'
 17.4692 +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
 17.4693 +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
 17.4694 +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
 17.4695 +if test -n "$ac_tool_prefix"; then
 17.4696 +  for ac_prog in $CCC g++ c++ gpp aCC CC cxx cc++ cl FCC KCC RCC xlC_r xlC
 17.4697 +  do
 17.4698 +    # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args.
 17.4699 +set dummy $ac_tool_prefix$ac_prog; ac_word=$2
 17.4700 +echo "$as_me:$LINENO: checking for $ac_word" >&5
 17.4701 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
 17.4702 +if test "${ac_cv_prog_CXX+set}" = set; then
 17.4703 +  echo $ECHO_N "(cached) $ECHO_C" >&6
 17.4704 +else
 17.4705 +  if test -n "$CXX"; then
 17.4706 +  ac_cv_prog_CXX="$CXX" # Let the user override the test.
 17.4707 +else
 17.4708 +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
 17.4709 +for as_dir in $PATH
 17.4710 +do
 17.4711 +  IFS=$as_save_IFS
 17.4712 +  test -z "$as_dir" && as_dir=.
 17.4713 +  for ac_exec_ext in '' $ac_executable_extensions; do
 17.4714 +  if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
 17.4715 +    ac_cv_prog_CXX="$ac_tool_prefix$ac_prog"
 17.4716 +    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
 17.4717 +    break 2
 17.4718 +  fi
 17.4719 +done
 17.4720 +done
 17.4721 +
 17.4722 +fi
 17.4723 +fi
 17.4724 +CXX=$ac_cv_prog_CXX
 17.4725 +if test -n "$CXX"; then
 17.4726 +  echo "$as_me:$LINENO: result: $CXX" >&5
 17.4727 +echo "${ECHO_T}$CXX" >&6
 17.4728 +else
 17.4729 +  echo "$as_me:$LINENO: result: no" >&5
 17.4730 +echo "${ECHO_T}no" >&6
 17.4731 +fi
 17.4732 +
 17.4733 +    test -n "$CXX" && break
 17.4734 +  done
 17.4735 +fi
 17.4736 +if test -z "$CXX"; then
 17.4737 +  ac_ct_CXX=$CXX
 17.4738 +  for ac_prog in $CCC g++ c++ gpp aCC CC cxx cc++ cl FCC KCC RCC xlC_r xlC
 17.4739 +do
 17.4740 +  # Extract the first word of "$ac_prog", so it can be a program name with args.
 17.4741 +set dummy $ac_prog; ac_word=$2
 17.4742 +echo "$as_me:$LINENO: checking for $ac_word" >&5
 17.4743 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
 17.4744 +if test "${ac_cv_prog_ac_ct_CXX+set}" = set; then
 17.4745 +  echo $ECHO_N "(cached) $ECHO_C" >&6
 17.4746 +else
 17.4747 +  if test -n "$ac_ct_CXX"; then
 17.4748 +  ac_cv_prog_ac_ct_CXX="$ac_ct_CXX" # Let the user override the test.
 17.4749 +else
 17.4750 +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
 17.4751 +for as_dir in $PATH
 17.4752 +do
 17.4753 +  IFS=$as_save_IFS
 17.4754 +  test -z "$as_dir" && as_dir=.
 17.4755 +  for ac_exec_ext in '' $ac_executable_extensions; do
 17.4756 +  if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
 17.4757 +    ac_cv_prog_ac_ct_CXX="$ac_prog"
 17.4758 +    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
 17.4759 +    break 2
 17.4760 +  fi
 17.4761 +done
 17.4762 +done
 17.4763 +
 17.4764 +fi
 17.4765 +fi
 17.4766 +ac_ct_CXX=$ac_cv_prog_ac_ct_CXX
 17.4767 +if test -n "$ac_ct_CXX"; then
 17.4768 +  echo "$as_me:$LINENO: result: $ac_ct_CXX" >&5
 17.4769 +echo "${ECHO_T}$ac_ct_CXX" >&6
 17.4770 +else
 17.4771 +  echo "$as_me:$LINENO: result: no" >&5
 17.4772 +echo "${ECHO_T}no" >&6
 17.4773 +fi
 17.4774 +
 17.4775 +  test -n "$ac_ct_CXX" && break
 17.4776 +done
 17.4777 +test -n "$ac_ct_CXX" || ac_ct_CXX="g++"
 17.4778 +
 17.4779 +  CXX=$ac_ct_CXX
 17.4780 +fi
 17.4781 +
 17.4782 +
 17.4783 +# Provide some information about the compiler.
 17.4784 +echo "$as_me:$LINENO:" \
 17.4785 +     "checking for C++ compiler version" >&5
 17.4786 +ac_compiler=`set X $ac_compile; echo $2`
 17.4787 +{ (eval echo "$as_me:$LINENO: \"$ac_compiler --version </dev/null >&5\"") >&5
 17.4788 +  (eval $ac_compiler --version </dev/null >&5) 2>&5
 17.4789 +  ac_status=$?
 17.4790 +  echo "$as_me:$LINENO: \$? = $ac_status" >&5
 17.4791 +  (exit $ac_status); }
 17.4792 +{ (eval echo "$as_me:$LINENO: \"$ac_compiler -v </dev/null >&5\"") >&5
 17.4793 +  (eval $ac_compiler -v </dev/null >&5) 2>&5
 17.4794 +  ac_status=$?
 17.4795 +  echo "$as_me:$LINENO: \$? = $ac_status" >&5
 17.4796 +  (exit $ac_status); }
 17.4797 +{ (eval echo "$as_me:$LINENO: \"$ac_compiler -V </dev/null >&5\"") >&5
 17.4798 +  (eval $ac_compiler -V </dev/null >&5) 2>&5
 17.4799 +  ac_status=$?
 17.4800 +  echo "$as_me:$LINENO: \$? = $ac_status" >&5
 17.4801 +  (exit $ac_status); }
 17.4802 +
 17.4803 +echo "$as_me:$LINENO: checking whether we are using the GNU C++ compiler" >&5
 17.4804 +echo $ECHO_N "checking whether we are using the GNU C++ compiler... $ECHO_C" >&6
 17.4805 +if test "${ac_cv_cxx_compiler_gnu+set}" = set; then
 17.4806 +  echo $ECHO_N "(cached) $ECHO_C" >&6
 17.4807 +else
 17.4808 +  cat >conftest.$ac_ext <<_ACEOF
 17.4809 +/* confdefs.h.  */
 17.4810 +_ACEOF
 17.4811 +cat confdefs.h >>conftest.$ac_ext
 17.4812 +cat >>conftest.$ac_ext <<_ACEOF
 17.4813 +/* end confdefs.h.  */
 17.4814 +
 17.4815 +int
 17.4816 +main ()
 17.4817 +{
 17.4818 +#ifndef __GNUC__
 17.4819 +       choke me
 17.4820 +#endif
 17.4821 +
 17.4822 +  ;
 17.4823 +  return 0;
 17.4824 +}
 17.4825 +_ACEOF
 17.4826 +rm -f conftest.$ac_objext
 17.4827 +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
 17.4828 +  (eval $ac_compile) 2>conftest.er1
 17.4829 +  ac_status=$?
 17.4830 +  grep -v '^ *+' conftest.er1 >conftest.err
 17.4831 +  rm -f conftest.er1
 17.4832 +  cat conftest.err >&5
 17.4833 +  echo "$as_me:$LINENO: \$? = $ac_status" >&5
 17.4834 +  (exit $ac_status); } &&
 17.4835 +	 { ac_try='test -z "$ac_cxx_werror_flag"			 || test ! -s conftest.err'
 17.4836 +  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
 17.4837 +  (eval $ac_try) 2>&5
 17.4838 +  ac_status=$?
 17.4839 +  echo "$as_me:$LINENO: \$? = $ac_status" >&5
 17.4840 +  (exit $ac_status); }; } &&
 17.4841 +	 { ac_try='test -s conftest.$ac_objext'
 17.4842 +  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
 17.4843 +  (eval $ac_try) 2>&5
 17.4844 +  ac_status=$?
 17.4845 +  echo "$as_me:$LINENO: \$? = $ac_status" >&5
 17.4846 +  (exit $ac_status); }; }; then
 17.4847 +  ac_compiler_gnu=yes
 17.4848 +else
 17.4849 +  echo "$as_me: failed program was:" >&5
 17.4850 +sed 's/^/| /' conftest.$ac_ext >&5
 17.4851 +
 17.4852 +ac_compiler_gnu=no
 17.4853 +fi
 17.4854 +rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
 17.4855 +ac_cv_cxx_compiler_gnu=$ac_compiler_gnu
 17.4856 +
 17.4857 +fi
 17.4858 +echo "$as_me:$LINENO: result: $ac_cv_cxx_compiler_gnu" >&5
 17.4859 +echo "${ECHO_T}$ac_cv_cxx_compiler_gnu" >&6
 17.4860 +GXX=`test $ac_compiler_gnu = yes && echo yes`
 17.4861 +ac_test_CXXFLAGS=${CXXFLAGS+set}
 17.4862 +ac_save_CXXFLAGS=$CXXFLAGS
 17.4863 +CXXFLAGS="-g"
 17.4864 +echo "$as_me:$LINENO: checking whether $CXX accepts -g" >&5
 17.4865 +echo $ECHO_N "checking whether $CXX accepts -g... $ECHO_C" >&6
 17.4866 +if test "${ac_cv_prog_cxx_g+set}" = set; then
 17.4867 +  echo $ECHO_N "(cached) $ECHO_C" >&6
 17.4868 +else
 17.4869 +  cat >conftest.$ac_ext <<_ACEOF
 17.4870 +/* confdefs.h.  */
 17.4871 +_ACEOF
 17.4872 +cat confdefs.h >>conftest.$ac_ext
 17.4873 +cat >>conftest.$ac_ext <<_ACEOF
 17.4874 +/* end confdefs.h.  */
 17.4875 +
 17.4876 +int
 17.4877 +main ()
 17.4878 +{
 17.4879 +
 17.4880 +  ;
 17.4881 +  return 0;
 17.4882 +}
 17.4883 +_ACEOF
 17.4884 +rm -f conftest.$ac_objext
 17.4885 +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
 17.4886 +  (eval $ac_compile) 2>conftest.er1
 17.4887 +  ac_status=$?
 17.4888 +  grep -v '^ *+' conftest.er1 >conftest.err
 17.4889 +  rm -f conftest.er1
 17.4890 +  cat conftest.err >&5
 17.4891 +  echo "$as_me:$LINENO: \$? = $ac_status" >&5
 17.4892 +  (exit $ac_status); } &&
 17.4893 +	 { ac_try='test -z "$ac_cxx_werror_flag"			 || test ! -s conftest.err'
 17.4894 +  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
 17.4895 +  (eval $ac_try) 2>&5
 17.4896 +  ac_status=$?
 17.4897 +  echo "$as_me:$LINENO: \$? = $ac_status" >&5
 17.4898 +  (exit $ac_status); }; } &&
 17.4899 +	 { ac_try='test -s conftest.$ac_objext'
 17.4900 +  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
 17.4901 +  (eval $ac_try) 2>&5
 17.4902 +  ac_status=$?
 17.4903 +  echo "$as_me:$LINENO: \$? = $ac_status" >&5
 17.4904 +  (exit $ac_status); }; }; then
 17.4905 +  ac_cv_prog_cxx_g=yes
 17.4906 +else
 17.4907 +  echo "$as_me: failed program was:" >&5
 17.4908 +sed 's/^/| /' conftest.$ac_ext >&5
 17.4909 +
 17.4910 +ac_cv_prog_cxx_g=no
 17.4911 +fi
 17.4912 +rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
 17.4913 +fi
 17.4914 +echo "$as_me:$LINENO: result: $ac_cv_prog_cxx_g" >&5
 17.4915 +echo "${ECHO_T}$ac_cv_prog_cxx_g" >&6
 17.4916 +if test "$ac_test_CXXFLAGS" = set; then
 17.4917 +  CXXFLAGS=$ac_save_CXXFLAGS
 17.4918 +elif test $ac_cv_prog_cxx_g = yes; then
 17.4919 +  if test "$GXX" = yes; then
 17.4920 +    CXXFLAGS="-g -O2"
 17.4921 +  else
 17.4922 +    CXXFLAGS="-g"
 17.4923 +  fi
 17.4924 +else
 17.4925 +  if test "$GXX" = yes; then
 17.4926 +    CXXFLAGS="-O2"
 17.4927 +  else
 17.4928 +    CXXFLAGS=
 17.4929 +  fi
 17.4930 +fi
 17.4931 +for ac_declaration in \
 17.4932 +   '' \
 17.4933 +   'extern "C" void std::exit (int) throw (); using std::exit;' \
 17.4934 +   'extern "C" void std::exit (int); using std::exit;' \
 17.4935 +   'extern "C" void exit (int) throw ();' \
 17.4936 +   'extern "C" void exit (int);' \
 17.4937 +   'void exit (int);'
 17.4938 +do
 17.4939 +  cat >conftest.$ac_ext <<_ACEOF
 17.4940 +/* confdefs.h.  */
 17.4941 +_ACEOF
 17.4942 +cat confdefs.h >>conftest.$ac_ext
 17.4943 +cat >>conftest.$ac_ext <<_ACEOF
 17.4944 +/* end confdefs.h.  */
 17.4945 +$ac_declaration
 17.4946 +#include <stdlib.h>
 17.4947 +int
 17.4948 +main ()
 17.4949 +{
 17.4950 +exit (42);
 17.4951 +  ;
 17.4952 +  return 0;
 17.4953 +}
 17.4954 +_ACEOF
 17.4955 +rm -f conftest.$ac_objext
 17.4956 +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
 17.4957 +  (eval $ac_compile) 2>conftest.er1
 17.4958 +  ac_status=$?
 17.4959 +  grep -v '^ *+' conftest.er1 >conftest.err
 17.4960 +  rm -f conftest.er1
 17.4961 +  cat conftest.err >&5
 17.4962 +  echo "$as_me:$LINENO: \$? = $ac_status" >&5
 17.4963 +  (exit $ac_status); } &&
 17.4964 +	 { ac_try='test -z "$ac_cxx_werror_flag"			 || test ! -s conftest.err'
 17.4965 +  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
 17.4966 +  (eval $ac_try) 2>&5
 17.4967 +  ac_status=$?
 17.4968 +  echo "$as_me:$LINENO: \$? = $ac_status" >&5
 17.4969 +  (exit $ac_status); }; } &&
 17.4970 +	 { ac_try='test -s conftest.$ac_objext'
 17.4971 +  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
 17.4972 +  (eval $ac_try) 2>&5
 17.4973 +  ac_status=$?
 17.4974 +  echo "$as_me:$LINENO: \$? = $ac_status" >&5
 17.4975 +  (exit $ac_status); }; }; then
 17.4976 +  :
 17.4977 +else
 17.4978 +  echo "$as_me: failed program was:" >&5
 17.4979 +sed 's/^/| /' conftest.$ac_ext >&5
 17.4980 +
 17.4981 +continue
 17.4982 +fi
 17.4983 +rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
 17.4984 +  cat >conftest.$ac_ext <<_ACEOF
 17.4985 +/* confdefs.h.  */
 17.4986 +_ACEOF
 17.4987 +cat confdefs.h >>conftest.$ac_ext
 17.4988 +cat >>conftest.$ac_ext <<_ACEOF
 17.4989 +/* end confdefs.h.  */
 17.4990 +$ac_declaration
 17.4991 +int
 17.4992 +main ()
 17.4993 +{
 17.4994 +exit (42);
 17.4995 +  ;
 17.4996 +  return 0;
 17.4997 +}
 17.4998 +_ACEOF
 17.4999 +rm -f conftest.$ac_objext
 17.5000 +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
 17.5001 +  (eval $ac_compile) 2>conftest.er1
 17.5002 +  ac_status=$?
 17.5003 +  grep -v '^ *+' conftest.er1 >conftest.err
 17.5004 +  rm -f conftest.er1
 17.5005 +  cat conftest.err >&5
 17.5006 +  echo "$as_me:$LINENO: \$? = $ac_status" >&5
 17.5007 +  (exit $ac_status); } &&
 17.5008 +	 { ac_try='test -z "$ac_cxx_werror_flag"			 || test ! -s conftest.err'
 17.5009 +  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
 17.5010 +  (eval $ac_try) 2>&5
 17.5011 +  ac_status=$?
 17.5012 +  echo "$as_me:$LINENO: \$? = $ac_status" >&5
 17.5013 +  (exit $ac_status); }; } &&
 17.5014 +	 { ac_try='test -s conftest.$ac_objext'
 17.5015 +  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
 17.5016 +  (eval $ac_try) 2>&5
 17.5017 +  ac_status=$?
 17.5018 +  echo "$as_me:$LINENO: \$? = $ac_status" >&5
 17.5019 +  (exit $ac_status); }; }; then
 17.5020 +  break
 17.5021 +else
 17.5022 +  echo "$as_me: failed program was:" >&5
 17.5023 +sed 's/^/| /' conftest.$ac_ext >&5
 17.5024 +
 17.5025 +fi
 17.5026 +rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
 17.5027 +done
 17.5028 +rm -f conftest*
 17.5029 +if test -n "$ac_declaration"; then
 17.5030 +  echo '#ifdef __cplusplus' >>confdefs.h
 17.5031 +  echo $ac_declaration      >>confdefs.h
 17.5032 +  echo '#endif'             >>confdefs.h
 17.5033 +fi
 17.5034 +
 17.5035 +ac_ext=cc
 17.5036 +ac_cpp='$CXXCPP $CPPFLAGS'
 17.5037 +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
 17.5038 +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
 17.5039 +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
 17.5040 +
 17.5041 +depcc="$CXX"  am_compiler_list=
 17.5042 +
 17.5043 +echo "$as_me:$LINENO: checking dependency style of $depcc" >&5
 17.5044 +echo $ECHO_N "checking dependency style of $depcc... $ECHO_C" >&6
 17.5045 +if test "${am_cv_CXX_dependencies_compiler_type+set}" = set; then
 17.5046 +  echo $ECHO_N "(cached) $ECHO_C" >&6
 17.5047 +else
 17.5048 +  if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then
 17.5049 +  # We make a subdir and do the tests there.  Otherwise we can end up
 17.5050 +  # making bogus files that we don't know about and never remove.  For
 17.5051 +  # instance it was reported that on HP-UX the gcc test will end up
 17.5052 +  # making a dummy file named `D' -- because `-MD' means `put the output
 17.5053 +  # in D'.
 17.5054 +  mkdir conftest.dir
 17.5055 +  # Copy depcomp to subdir because otherwise we won't find it if we're
 17.5056 +  # using a relative directory.
 17.5057 +  cp "$am_depcomp" conftest.dir
 17.5058 +  cd conftest.dir
 17.5059 +  # We will build objects and dependencies in a subdirectory because
 17.5060 +  # it helps to detect inapplicable dependency modes.  For instance
 17.5061 +  # both Tru64's cc and ICC support -MD to output dependencies as a
 17.5062 +  # side effect of compilation, but ICC will put the dependencies in
 17.5063 +  # the current directory while Tru64 will put them in the object
 17.5064 +  # directory.
 17.5065 +  mkdir sub
 17.5066 +
 17.5067 +  am_cv_CXX_dependencies_compiler_type=none
 17.5068 +  if test "$am_compiler_list" = ""; then
 17.5069 +     am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp`
 17.5070 +  fi
 17.5071 +  for depmode in $am_compiler_list; do
 17.5072 +    # Setup a source with many dependencies, because some compilers
 17.5073 +    # like to wrap large dependency lists on column 80 (with \), and
 17.5074 +    # we should not choose a depcomp mode which is confused by this.
 17.5075 +    #
 17.5076 +    # We need to recreate these files for each test, as the compiler may
 17.5077 +    # overwrite some of them when testing with obscure command lines.
 17.5078 +    # This happens at least with the AIX C compiler.
 17.5079 +    : > sub/conftest.c
 17.5080 +    for i in 1 2 3 4 5 6; do
 17.5081 +      echo '#include "conftst'$i'.h"' >> sub/conftest.c
 17.5082 +      : > sub/conftst$i.h
 17.5083 +    done
 17.5084 +    echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf
 17.5085 +
 17.5086 +    case $depmode in
 17.5087 +    nosideeffect)
 17.5088 +      # after this tag, mechanisms are not by side-effect, so they'll
 17.5089 +      # only be used when explicitly requested
 17.5090 +      if test "x$enable_dependency_tracking" = xyes; then
 17.5091 +	continue
 17.5092 +      else
 17.5093 +	break
 17.5094 +      fi
 17.5095 +      ;;
 17.5096 +    none) break ;;
 17.5097 +    esac
 17.5098 +    # We check with `-c' and `-o' for the sake of the "dashmstdout"
 17.5099 +    # mode.  It turns out that the SunPro C++ compiler does not properly
 17.5100 +    # handle `-M -o', and we need to detect this.
 17.5101 +    if depmode=$depmode \
 17.5102 +       source=sub/conftest.c object=sub/conftest.${OBJEXT-o} \
 17.5103 +       depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \
 17.5104 +       $SHELL ./depcomp $depcc -c -o sub/conftest.${OBJEXT-o} sub/conftest.c \
 17.5105 +         >/dev/null 2>conftest.err &&
 17.5106 +       grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 &&
 17.5107 +       grep sub/conftest.${OBJEXT-o} sub/conftest.Po > /dev/null 2>&1 &&
 17.5108 +       ${MAKE-make} -s -f confmf > /dev/null 2>&1; then
 17.5109 +      # icc doesn't choke on unknown options, it will just issue warnings
 17.5110 +      # (even with -Werror).  So we grep stderr for any message
 17.5111 +      # that says an option was ignored.
 17.5112 +      if grep 'ignoring option' conftest.err >/dev/null 2>&1; then :; else
 17.5113 +        am_cv_CXX_dependencies_compiler_type=$depmode
 17.5114 +        break
 17.5115 +      fi
 17.5116 +    fi
 17.5117 +  done
 17.5118 +
 17.5119 +  cd ..
 17.5120 +  rm -rf conftest.dir
 17.5121 +else
 17.5122 +  am_cv_CXX_dependencies_compiler_type=none
 17.5123 +fi
 17.5124 +
 17.5125 +fi
 17.5126 +echo "$as_me:$LINENO: result: $am_cv_CXX_dependencies_compiler_type" >&5
 17.5127 +echo "${ECHO_T}$am_cv_CXX_dependencies_compiler_type" >&6
 17.5128 +CXXDEPMODE=depmode=$am_cv_CXX_dependencies_compiler_type
 17.5129 +
 17.5130 +
 17.5131 +
 17.5132 +if
 17.5133 +  test "x$enable_dependency_tracking" != xno \
 17.5134 +  && test "$am_cv_CXX_dependencies_compiler_type" = gcc3; then
 17.5135 +  am__fastdepCXX_TRUE=
 17.5136 +  am__fastdepCXX_FALSE='#'
 17.5137 +else
 17.5138 +  am__fastdepCXX_TRUE='#'
 17.5139 +  am__fastdepCXX_FALSE=
 17.5140 +fi
 17.5141 +
 17.5142 +
 17.5143 +
 17.5144 +
 17.5145 +if test -n "$CXX" && ( test "X$CXX" != "Xno" &&
 17.5146 +    ( (test "X$CXX" = "Xg++" && `g++ -v >/dev/null 2>&1` ) ||
 17.5147 +    (test "X$CXX" != "Xg++"))) ; then
 17.5148 +  ac_ext=cc
 17.5149 +ac_cpp='$CXXCPP $CPPFLAGS'
 17.5150 +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
 17.5151 +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
 17.5152 +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
 17.5153 +echo "$as_me:$LINENO: checking how to run the C++ preprocessor" >&5
 17.5154 +echo $ECHO_N "checking how to run the C++ preprocessor... $ECHO_C" >&6
 17.5155 +if test -z "$CXXCPP"; then
 17.5156 +  if test "${ac_cv_prog_CXXCPP+set}" = set; then
 17.5157 +  echo $ECHO_N "(cached) $ECHO_C" >&6
 17.5158 +else
 17.5159 +      # Double quotes because CXXCPP needs to be expanded
 17.5160 +    for CXXCPP in "$CXX -E" "/lib/cpp"
 17.5161 +    do
 17.5162 +      ac_preproc_ok=false
 17.5163 +for ac_cxx_preproc_warn_flag in '' yes
 17.5164 +do
 17.5165 +  # Use a header file that comes with gcc, so configuring glibc
 17.5166 +  # with a fresh cross-compiler works.
 17.5167 +  # Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
 17.5168 +  # <limits.h> exists even on freestanding compilers.
 17.5169 +  # On the NeXT, cc -E runs the code through the compiler's parser,
 17.5170 +  # not just through cpp. "Syntax error" is here to catch this case.
 17.5171 +  cat >conftest.$ac_ext <<_ACEOF
 17.5172 +/* confdefs.h.  */
 17.5173 +_ACEOF
 17.5174 +cat confdefs.h >>conftest.$ac_ext
 17.5175 +cat >>conftest.$ac_ext <<_ACEOF
 17.5176 +/* end confdefs.h.  */
 17.5177 +#ifdef __STDC__
 17.5178 +# include <limits.h>
 17.5179 +#else
 17.5180 +# include <assert.h>
 17.5181 +#endif
 17.5182 +		     Syntax error
 17.5183 +_ACEOF
 17.5184 +if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
 17.5185 +  (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
 17.5186 +  ac_status=$?
 17.5187 +  grep -v '^ *+' conftest.er1 >conftest.err
 17.5188 +  rm -f conftest.er1
 17.5189 +  cat conftest.err >&5
 17.5190 +  echo "$as_me:$LINENO: \$? = $ac_status" >&5
 17.5191 +  (exit $ac_status); } >/dev/null; then
 17.5192 +  if test -s conftest.err; then
 17.5193 +    ac_cpp_err=$ac_cxx_preproc_warn_flag
 17.5194 +    ac_cpp_err=$ac_cpp_err$ac_cxx_werror_flag
 17.5195 +  else
 17.5196 +    ac_cpp_err=
 17.5197 +  fi
 17.5198 +else
 17.5199 +  ac_cpp_err=yes
 17.5200 +fi
 17.5201 +if test -z "$ac_cpp_err"; then
 17.5202 +  :
 17.5203 +else
 17.5204 +  echo "$as_me: failed program was:" >&5
 17.5205 +sed 's/^/| /' conftest.$ac_ext >&5
 17.5206 +
 17.5207 +  # Broken: fails on valid input.
 17.5208 +continue
 17.5209 +fi
 17.5210 +rm -f conftest.err conftest.$ac_ext
 17.5211 +
 17.5212 +  # OK, works on sane cases.  Now check whether non-existent headers
 17.5213 +  # can be detected and how.
 17.5214 +  cat >conftest.$ac_ext <<_ACEOF
 17.5215 +/* confdefs.h.  */
 17.5216 +_ACEOF
 17.5217 +cat confdefs.h >>conftest.$ac_ext
 17.5218 +cat >>conftest.$ac_ext <<_ACEOF
 17.5219 +/* end confdefs.h.  */
 17.5220 +#include <ac_nonexistent.h>
 17.5221 +_ACEOF
 17.5222 +if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
 17.5223 +  (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
 17.5224 +  ac_status=$?
 17.5225 +  grep -v '^ *+' conftest.er1 >conftest.err
 17.5226 +  rm -f conftest.er1
 17.5227 +  cat conftest.err >&5
 17.5228 +  echo "$as_me:$LINENO: \$? = $ac_status" >&5
 17.5229 +  (exit $ac_status); } >/dev/null; then
 17.5230 +  if test -s conftest.err; then
 17.5231 +    ac_cpp_err=$ac_cxx_preproc_warn_flag
 17.5232 +    ac_cpp_err=$ac_cpp_err$ac_cxx_werror_flag
 17.5233 +  else
 17.5234 +    ac_cpp_err=
 17.5235 +  fi
 17.5236 +else
 17.5237 +  ac_cpp_err=yes
 17.5238 +fi
 17.5239 +if test -z "$ac_cpp_err"; then
 17.5240 +  # Broken: success on invalid input.
 17.5241 +continue
 17.5242 +else
 17.5243 +  echo "$as_me: failed program was:" >&5
 17.5244 +sed 's/^/| /' conftest.$ac_ext >&5
 17.5245 +
 17.5246 +  # Passes both tests.
 17.5247 +ac_preproc_ok=:
 17.5248 +break
 17.5249 +fi
 17.5250 +rm -f conftest.err conftest.$ac_ext
 17.5251 +
 17.5252 +done
 17.5253 +# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
 17.5254 +rm -f conftest.err conftest.$ac_ext
 17.5255 +if $ac_preproc_ok; then
 17.5256 +  break
 17.5257 +fi
 17.5258 +
 17.5259 +    done
 17.5260 +    ac_cv_prog_CXXCPP=$CXXCPP
 17.5261 +
 17.5262 +fi
 17.5263 +  CXXCPP=$ac_cv_prog_CXXCPP
 17.5264 +else
 17.5265 +  ac_cv_prog_CXXCPP=$CXXCPP
 17.5266 +fi
 17.5267 +echo "$as_me:$LINENO: result: $CXXCPP" >&5
 17.5268 +echo "${ECHO_T}$CXXCPP" >&6
 17.5269 +ac_preproc_ok=false
 17.5270 +for ac_cxx_preproc_warn_flag in '' yes
 17.5271 +do
 17.5272 +  # Use a header file that comes with gcc, so configuring glibc
 17.5273 +  # with a fresh cross-compiler works.
 17.5274 +  # Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
 17.5275 +  # <limits.h> exists even on freestanding compilers.
 17.5276 +  # On the NeXT, cc -E runs the code through the compiler's parser,
 17.5277 +  # not just through cpp. "Syntax error" is here to catch this case.
 17.5278 +  cat >conftest.$ac_ext <<_ACEOF
 17.5279 +/* confdefs.h.  */
 17.5280 +_ACEOF
 17.5281 +cat confdefs.h >>conftest.$ac_ext
 17.5282 +cat >>conftest.$ac_ext <<_ACEOF
 17.5283 +/* end confdefs.h.  */
 17.5284 +#ifdef __STDC__
 17.5285 +# include <limits.h>
 17.5286 +#else
 17.5287 +# include <assert.h>
 17.5288 +#endif
 17.5289 +		     Syntax error
 17.5290 +_ACEOF
 17.5291 +if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
 17.5292 +  (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
 17.5293 +  ac_status=$?
 17.5294 +  grep -v '^ *+' conftest.er1 >conftest.err
 17.5295 +  rm -f conftest.er1
 17.5296 +  cat conftest.err >&5
 17.5297 +  echo "$as_me:$LINENO: \$? = $ac_status" >&5
 17.5298 +  (exit $ac_status); } >/dev/null; then
 17.5299 +  if test -s conftest.err; then
 17.5300 +    ac_cpp_err=$ac_cxx_preproc_warn_flag
 17.5301 +    ac_cpp_err=$ac_cpp_err$ac_cxx_werror_flag
 17.5302 +  else
 17.5303 +    ac_cpp_err=
 17.5304 +  fi
 17.5305 +else
 17.5306 +  ac_cpp_err=yes
 17.5307 +fi
 17.5308 +if test -z "$ac_cpp_err"; then
 17.5309 +  :
 17.5310 +else
 17.5311 +  echo "$as_me: failed program was:" >&5
 17.5312 +sed 's/^/| /' conftest.$ac_ext >&5
 17.5313 +
 17.5314 +  # Broken: fails on valid input.
 17.5315 +continue
 17.5316 +fi
 17.5317 +rm -f conftest.err conftest.$ac_ext
 17.5318 +
 17.5319 +  # OK, works on sane cases.  Now check whether non-existent headers
 17.5320 +  # can be detected and how.
 17.5321 +  cat >conftest.$ac_ext <<_ACEOF
 17.5322 +/* confdefs.h.  */
 17.5323 +_ACEOF
 17.5324 +cat confdefs.h >>conftest.$ac_ext
 17.5325 +cat >>conftest.$ac_ext <<_ACEOF
 17.5326 +/* end confdefs.h.  */
 17.5327 +#include <ac_nonexistent.h>
 17.5328 +_ACEOF
 17.5329 +if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
 17.5330 +  (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
 17.5331 +  ac_status=$?
 17.5332 +  grep -v '^ *+' conftest.er1 >conftest.err
 17.5333 +  rm -f conftest.er1
 17.5334 +  cat conftest.err >&5
 17.5335 +  echo "$as_me:$LINENO: \$? = $ac_status" >&5
 17.5336 +  (exit $ac_status); } >/dev/null; then
 17.5337 +  if test -s conftest.err; then
 17.5338 +    ac_cpp_err=$ac_cxx_preproc_warn_flag
 17.5339 +    ac_cpp_err=$ac_cpp_err$ac_cxx_werror_flag
 17.5340 +  else
 17.5341 +    ac_cpp_err=
 17.5342 +  fi
 17.5343 +else
 17.5344 +  ac_cpp_err=yes
 17.5345 +fi
 17.5346 +if test -z "$ac_cpp_err"; then
 17.5347 +  # Broken: success on invalid input.
 17.5348 +continue
 17.5349 +else
 17.5350 +  echo "$as_me: failed program was:" >&5
 17.5351 +sed 's/^/| /' conftest.$ac_ext >&5
 17.5352 +
 17.5353 +  # Passes both tests.
 17.5354 +ac_preproc_ok=:
 17.5355 +break
 17.5356 +fi
 17.5357 +rm -f conftest.err conftest.$ac_ext
 17.5358 +
 17.5359 +done
 17.5360 +# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
 17.5361 +rm -f conftest.err conftest.$ac_ext
 17.5362 +if $ac_preproc_ok; then
 17.5363 +  :
 17.5364 +else
 17.5365 +  { { echo "$as_me:$LINENO: error: C++ preprocessor \"$CXXCPP\" fails sanity check
 17.5366 +See \`config.log' for more details." >&5
 17.5367 +echo "$as_me: error: C++ preprocessor \"$CXXCPP\" fails sanity check
 17.5368 +See \`config.log' for more details." >&2;}
 17.5369 +   { (exit 1); exit 1; }; }
 17.5370 +fi
 17.5371 +
 17.5372 +ac_ext=cc
 17.5373 +ac_cpp='$CXXCPP $CPPFLAGS'
 17.5374 +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
 17.5375 +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
 17.5376 +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
 17.5377 +
 17.5378 +fi
 17.5379 +
 17.5380 +
 17.5381 +ac_ext=f
 17.5382 +ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5'
 17.5383 +ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
 17.5384 +ac_compiler_gnu=$ac_cv_f77_compiler_gnu
 17.5385 +if test -n "$ac_tool_prefix"; then
 17.5386 +  for ac_prog in g77 f77 xlf frt pgf77 fort77 fl32 af77 f90 xlf90 pgf90 epcf90 f95 fort xlf95 ifc efc pgf95 lf95 gfortran
 17.5387 +  do
 17.5388 +    # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args.
 17.5389 +set dummy $ac_tool_prefix$ac_prog; ac_word=$2
 17.5390 +echo "$as_me:$LINENO: checking for $ac_word" >&5
 17.5391 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
 17.5392 +if test "${ac_cv_prog_F77+set}" = set; then
 17.5393 +  echo $ECHO_N "(cached) $ECHO_C" >&6
 17.5394 +else
 17.5395 +  if test -n "$F77"; then
 17.5396 +  ac_cv_prog_F77="$F77" # Let the user override the test.
 17.5397 +else
 17.5398 +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
 17.5399 +for as_dir in $PATH
 17.5400 +do
 17.5401 +  IFS=$as_save_IFS
 17.5402 +  test -z "$as_dir" && as_dir=.
 17.5403 +  for ac_exec_ext in '' $ac_executable_extensions; do
 17.5404 +  if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
 17.5405 +    ac_cv_prog_F77="$ac_tool_prefix$ac_prog"
 17.5406 +    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
 17.5407 +    break 2
 17.5408 +  fi
 17.5409 +done
 17.5410 +done
 17.5411 +
 17.5412 +fi
 17.5413 +fi
 17.5414 +F77=$ac_cv_prog_F77
 17.5415 +if test -n "$F77"; then
 17.5416 +  echo "$as_me:$LINENO: result: $F77" >&5
 17.5417 +echo "${ECHO_T}$F77" >&6
 17.5418 +else
 17.5419 +  echo "$as_me:$LINENO: result: no" >&5
 17.5420 +echo "${ECHO_T}no" >&6
 17.5421 +fi
 17.5422 +
 17.5423 +    test -n "$F77" && break
 17.5424 +  done
 17.5425 +fi
 17.5426 +if test -z "$F77"; then
 17.5427 +  ac_ct_F77=$F77
 17.5428 +  for ac_prog in g77 f77 xlf frt pgf77 fort77 fl32 af77 f90 xlf90 pgf90 epcf90 f95 fort xlf95 ifc efc pgf95 lf95 gfortran
 17.5429 +do
 17.5430 +  # Extract the first word of "$ac_prog", so it can be a program name with args.
 17.5431 +set dummy $ac_prog; ac_word=$2
 17.5432 +echo "$as_me:$LINENO: checking for $ac_word" >&5
 17.5433 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
 17.5434 +if test "${ac_cv_prog_ac_ct_F77+set}" = set; then
 17.5435 +  echo $ECHO_N "(cached) $ECHO_C" >&6
 17.5436 +else
 17.5437 +  if test -n "$ac_ct_F77"; then
 17.5438 +  ac_cv_prog_ac_ct_F77="$ac_ct_F77" # Let the user override the test.
 17.5439 +else
 17.5440 +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
 17.5441 +for as_dir in $PATH
 17.5442 +do
 17.5443 +  IFS=$as_save_IFS
 17.5444 +  test -z "$as_dir" && as_dir=.
 17.5445 +  for ac_exec_ext in '' $ac_executable_extensions; do
 17.5446 +  if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
 17.5447 +    ac_cv_prog_ac_ct_F77="$ac_prog"
 17.5448 +    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
 17.5449 +    break 2
 17.5450 +  fi
 17.5451 +done
 17.5452 +done
 17.5453 +
 17.5454 +fi
 17.5455 +fi
 17.5456 +ac_ct_F77=$ac_cv_prog_ac_ct_F77
 17.5457 +if test -n "$ac_ct_F77"; then
 17.5458 +  echo "$as_me:$LINENO: result: $ac_ct_F77" >&5
 17.5459 +echo "${ECHO_T}$ac_ct_F77" >&6
 17.5460 +else
 17.5461 +  echo "$as_me:$LINENO: result: no" >&5
 17.5462 +echo "${ECHO_T}no" >&6
 17.5463 +fi
 17.5464 +
 17.5465 +  test -n "$ac_ct_F77" && break
 17.5466 +done
 17.5467 +
 17.5468 +  F77=$ac_ct_F77
 17.5469 +fi
 17.5470 +
 17.5471 +
 17.5472 +# Provide some information about the compiler.
 17.5473 +echo "$as_me:5470:" \
 17.5474 +     "checking for Fortran 77 compiler version" >&5
 17.5475 +ac_compiler=`set X $ac_compile; echo $2`
 17.5476 +{ (eval echo "$as_me:$LINENO: \"$ac_compiler --version </dev/null >&5\"") >&5
 17.5477 +  (eval $ac_compiler --version </dev/null >&5) 2>&5
 17.5478 +  ac_status=$?
 17.5479 +  echo "$as_me:$LINENO: \$? = $ac_status" >&5
 17.5480 +  (exit $ac_status); }
 17.5481 +{ (eval echo "$as_me:$LINENO: \"$ac_compiler -v </dev/null >&5\"") >&5
 17.5482 +  (eval $ac_compiler -v </dev/null >&5) 2>&5
 17.5483 +  ac_status=$?
 17.5484 +  echo "$as_me:$LINENO: \$? = $ac_status" >&5
 17.5485 +  (exit $ac_status); }
 17.5486 +{ (eval echo "$as_me:$LINENO: \"$ac_compiler -V </dev/null >&5\"") >&5
 17.5487 +  (eval $ac_compiler -V </dev/null >&5) 2>&5
 17.5488 +  ac_status=$?
 17.5489 +  echo "$as_me:$LINENO: \$? = $ac_status" >&5
 17.5490 +  (exit $ac_status); }
 17.5491 +rm -f a.out
 17.5492 +
 17.5493 +# If we don't use `.F' as extension, the preprocessor is not run on the
 17.5494 +# input file.  (Note that this only needs to work for GNU compilers.)
 17.5495 +ac_save_ext=$ac_ext
 17.5496 +ac_ext=F
 17.5497 +echo "$as_me:$LINENO: checking whether we are using the GNU Fortran 77 compiler" >&5
 17.5498 +echo $ECHO_N "checking whether we are using the GNU Fortran 77 compiler... $ECHO_C" >&6
 17.5499 +if test "${ac_cv_f77_compiler_gnu+set}" = set; then
 17.5500 +  echo $ECHO_N "(cached) $ECHO_C" >&6
 17.5501 +else
 17.5502 +  cat >conftest.$ac_ext <<_ACEOF
 17.5503 +      program main
 17.5504 +#ifndef __GNUC__
 17.5505 +       choke me
 17.5506 +#endif
 17.5507 +
 17.5508 +      end
 17.5509 +_ACEOF
 17.5510 +rm -f conftest.$ac_objext
 17.5511 +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
 17.5512 +  (eval $ac_compile) 2>conftest.er1
 17.5513 +  ac_status=$?
 17.5514 +  grep -v '^ *+' conftest.er1 >conftest.err
 17.5515 +  rm -f conftest.er1
 17.5516 +  cat conftest.err >&5
 17.5517 +  echo "$as_me:$LINENO: \$? = $ac_status" >&5
 17.5518 +  (exit $ac_status); } &&
 17.5519 +	 { ac_try='test -z "$ac_f77_werror_flag"			 || test ! -s conftest.err'
 17.5520 +  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
 17.5521 +  (eval $ac_try) 2>&5
 17.5522 +  ac_status=$?
 17.5523 +  echo "$as_me:$LINENO: \$? = $ac_status" >&5
 17.5524 +  (exit $ac_status); }; } &&
 17.5525 +	 { ac_try='test -s conftest.$ac_objext'
 17.5526 +  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
 17.5527 +  (eval $ac_try) 2>&5
 17.5528 +  ac_status=$?
 17.5529 +  echo "$as_me:$LINENO: \$? = $ac_status" >&5
 17.5530 +  (exit $ac_status); }; }; then
 17.5531 +  ac_compiler_gnu=yes
 17.5532 +else
 17.5533 +  echo "$as_me: failed program was:" >&5
 17.5534 +sed 's/^/| /' conftest.$ac_ext >&5
 17.5535 +
 17.5536 +ac_compiler_gnu=no
 17.5537 +fi
 17.5538 +rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
 17.5539 +ac_cv_f77_compiler_gnu=$ac_compiler_gnu
 17.5540 +
 17.5541 +fi
 17.5542 +echo "$as_me:$LINENO: result: $ac_cv_f77_compiler_gnu" >&5
 17.5543 +echo "${ECHO_T}$ac_cv_f77_compiler_gnu" >&6
 17.5544 +ac_ext=$ac_save_ext
 17.5545 +ac_test_FFLAGS=${FFLAGS+set}
 17.5546 +ac_save_FFLAGS=$FFLAGS
 17.5547 +FFLAGS=
 17.5548 +echo "$as_me:$LINENO: checking whether $F77 accepts -g" >&5
 17.5549 +echo $ECHO_N "checking whether $F77 accepts -g... $ECHO_C" >&6
 17.5550 +if test "${ac_cv_prog_f77_g+set}" = set; then
 17.5551 +  echo $ECHO_N "(cached) $ECHO_C" >&6
 17.5552 +else
 17.5553 +  FFLAGS=-g
 17.5554 +cat >conftest.$ac_ext <<_ACEOF
 17.5555 +      program main
 17.5556 +
 17.5557 +      end
 17.5558 +_ACEOF
 17.5559 +rm -f conftest.$ac_objext
 17.5560 +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
 17.5561 +  (eval $ac_compile) 2>conftest.er1
 17.5562 +  ac_status=$?
 17.5563 +  grep -v '^ *+' conftest.er1 >conftest.err
 17.5564 +  rm -f conftest.er1
 17.5565 +  cat conftest.err >&5
 17.5566 +  echo "$as_me:$LINENO: \$? = $ac_status" >&5
 17.5567 +  (exit $ac_status); } &&
 17.5568 +	 { ac_try='test -z "$ac_f77_werror_flag"			 || test ! -s conftest.err'
 17.5569 +  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
 17.5570 +  (eval $ac_try) 2>&5
 17.5571 +  ac_status=$?
 17.5572 +  echo "$as_me:$LINENO: \$? = $ac_status" >&5
 17.5573 +  (exit $ac_status); }; } &&
 17.5574 +	 { ac_try='test -s conftest.$ac_objext'
 17.5575 +  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
 17.5576 +  (eval $ac_try) 2>&5
 17.5577 +  ac_status=$?
 17.5578 +  echo "$as_me:$LINENO: \$? = $ac_status" >&5
 17.5579 +  (exit $ac_status); }; }; then
 17.5580 +  ac_cv_prog_f77_g=yes
 17.5581 +else
 17.5582 +  echo "$as_me: failed program was:" >&5
 17.5583 +sed 's/^/| /' conftest.$ac_ext >&5
 17.5584 +
 17.5585 +ac_cv_prog_f77_g=no
 17.5586 +fi
 17.5587 +rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
 17.5588 +
 17.5589 +fi
 17.5590 +echo "$as_me:$LINENO: result: $ac_cv_prog_f77_g" >&5
 17.5591 +echo "${ECHO_T}$ac_cv_prog_f77_g" >&6
 17.5592 +if test "$ac_test_FFLAGS" = set; then
 17.5593 +  FFLAGS=$ac_save_FFLAGS
 17.5594 +elif test $ac_cv_prog_f77_g = yes; then
 17.5595 +  if test "x$ac_cv_f77_compiler_gnu" = xyes; then
 17.5596 +    FFLAGS="-g -O2"
 17.5597 +  else
 17.5598 +    FFLAGS="-g"
 17.5599 +  fi
 17.5600 +else
 17.5601 +  if test "x$ac_cv_f77_compiler_gnu" = xyes; then
 17.5602 +    FFLAGS="-O2"
 17.5603 +  else
 17.5604 +    FFLAGS=
 17.5605 +  fi
 17.5606 +fi
 17.5607 +
 17.5608 +G77=`test $ac_compiler_gnu = yes && echo yes`
 17.5609 +ac_ext=c
 17.5610 +ac_cpp='$CPP $CPPFLAGS'
 17.5611 +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
 17.5612 +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
 17.5613 +ac_compiler_gnu=$ac_cv_c_compiler_gnu
 17.5614 +
 17.5615 +
 17.5616 +
 17.5617 +# Autoconf 2.13's AC_OBJEXT and AC_EXEEXT macros only works for C compilers!
 17.5618 +
 17.5619 +# find the maximum length of command line arguments
 17.5620 +echo "$as_me:$LINENO: checking the maximum length of command line arguments" >&5
 17.5621 +echo $ECHO_N "checking the maximum length of command line arguments... $ECHO_C" >&6
 17.5622 +if test "${lt_cv_sys_max_cmd_len+set}" = set; then
 17.5623 +  echo $ECHO_N "(cached) $ECHO_C" >&6
 17.5624 +else
 17.5625 +    i=0
 17.5626 +  teststring="ABCD"
 17.5627 +
 17.5628 +  case $build_os in
 17.5629 +  msdosdjgpp*)
 17.5630 +    # On DJGPP, this test can blow up pretty badly due to problems in libc
 17.5631 +    # (any single argument exceeding 2000 bytes causes a buffer overrun
 17.5632 +    # during glob expansion).  Even if it were fixed, the result of this
 17.5633 +    # check would be larger than it should be.
 17.5634 +    lt_cv_sys_max_cmd_len=12288;    # 12K is about right
 17.5635 +    ;;
 17.5636 +
 17.5637 +  gnu*)
 17.5638 +    # Under GNU Hurd, this test is not required because there is
 17.5639 +    # no limit to the length of command line arguments.
 17.5640 +    # Libtool will interpret -1 as no limit whatsoever
 17.5641 +    lt_cv_sys_max_cmd_len=-1;
 17.5642 +    ;;
 17.5643 +
 17.5644 +  cygwin* | mingw*)
 17.5645 +    # On Win9x/ME, this test blows up -- it succeeds, but takes
 17.5646 +    # about 5 minutes as the teststring grows exponentially.
 17.5647 +    # Worse, since 9x/ME are not pre-emptively multitasking,
 17.5648 +    # you end up with a "frozen" computer, even though with patience
 17.5649 +    # the test eventually succeeds (with a max line length of 256k).
 17.5650 +    # Instead, let's just punt: use the minimum linelength reported by
 17.5651 +    # all of the supported platforms: 8192 (on NT/2K/XP).
 17.5652 +    lt_cv_sys_max_cmd_len=8192;
 17.5653 +    ;;
 17.5654 +
 17.5655 +  amigaos*)
 17.5656 +    # On AmigaOS with pdksh, this test takes hours, literally.
 17.5657 +    # So we just punt and use a minimum line length of 8192.
 17.5658 +    lt_cv_sys_max_cmd_len=8192;
 17.5659 +    ;;
 17.5660 +
 17.5661 +  netbsd* | freebsd* | openbsd* | darwin* | dragonfly*)
 17.5662 +    # This has been around since 386BSD, at least.  Likely further.
 17.5663 +    if test -x /sbin/sysctl; then
 17.5664 +      lt_cv_sys_max_cmd_len=`/sbin/sysctl -n kern.argmax`
 17.5665 +    elif test -x /usr/sbin/sysctl; then
 17.5666 +      lt_cv_sys_max_cmd_len=`/usr/sbin/sysctl -n kern.argmax`
 17.5667 +    else
 17.5668 +      lt_cv_sys_max_cmd_len=65536	# usable default for all BSDs
 17.5669 +    fi
 17.5670 +    # And add a safety zone
 17.5671 +    lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4`
 17.5672 +    lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3`
 17.5673 +    ;;
 17.5674 +
 17.5675 +  interix*)
 17.5676 +    # We know the value 262144 and hardcode it with a safety zone (like BSD)
 17.5677 +    lt_cv_sys_max_cmd_len=196608
 17.5678 +    ;;
 17.5679 +
 17.5680 +  osf*)
 17.5681 +    # Dr. Hans Ekkehard Plesser reports seeing a kernel panic running configure
 17.5682 +    # due to this test when exec_disable_arg_limit is 1 on Tru64. It is not
 17.5683 +    # nice to cause kernel panics so lets avoid the loop below.
 17.5684 +    # First set a reasonable default.
 17.5685 +    lt_cv_sys_max_cmd_len=16384
 17.5686 +    #
 17.5687 +    if test -x /sbin/sysconfig; then
 17.5688 +      case `/sbin/sysconfig -q proc exec_disable_arg_limit` in
 17.5689 +        *1*) lt_cv_sys_max_cmd_len=-1 ;;
 17.5690 +      esac
 17.5691 +    fi
 17.5692 +    ;;
 17.5693 +  sco3.2v5*)
 17.5694 +    lt_cv_sys_max_cmd_len=102400
 17.5695 +    ;;
 17.5696 +  sysv5* | sco5v6* | sysv4.2uw2*)
 17.5697 +    kargmax=`grep ARG_MAX /etc/conf/cf.d/stune 2>/dev/null`
 17.5698 +    if test -n "$kargmax"; then
 17.5699 +      lt_cv_sys_max_cmd_len=`echo $kargmax | sed 's/.*[ 	]//'`
 17.5700 +    else
 17.5701 +      lt_cv_sys_max_cmd_len=32768
 17.5702 +    fi
 17.5703 +    ;;
 17.5704 +  *)
 17.5705 +    # If test is not a shell built-in, we'll probably end up computing a
 17.5706 +    # maximum length that is only half of the actual maximum length, but
 17.5707 +    # we can't tell.
 17.5708 +    SHELL=${SHELL-${CONFIG_SHELL-/bin/sh}}
 17.5709 +    while (test "X"`$SHELL $0 --fallback-echo "X$teststring" 2>/dev/null` \
 17.5710 +	       = "XX$teststring") >/dev/null 2>&1 &&
 17.5711 +	    new_result=`expr "X$teststring" : ".*" 2>&1` &&
 17.5712 +	    lt_cv_sys_max_cmd_len=$new_result &&
 17.5713 +	    test $i != 17 # 1/2 MB should be enough
 17.5714 +    do
 17.5715 +      i=`expr $i + 1`
 17.5716 +      teststring=$teststring$teststring
 17.5717 +    done
 17.5718 +    teststring=
 17.5719 +    # Add a significant safety factor because C++ compilers can tack on massive
 17.5720 +    # amounts of additional arguments before passing them to the linker.
 17.5721 +    # It appears as though 1/2 is a usable value.
 17.5722 +    lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 2`
 17.5723 +    ;;
 17.5724 +  esac
 17.5725 +
 17.5726 +fi
 17.5727 +
 17.5728 +if test -n $lt_cv_sys_max_cmd_len ; then
 17.5729 +  echo "$as_me:$LINENO: result: $lt_cv_sys_max_cmd_len" >&5
 17.5730 +echo "${ECHO_T}$lt_cv_sys_max_cmd_len" >&6
 17.5731 +else
 17.5732 +  echo "$as_me:$LINENO: result: none" >&5
 17.5733 +echo "${ECHO_T}none" >&6
 17.5734 +fi
 17.5735 +
 17.5736 +
 17.5737 +
 17.5738 +
 17.5739 +# Check for command to grab the raw symbol name followed by C symbol from nm.
 17.5740 +echo "$as_me:$LINENO: checking command to parse $NM output from $compiler object" >&5
 17.5741 +echo $ECHO_N "checking command to parse $NM output from $compiler object... $ECHO_C" >&6
 17.5742 +if test "${lt_cv_sys_global_symbol_pipe+set}" = set; then
 17.5743 +  echo $ECHO_N "(cached) $ECHO_C" >&6
 17.5744 +else
 17.5745 +
 17.5746 +# These are sane defaults that work on at least a few old systems.
 17.5747 +# [They come from Ultrix.  What could be older than Ultrix?!! ;)]
 17.5748 +
 17.5749 +# Character class describing NM global symbol codes.
 17.5750 +symcode='[BCDEGRST]'
 17.5751 +
 17.5752 +# Regexp to match symbols that can be accessed directly from C.
 17.5753 +sympat='\([_A-Za-z][_A-Za-z0-9]*\)'
 17.5754 +
 17.5755 +# Transform an extracted symbol line into a proper C declaration
 17.5756 +lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^. .* \(.*\)$/extern int \1;/p'"
 17.5757 +
 17.5758 +# Transform an extracted symbol line into symbol name and symbol address
 17.5759 +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'"
 17.5760 +
 17.5761 +# Define system-specific variables.
 17.5762 +case $host_os in
 17.5763 +aix*)
 17.5764 +  symcode='[BCDT]'
 17.5765 +  ;;
 17.5766 +cygwin* | mingw* | pw32*)
 17.5767 +  symcode='[ABCDGISTW]'
 17.5768 +  ;;
 17.5769 +hpux*) # Its linker distinguishes data from code symbols
 17.5770 +  if test "$host_cpu" = ia64; then
 17.5771 +    symcode='[ABCDEGRST]'
 17.5772 +  fi
 17.5773 +  lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern int \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'"
 17.5774 +  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'"
 17.5775 +  ;;
 17.5776 +linux*)
 17.5777 +  if test "$host_cpu" = ia64; then
 17.5778 +    symcode='[ABCDGIRSTW]'
 17.5779 +    lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern int \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'"
 17.5780 +    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'"
 17.5781 +  fi
 17.5782 +  ;;
 17.5783 +irix* | nonstopux*)
 17.5784 +  symcode='[BCDEGRST]'
 17.5785 +  ;;
 17.5786 +osf*)
 17.5787 +  symcode='[BCDEGQRST]'
 17.5788 +  ;;
 17.5789 +solaris*)
 17.5790 +  symcode='[BDRT]'
 17.5791 +  ;;
 17.5792 +sco3.2v5*)
 17.5793 +  symcode='[DT]'
 17.5794 +  ;;
 17.5795 +sysv4.2uw2*)
 17.5796 +  symcode='[DT]'
 17.5797 +  ;;
 17.5798 +sysv5* | sco5v6* | unixware* | OpenUNIX*)
 17.5799 +  symcode='[ABDT]'
 17.5800 +  ;;
 17.5801 +sysv4)
 17.5802 +  symcode='[DFNSTU]'
 17.5803 +  ;;
 17.5804 +esac
 17.5805 +
 17.5806 +# Handle CRLF in mingw tool chain
 17.5807 +opt_cr=
 17.5808 +case $build_os in
 17.5809 +mingw*)
 17.5810 +  opt_cr=`echo 'x\{0,1\}' | tr x '\015'` # option cr in regexp
 17.5811 +  ;;
 17.5812 +esac
 17.5813 +
 17.5814 +# If we're using GNU nm, then use its standard symbol codes.
 17.5815 +case `$NM -V 2>&1` in
 17.5816 +*GNU* | *'with BFD'*)
 17.5817 +  symcode='[ABCDGIRSTW]' ;;
 17.5818 +esac
 17.5819 +
 17.5820 +# Try without a prefix undercore, then with it.
 17.5821 +for ac_symprfx in "" "_"; do
 17.5822 +
 17.5823 +  # Transform symcode, sympat, and symprfx into a raw symbol and a C symbol.
 17.5824 +  symxfrm="\\1 $ac_symprfx\\2 \\2"
 17.5825 +
 17.5826 +  # Write the raw and C identifiers.
 17.5827 +  lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[ 	]\($symcode$symcode*\)[ 	][ 	]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'"
 17.5828 +
 17.5829 +  # Check to see that the pipe works correctly.
 17.5830 +  pipe_works=no
 17.5831 +
 17.5832 +  rm -f conftest*
 17.5833 +  cat > conftest.$ac_ext <<EOF
 17.5834 +#ifdef __cplusplus
 17.5835 +extern "C" {
 17.5836 +#endif
 17.5837 +char nm_test_var;
 17.5838 +void nm_test_func(){}
 17.5839 +#ifdef __cplusplus
 17.5840 +}
 17.5841 +#endif
 17.5842 +int main(){nm_test_var='a';nm_test_func();return(0);}
 17.5843 +EOF
 17.5844 +
 17.5845 +  if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
 17.5846 +  (eval $ac_compile) 2>&5
 17.5847 +  ac_status=$?
 17.5848 +  echo "$as_me:$LINENO: \$? = $ac_status" >&5
 17.5849 +  (exit $ac_status); }; then
 17.5850 +    # Now try to grab the symbols.
 17.5851 +    nlist=conftest.nm
 17.5852 +    if { (eval echo "$as_me:$LINENO: \"$NM conftest.$ac_objext \| $lt_cv_sys_global_symbol_pipe \> $nlist\"") >&5
 17.5853 +  (eval $NM conftest.$ac_objext \| $lt_cv_sys_global_symbol_pipe \> $nlist) 2>&5
 17.5854 +  ac_status=$?
 17.5855 +  echo "$as_me:$LINENO: \$? = $ac_status" >&5
 17.5856 +  (exit $ac_status); } && test -s "$nlist"; then
 17.5857 +      # Try sorting and uniquifying the output.
 17.5858 +      if sort "$nlist" | uniq > "$nlist"T; then
 17.5859 +	mv -f "$nlist"T "$nlist"
 17.5860 +      else
 17.5861 +	rm -f "$nlist"T
 17.5862 +      fi
 17.5863 +
 17.5864 +      # Make sure that we snagged all the symbols we need.
 17.5865 +      if grep ' nm_test_var$' "$nlist" >/dev/null; then
 17.5866 +	if grep ' nm_test_func$' "$nlist" >/dev/null; then
 17.5867 +	  cat <<EOF > conftest.$ac_ext
 17.5868 +#ifdef __cplusplus
 17.5869 +extern "C" {
 17.5870 +#endif
 17.5871 +
 17.5872 +EOF
 17.5873 +	  # Now generate the symbol file.
 17.5874 +	  eval "$lt_cv_sys_global_symbol_to_cdecl"' < "$nlist" | grep -v main >> conftest.$ac_ext'
 17.5875 +
 17.5876 +	  cat <<EOF >> conftest.$ac_ext
 17.5877 +#if defined (__STDC__) && __STDC__
 17.5878 +# define lt_ptr_t void *
 17.5879 +#else
 17.5880 +# define lt_ptr_t char *
 17.5881 +# define const
 17.5882 +#endif
 17.5883 +
 17.5884 +/* The mapping between symbol names and symbols. */
 17.5885 +const struct {
 17.5886 +  const char *name;
 17.5887 +  lt_ptr_t address;
 17.5888 +}
 17.5889 +lt_preloaded_symbols[] =
 17.5890 +{
 17.5891 +EOF
 17.5892 +	  $SED "s/^$symcode$symcode* \(.*\) \(.*\)$/  {\"\2\", (lt_ptr_t) \&\2},/" < "$nlist" | grep -v main >> conftest.$ac_ext
 17.5893 +	  cat <<\EOF >> conftest.$ac_ext
 17.5894 +  {0, (lt_ptr_t) 0}
 17.5895 +};
 17.5896 +
 17.5897 +#ifdef __cplusplus
 17.5898 +}
 17.5899 +#endif
 17.5900 +EOF
 17.5901 +	  # Now try linking the two files.
 17.5902 +	  mv conftest.$ac_objext conftstm.$ac_objext
 17.5903 +	  lt_save_LIBS="$LIBS"
 17.5904 +	  lt_save_CFLAGS="$CFLAGS"
 17.5905 +	  LIBS="conftstm.$ac_objext"
 17.5906 +	  CFLAGS="$CFLAGS$lt_prog_compiler_no_builtin_flag"
 17.5907 +	  if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
 17.5908 +  (eval $ac_link) 2>&5
 17.5909 +  ac_status=$?
 17.5910 +  echo "$as_me:$LINENO: \$? = $ac_status" >&5
 17.5911 +  (exit $ac_status); } && test -s conftest${ac_exeext}; then
 17.5912 +	    pipe_works=yes
 17.5913 +	  fi
 17.5914 +	  LIBS="$lt_save_LIBS"
 17.5915 +	  CFLAGS="$lt_save_CFLAGS"
 17.5916 +	else
 17.5917 +	  echo "cannot find nm_test_func in $nlist" >&5
 17.5918 +	fi
 17.5919 +      else
 17.5920 +	echo "cannot find nm_test_var in $nlist" >&5
 17.5921 +      fi
 17.5922 +    else
 17.5923 +      echo "cannot run $lt_cv_sys_global_symbol_pipe" >&5
 17.5924 +    fi
 17.5925 +  else
 17.5926 +    echo "$progname: failed program was:" >&5
 17.5927 +    cat conftest.$ac_ext >&5
 17.5928 +  fi
 17.5929 +  rm -f conftest* conftst*
 17.5930 +
 17.5931 +  # Do not use the global_symbol_pipe unless it works.
 17.5932 +  if test "$pipe_works" = yes; then
 17.5933 +    break
 17.5934 +  else
 17.5935 +    lt_cv_sys_global_symbol_pipe=
 17.5936 +  fi
 17.5937 +done
 17.5938 +
 17.5939 +fi
 17.5940 +
 17.5941 +if test -z "$lt_cv_sys_global_symbol_pipe"; then
 17.5942 +  lt_cv_sys_global_symbol_to_cdecl=
 17.5943 +fi
 17.5944 +if test -z "$lt_cv_sys_global_symbol_pipe$lt_cv_sys_global_symbol_to_cdecl"; then
 17.5945 +  echo "$as_me:$LINENO: result: failed" >&5
 17.5946 +echo "${ECHO_T}failed" >&6
 17.5947 +else
 17.5948 +  echo "$as_me:$LINENO: result: ok" >&5
 17.5949 +echo "${ECHO_T}ok" >&6
 17.5950 +fi
 17.5951 +
 17.5952 +echo "$as_me:$LINENO: checking for objdir" >&5
 17.5953 +echo $ECHO_N "checking for objdir... $ECHO_C" >&6
 17.5954 +if test "${lt_cv_objdir+set}" = set; then
 17.5955 +  echo $ECHO_N "(cached) $ECHO_C" >&6
 17.5956 +else
 17.5957 +  rm -f .libs 2>/dev/null
 17.5958 +mkdir .libs 2>/dev/null
 17.5959 +if test -d .libs; then
 17.5960 +  lt_cv_objdir=.libs
 17.5961 +else
 17.5962 +  # MS-DOS does not allow filenames that begin with a dot.
 17.5963 +  lt_cv_objdir=_libs
 17.5964 +fi
 17.5965 +rmdir .libs 2>/dev/null
 17.5966 +fi
 17.5967 +echo "$as_me:$LINENO: result: $lt_cv_objdir" >&5
 17.5968 +echo "${ECHO_T}$lt_cv_objdir" >&6
 17.5969 +objdir=$lt_cv_objdir
 17.5970 +
 17.5971 +
 17.5972 +
 17.5973 +
 17.5974 +
 17.5975 +case $host_os in
 17.5976 +aix3*)
 17.5977 +  # AIX sometimes has problems with the GCC collect2 program.  For some
 17.5978 +  # reason, if we set the COLLECT_NAMES environment variable, the problems
 17.5979 +  # vanish in a puff of smoke.
 17.5980 +  if test "X${COLLECT_NAMES+set}" != Xset; then
 17.5981 +    COLLECT_NAMES=
 17.5982 +    export COLLECT_NAMES
 17.5983 +  fi
 17.5984 +  ;;
 17.5985 +esac
 17.5986 +
 17.5987 +# Sed substitution that helps us do robust quoting.  It backslashifies
 17.5988 +# metacharacters that are still active within double-quoted strings.
 17.5989 +Xsed='sed -e 1s/^X//'
 17.5990 +sed_quote_subst='s/\([\\"\\`$\\\\]\)/\\\1/g'
 17.5991 +
 17.5992 +# Same as above, but do not quote variable references.
 17.5993 +double_quote_subst='s/\([\\"\\`\\\\]\)/\\\1/g'
 17.5994 +
 17.5995 +# Sed substitution to delay expansion of an escaped shell variable in a
 17.5996 +# double_quote_subst'ed string.
 17.5997 +delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g'
 17.5998 +
 17.5999 +# Sed substitution to avoid accidental globbing in evaled expressions
 17.6000 +no_glob_subst='s/\*/\\\*/g'
 17.6001 +
 17.6002 +# Constants:
 17.6003 +rm="rm -f"
 17.6004 +
 17.6005 +# Global variables:
 17.6006 +default_ofile=libtool
 17.6007 +can_build_shared=yes
 17.6008 +
 17.6009 +# All known linkers require a `.a' archive for static linking (except MSVC,
 17.6010 +# which needs '.lib').
 17.6011 +libext=a
 17.6012 +ltmain="$ac_aux_dir/ltmain.sh"
 17.6013 +ofile="$default_ofile"
 17.6014 +with_gnu_ld="$lt_cv_prog_gnu_ld"
 17.6015 +
 17.6016 +if test -n "$ac_tool_prefix"; then
 17.6017 +  # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args.
 17.6018 +set dummy ${ac_tool_prefix}ar; ac_word=$2
 17.6019 +echo "$as_me:$LINENO: checking for $ac_word" >&5
 17.6020 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
 17.6021 +if test "${ac_cv_prog_AR+set}" = set; then
 17.6022 +  echo $ECHO_N "(cached) $ECHO_C" >&6
 17.6023 +else
 17.6024 +  if test -n "$AR"; then
 17.6025 +  ac_cv_prog_AR="$AR" # Let the user override the test.
 17.6026 +else
 17.6027 +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
 17.6028 +for as_dir in $PATH
 17.6029 +do
 17.6030 +  IFS=$as_save_IFS
 17.6031 +  test -z "$as_dir" && as_dir=.
 17.6032 +  for ac_exec_ext in '' $ac_executable_extensions; do
 17.6033 +  if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
 17.6034 +    ac_cv_prog_AR="${ac_tool_prefix}ar"
 17.6035 +    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
 17.6036 +    break 2
 17.6037 +  fi
 17.6038 +done
 17.6039 +done
 17.6040 +
 17.6041 +fi
 17.6042 +fi
 17.6043 +AR=$ac_cv_prog_AR
 17.6044 +if test -n "$AR"; then
 17.6045 +  echo "$as_me:$LINENO: result: $AR" >&5
 17.6046 +echo "${ECHO_T}$AR" >&6
 17.6047 +else
 17.6048 +  echo "$as_me:$LINENO: result: no" >&5
 17.6049 +echo "${ECHO_T}no" >&6
 17.6050 +fi
 17.6051 +
 17.6052 +fi
 17.6053 +if test -z "$ac_cv_prog_AR"; then
 17.6054 +  ac_ct_AR=$AR
 17.6055 +  # Extract the first word of "ar", so it can be a program name with args.
 17.6056 +set dummy ar; ac_word=$2
 17.6057 +echo "$as_me:$LINENO: checking for $ac_word" >&5
 17.6058 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
 17.6059 +if test "${ac_cv_prog_ac_ct_AR+set}" = set; then
 17.6060 +  echo $ECHO_N "(cached) $ECHO_C" >&6
 17.6061 +else
 17.6062 +  if test -n "$ac_ct_AR"; then
 17.6063 +  ac_cv_prog_ac_ct_AR="$ac_ct_AR" # Let the user override the test.
 17.6064 +else
 17.6065 +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
 17.6066 +for as_dir in $PATH
 17.6067 +do
 17.6068 +  IFS=$as_save_IFS
 17.6069 +  test -z "$as_dir" && as_dir=.
 17.6070 +  for ac_exec_ext in '' $ac_executable_extensions; do
 17.6071 +  if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
 17.6072 +    ac_cv_prog_ac_ct_AR="ar"
 17.6073 +    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
 17.6074 +    break 2
 17.6075 +  fi
 17.6076 +done
 17.6077 +done
 17.6078 +
 17.6079 +  test -z "$ac_cv_prog_ac_ct_AR" && ac_cv_prog_ac_ct_AR="false"
 17.6080 +fi
 17.6081 +fi
 17.6082 +ac_ct_AR=$ac_cv_prog_ac_ct_AR
 17.6083 +if test -n "$ac_ct_AR"; then
 17.6084 +  echo "$as_me:$LINENO: result: $ac_ct_AR" >&5
 17.6085 +echo "${ECHO_T}$ac_ct_AR" >&6
 17.6086 +else
 17.6087 +  echo "$as_me:$LINENO: result: no" >&5
 17.6088 +echo "${ECHO_T}no" >&6
 17.6089 +fi
 17.6090 +
 17.6091 +  AR=$ac_ct_AR
 17.6092 +else
 17.6093 +  AR="$ac_cv_prog_AR"
 17.6094 +fi
 17.6095 +
 17.6096 +if test -n "$ac_tool_prefix"; then
 17.6097 +  # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args.
 17.6098 +set dummy ${ac_tool_prefix}ranlib; ac_word=$2
 17.6099 +echo "$as_me:$LINENO: checking for $ac_word" >&5
 17.6100 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
 17.6101 +if test "${ac_cv_prog_RANLIB+set}" = set; then
 17.6102 +  echo $ECHO_N "(cached) $ECHO_C" >&6
 17.6103 +else
 17.6104 +  if test -n "$RANLIB"; then
 17.6105 +  ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test.
 17.6106 +else
 17.6107 +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
 17.6108 +for as_dir in $PATH
 17.6109 +do
 17.6110 +  IFS=$as_save_IFS
 17.6111 +  test -z "$as_dir" && as_dir=.
 17.6112 +  for ac_exec_ext in '' $ac_executable_extensions; do
 17.6113 +  if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
 17.6114 +    ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib"
 17.6115 +    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
 17.6116 +    break 2
 17.6117 +  fi
 17.6118 +done
 17.6119 +done
 17.6120 +
 17.6121 +fi
 17.6122 +fi
 17.6123 +RANLIB=$ac_cv_prog_RANLIB
 17.6124 +if test -n "$RANLIB"; then
 17.6125 +  echo "$as_me:$LINENO: result: $RANLIB" >&5
 17.6126 +echo "${ECHO_T}$RANLIB" >&6
 17.6127 +else
 17.6128 +  echo "$as_me:$LINENO: result: no" >&5
 17.6129 +echo "${ECHO_T}no" >&6
 17.6130 +fi
 17.6131 +
 17.6132 +fi
 17.6133 +if test -z "$ac_cv_prog_RANLIB"; then
 17.6134 +  ac_ct_RANLIB=$RANLIB
 17.6135 +  # Extract the first word of "ranlib", so it can be a program name with args.
 17.6136 +set dummy ranlib; ac_word=$2
 17.6137 +echo "$as_me:$LINENO: checking for $ac_word" >&5
 17.6138 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
 17.6139 +if test "${ac_cv_prog_ac_ct_RANLIB+set}" = set; then
 17.6140 +  echo $ECHO_N "(cached) $ECHO_C" >&6
 17.6141 +else
 17.6142 +  if test -n "$ac_ct_RANLIB"; then
 17.6143 +  ac_cv_prog_ac_ct_RANLIB="$ac_ct_RANLIB" # Let the user override the test.
 17.6144 +else
 17.6145 +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
 17.6146 +for as_dir in $PATH
 17.6147 +do
 17.6148 +  IFS=$as_save_IFS
 17.6149 +  test -z "$as_dir" && as_dir=.
 17.6150 +  for ac_exec_ext in '' $ac_executable_extensions; do
 17.6151 +  if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
 17.6152 +    ac_cv_prog_ac_ct_RANLIB="ranlib"
 17.6153 +    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
 17.6154 +    break 2
 17.6155 +  fi
 17.6156 +done
 17.6157 +done
 17.6158 +
 17.6159 +  test -z "$ac_cv_prog_ac_ct_RANLIB" && ac_cv_prog_ac_ct_RANLIB=":"
 17.6160 +fi
 17.6161 +fi
 17.6162 +ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB
 17.6163 +if test -n "$ac_ct_RANLIB"; then
 17.6164 +  echo "$as_me:$LINENO: result: $ac_ct_RANLIB" >&5
 17.6165 +echo "${ECHO_T}$ac_ct_RANLIB" >&6
 17.6166 +else
 17.6167 +  echo "$as_me:$LINENO: result: no" >&5
 17.6168 +echo "${ECHO_T}no" >&6
 17.6169 +fi
 17.6170 +
 17.6171 +  RANLIB=$ac_ct_RANLIB
 17.6172 +else
 17.6173 +  RANLIB="$ac_cv_prog_RANLIB"
 17.6174 +fi
 17.6175 +
 17.6176 +if test -n "$ac_tool_prefix"; then
 17.6177 +  # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args.
 17.6178 +set dummy ${ac_tool_prefix}strip; ac_word=$2
 17.6179 +echo "$as_me:$LINENO: checking for $ac_word" >&5
 17.6180 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
 17.6181 +if test "${ac_cv_prog_STRIP+set}" = set; then
 17.6182 +  echo $ECHO_N "(cached) $ECHO_C" >&6
 17.6183 +else
 17.6184 +  if test -n "$STRIP"; then
 17.6185 +  ac_cv_prog_STRIP="$STRIP" # Let the user override the test.
 17.6186 +else
 17.6187 +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
 17.6188 +for as_dir in $PATH
 17.6189 +do
 17.6190 +  IFS=$as_save_IFS
 17.6191 +  test -z "$as_dir" && as_dir=.
 17.6192 +  for ac_exec_ext in '' $ac_executable_extensions; do
 17.6193 +  if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
 17.6194 +    ac_cv_prog_STRIP="${ac_tool_prefix}strip"
 17.6195 +    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
 17.6196 +    break 2
 17.6197 +  fi
 17.6198 +done
 17.6199 +done
 17.6200 +
 17.6201 +fi
 17.6202 +fi
 17.6203 +STRIP=$ac_cv_prog_STRIP
 17.6204 +if test -n "$STRIP"; then
 17.6205 +  echo "$as_me:$LINENO: result: $STRIP" >&5
 17.6206 +echo "${ECHO_T}$STRIP" >&6
 17.6207 +else
 17.6208 +  echo "$as_me:$LINENO: result: no" >&5
 17.6209 +echo "${ECHO_T}no" >&6
 17.6210 +fi
 17.6211 +
 17.6212 +fi
 17.6213 +if test -z "$ac_cv_prog_STRIP"; then
 17.6214 +  ac_ct_STRIP=$STRIP
 17.6215 +  # Extract the first word of "strip", so it can be a program name with args.
 17.6216 +set dummy strip; ac_word=$2
 17.6217 +echo "$as_me:$LINENO: checking for $ac_word" >&5
 17.6218 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
 17.6219 +if test "${ac_cv_prog_ac_ct_STRIP+set}" = set; then
 17.6220 +  echo $ECHO_N "(cached) $ECHO_C" >&6
 17.6221 +else
 17.6222 +  if test -n "$ac_ct_STRIP"; then
 17.6223 +  ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test.
 17.6224 +else
 17.6225 +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
 17.6226 +for as_dir in $PATH
 17.6227 +do
 17.6228 +  IFS=$as_save_IFS
 17.6229 +  test -z "$as_dir" && as_dir=.
 17.6230 +  for ac_exec_ext in '' $ac_executable_extensions; do
 17.6231 +  if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
 17.6232 +    ac_cv_prog_ac_ct_STRIP="strip"
 17.6233 +    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
 17.6234 +    break 2
 17.6235 +  fi
 17.6236 +done
 17.6237 +done
 17.6238 +
 17.6239 +  test -z "$ac_cv_prog_ac_ct_STRIP" && ac_cv_prog_ac_ct_STRIP=":"
 17.6240 +fi
 17.6241 +fi
 17.6242 +ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP
 17.6243 +if test -n "$ac_ct_STRIP"; then
 17.6244 +  echo "$as_me:$LINENO: result: $ac_ct_STRIP" >&5
 17.6245 +echo "${ECHO_T}$ac_ct_STRIP" >&6
 17.6246 +else
 17.6247 +  echo "$as_me:$LINENO: result: no" >&5
 17.6248 +echo "${ECHO_T}no" >&6
 17.6249 +fi
 17.6250 +
 17.6251 +  STRIP=$ac_ct_STRIP
 17.6252 +else
 17.6253 +  STRIP="$ac_cv_prog_STRIP"
 17.6254 +fi
 17.6255 +
 17.6256 +
 17.6257 +old_CC="$CC"
 17.6258 +old_CFLAGS="$CFLAGS"
 17.6259 +
 17.6260 +# Set sane defaults for various variables
 17.6261 +test -z "$AR" && AR=ar
 17.6262 +test -z "$AR_FLAGS" && AR_FLAGS=cru
 17.6263 +test -z "$AS" && AS=as
 17.6264 +test -z "$CC" && CC=cc
 17.6265 +test -z "$LTCC" && LTCC=$CC
 17.6266 +test -z "$LTCFLAGS" && LTCFLAGS=$CFLAGS
 17.6267 +test -z "$DLLTOOL" && DLLTOOL=dlltool
 17.6268 +test -z "$LD" && LD=ld
 17.6269 +test -z "$LN_S" && LN_S="ln -s"
 17.6270 +test -z "$MAGIC_CMD" && MAGIC_CMD=file
 17.6271 +test -z "$NM" && NM=nm
 17.6272 +test -z "$SED" && SED=sed
 17.6273 +test -z "$OBJDUMP" && OBJDUMP=objdump
 17.6274 +test -z "$RANLIB" && RANLIB=:
 17.6275 +test -z "$STRIP" && STRIP=:
 17.6276 +test -z "$ac_objext" && ac_objext=o
 17.6277 +
 17.6278 +# Determine commands to create old-style static archives.
 17.6279 +old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs$old_deplibs'
 17.6280 +old_postinstall_cmds='chmod 644 $oldlib'
 17.6281 +old_postuninstall_cmds=
 17.6282 +
 17.6283 +if test -n "$RANLIB"; then
 17.6284 +  case $host_os in
 17.6285 +  openbsd*)
 17.6286 +    old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB -t \$oldlib"
 17.6287 +    ;;
 17.6288 +  *)
 17.6289 +    old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB \$oldlib"
 17.6290 +    ;;
 17.6291 +  esac
 17.6292 +  old_archive_cmds="$old_archive_cmds~\$RANLIB \$oldlib"
 17.6293 +fi
 17.6294 +
 17.6295 +for cc_temp in $compiler""; do
 17.6296 +  case $cc_temp in
 17.6297 +    compile | *[\\/]compile | ccache | *[\\/]ccache ) ;;
 17.6298 +    distcc | *[\\/]distcc | purify | *[\\/]purify ) ;;
 17.6299 +    \-*) ;;
 17.6300 +    *) break;;
 17.6301 +  esac
 17.6302 +done
 17.6303 +cc_basename=`$echo "X$cc_temp" | $Xsed -e 's%.*/%%' -e "s%^$host_alias-%%"`
 17.6304 +
 17.6305 +
 17.6306 +# Only perform the check for file, if the check method requires it
 17.6307 +case $deplibs_check_method in
 17.6308 +file_magic*)
 17.6309 +  if test "$file_magic_cmd" = '$MAGIC_CMD'; then
 17.6310 +    echo "$as_me:$LINENO: checking for ${ac_tool_prefix}file" >&5
 17.6311 +echo $ECHO_N "checking for ${ac_tool_prefix}file... $ECHO_C" >&6
 17.6312 +if test "${lt_cv_path_MAGIC_CMD+set}" = set; then
 17.6313 +  echo $ECHO_N "(cached) $ECHO_C" >&6
 17.6314 +else
 17.6315 +  case $MAGIC_CMD in
 17.6316 +[\\/*] |  ?:[\\/]*)
 17.6317 +  lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path.
 17.6318 +  ;;
 17.6319 +*)
 17.6320 +  lt_save_MAGIC_CMD="$MAGIC_CMD"
 17.6321 +  lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
 17.6322 +  ac_dummy="/usr/bin$PATH_SEPARATOR$PATH"
 17.6323 +  for ac_dir in $ac_dummy; do
 17.6324 +    IFS="$lt_save_ifs"
 17.6325 +    test -z "$ac_dir" && ac_dir=.
 17.6326 +    if test -f $ac_dir/${ac_tool_prefix}file; then
 17.6327 +      lt_cv_path_MAGIC_CMD="$ac_dir/${ac_tool_prefix}file"
 17.6328 +      if test -n "$file_magic_test_file"; then
 17.6329 +	case $deplibs_check_method in
 17.6330 +	"file_magic "*)
 17.6331 +	  file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"`
 17.6332 +	  MAGIC_CMD="$lt_cv_path_MAGIC_CMD"
 17.6333 +	  if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null |
 17.6334 +	    $EGREP "$file_magic_regex" > /dev/null; then
 17.6335 +	    :
 17.6336 +	  else
 17.6337 +	    cat <<EOF 1>&2
 17.6338 +
 17.6339 +*** Warning: the command libtool uses to detect shared libraries,
 17.6340 +*** $file_magic_cmd, produces output that libtool cannot recognize.
 17.6341 +*** The result is that libtool may fail to recognize shared libraries
 17.6342 +*** as such.  This will affect the creation of libtool libraries that
 17.6343 +*** depend on shared libraries, but programs linked with such libtool
 17.6344 +*** libraries will work regardless of this problem.  Nevertheless, you
 17.6345 +*** may want to report the problem to your system manager and/or to
 17.6346 +*** bug-libtool@gnu.org
 17.6347 +
 17.6348 +EOF
 17.6349 +	  fi ;;
 17.6350 +	esac
 17.6351 +      fi
 17.6352 +      break
 17.6353 +    fi
 17.6354 +  done
 17.6355 +  IFS="$lt_save_ifs"
 17.6356 +  MAGIC_CMD="$lt_save_MAGIC_CMD"
 17.6357 +  ;;
 17.6358 +esac
 17.6359 +fi
 17.6360 +
 17.6361 +MAGIC_CMD="$lt_cv_path_MAGIC_CMD"
 17.6362 +if test -n "$MAGIC_CMD"; then
 17.6363 +  echo "$as_me:$LINENO: result: $MAGIC_CMD" >&5
 17.6364 +echo "${ECHO_T}$MAGIC_CMD" >&6
 17.6365 +else
 17.6366 +  echo "$as_me:$LINENO: result: no" >&5
 17.6367 +echo "${ECHO_T}no" >&6
 17.6368 +fi
 17.6369 +
 17.6370 +if test -z "$lt_cv_path_MAGIC_CMD"; then
 17.6371 +  if test -n "$ac_tool_prefix"; then
 17.6372 +    echo "$as_me:$LINENO: checking for file" >&5
 17.6373 +echo $ECHO_N "checking for file... $ECHO_C" >&6
 17.6374 +if test "${lt_cv_path_MAGIC_CMD+set}" = set; then
 17.6375 +  echo $ECHO_N "(cached) $ECHO_C" >&6
 17.6376 +else
 17.6377 +  case $MAGIC_CMD in
 17.6378 +[\\/*] |  ?:[\\/]*)
 17.6379 +  lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path.
 17.6380 +  ;;
 17.6381 +*)
 17.6382 +  lt_save_MAGIC_CMD="$MAGIC_CMD"
 17.6383 +  lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
 17.6384 +  ac_dummy="/usr/bin$PATH_SEPARATOR$PATH"
 17.6385 +  for ac_dir in $ac_dummy; do
 17.6386 +    IFS="$lt_save_ifs"
 17.6387 +    test -z "$ac_dir" && ac_dir=.
 17.6388 +    if test -f $ac_dir/file; then
 17.6389 +      lt_cv_path_MAGIC_CMD="$ac_dir/file"
 17.6390 +      if test -n "$file_magic_test_file"; then
 17.6391 +	case $deplibs_check_method in
 17.6392 +	"file_magic "*)
 17.6393 +	  file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"`
 17.6394 +	  MAGIC_CMD="$lt_cv_path_MAGIC_CMD"
 17.6395 +	  if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null |
 17.6396 +	    $EGREP "$file_magic_regex" > /dev/null; then
 17.6397 +	    :
 17.6398 +	  else
 17.6399 +	    cat <<EOF 1>&2
 17.6400 +
 17.6401 +*** Warning: the command libtool uses to detect shared libraries,
 17.6402 +*** $file_magic_cmd, produces output that libtool cannot recognize.
 17.6403 +*** The result is that libtool may fail to recognize shared libraries
 17.6404 +*** as such.  This will affect the creation of libtool libraries that
 17.6405 +*** depend on shared libraries, but programs linked with such libtool
 17.6406 +*** libraries will work regardless of this problem.  Nevertheless, you
 17.6407 +*** may want to report the problem to your system manager and/or to
 17.6408 +*** bug-libtool@gnu.org
 17.6409 +
 17.6410 +EOF
 17.6411 +	  fi ;;
 17.6412 +	esac
 17.6413 +      fi
 17.6414 +      break
 17.6415 +    fi
 17.6416 +  done
 17.6417 +  IFS="$lt_save_ifs"
 17.6418 +  MAGIC_CMD="$lt_save_MAGIC_CMD"
 17.6419 +  ;;
 17.6420 +esac
 17.6421 +fi
 17.6422 +
 17.6423 +MAGIC_CMD="$lt_cv_path_MAGIC_CMD"
 17.6424 +if test -n "$MAGIC_CMD"; then
 17.6425 +  echo "$as_me:$LINENO: result: $MAGIC_CMD" >&5
 17.6426 +echo "${ECHO_T}$MAGIC_CMD" >&6
 17.6427 +else
 17.6428 +  echo "$as_me:$LINENO: result: no" >&5
 17.6429 +echo "${ECHO_T}no" >&6
 17.6430 +fi
 17.6431 +
 17.6432 +  else
 17.6433 +    MAGIC_CMD=:
 17.6434 +  fi
 17.6435 +fi
 17.6436 +
 17.6437 +  fi
 17.6438 +  ;;
 17.6439 +esac
 17.6440 +
 17.6441 +enable_dlopen=no
 17.6442 +enable_win32_dll=no
 17.6443 +
 17.6444 +# Check whether --enable-libtool-lock or --disable-libtool-lock was given.
 17.6445 +if test "${enable_libtool_lock+set}" = set; then
 17.6446 +  enableval="$enable_libtool_lock"
 17.6447 +
 17.6448 +fi;
 17.6449 +test "x$enable_libtool_lock" != xno && enable_libtool_lock=yes
 17.6450 +
 17.6451 +
 17.6452 +# Check whether --with-pic or --without-pic was given.
 17.6453 +if test "${with_pic+set}" = set; then
 17.6454 +  withval="$with_pic"
 17.6455 +  pic_mode="$withval"
 17.6456 +else
 17.6457 +  pic_mode=default
 17.6458 +fi;
 17.6459 +test -z "$pic_mode" && pic_mode=default
 17.6460 +
 17.6461 +# Use C for the default configuration in the libtool script
 17.6462 +tagname=
 17.6463 +lt_save_CC="$CC"
 17.6464 +ac_ext=c
 17.6465 +ac_cpp='$CPP $CPPFLAGS'
 17.6466 +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
 17.6467 +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
 17.6468 +ac_compiler_gnu=$ac_cv_c_compiler_gnu
 17.6469 +
 17.6470 +
 17.6471 +# Source file extension for C test sources.
 17.6472 +ac_ext=c
 17.6473 +
 17.6474 +# Object file extension for compiled C test sources.
 17.6475 +objext=o
 17.6476 +objext=$objext
 17.6477 +
 17.6478 +# Code to be used in simple compile tests
 17.6479 +lt_simple_compile_test_code="int some_variable = 0;\n"
 17.6480 +
 17.6481 +# Code to be used in simple link tests
 17.6482 +lt_simple_link_test_code='int main(){return(0);}\n'
 17.6483 +
 17.6484 +
 17.6485 +# If no C compiler was specified, use CC.
 17.6486 +LTCC=${LTCC-"$CC"}
 17.6487 +
 17.6488 +# If no C compiler flags were specified, use CFLAGS.
 17.6489 +LTCFLAGS=${LTCFLAGS-"$CFLAGS"}
 17.6490 +
 17.6491 +# Allow CC to be a program name with arguments.
 17.6492 +compiler=$CC
 17.6493 +
 17.6494 +
 17.6495 +# save warnings/boilerplate of simple test code
 17.6496 +ac_outfile=conftest.$ac_objext
 17.6497 +printf "$lt_simple_compile_test_code" >conftest.$ac_ext
 17.6498 +eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err
 17.6499 +_lt_compiler_boilerplate=`cat conftest.err`
 17.6500 +$rm conftest*
 17.6501 +
 17.6502 +ac_outfile=conftest.$ac_objext
 17.6503 +printf "$lt_simple_link_test_code" >conftest.$ac_ext
 17.6504 +eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err
 17.6505 +_lt_linker_boilerplate=`cat conftest.err`
 17.6506 +$rm conftest*
 17.6507 +
 17.6508 +
 17.6509 +
 17.6510 +lt_prog_compiler_no_builtin_flag=
 17.6511 +
 17.6512 +if test "$GCC" = yes; then
 17.6513 +  lt_prog_compiler_no_builtin_flag=' -fno-builtin'
 17.6514 +
 17.6515 +
 17.6516 +echo "$as_me:$LINENO: checking if $compiler supports -fno-rtti -fno-exceptions" >&5
 17.6517 +echo $ECHO_N "checking if $compiler supports -fno-rtti -fno-exceptions... $ECHO_C" >&6
 17.6518 +if test "${lt_cv_prog_compiler_rtti_exceptions+set}" = set; then
 17.6519 +  echo $ECHO_N "(cached) $ECHO_C" >&6
 17.6520 +else
 17.6521 +  lt_cv_prog_compiler_rtti_exceptions=no
 17.6522 +  ac_outfile=conftest.$ac_objext
 17.6523 +   printf "$lt_simple_compile_test_code" > conftest.$ac_ext
 17.6524 +   lt_compiler_flag="-fno-rtti -fno-exceptions"
 17.6525 +   # Insert the option either (1) after the last *FLAGS variable, or
 17.6526 +   # (2) before a word containing "conftest.", or (3) at the end.
 17.6527 +   # Note that $ac_compile itself does not contain backslashes and begins
 17.6528 +   # with a dollar sign (not a hyphen), so the echo should work correctly.
 17.6529 +   # The option is referenced via a variable to avoid confusing sed.
 17.6530 +   lt_compile=`echo "$ac_compile" | $SED \
 17.6531 +   -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
 17.6532 +   -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
 17.6533 +   -e 's:$: $lt_compiler_flag:'`
 17.6534 +   (eval echo "\"\$as_me:6531: $lt_compile\"" >&5)
 17.6535 +   (eval "$lt_compile" 2>conftest.err)
 17.6536 +   ac_status=$?
 17.6537 +   cat conftest.err >&5
 17.6538 +   echo "$as_me:6535: \$? = $ac_status" >&5
 17.6539 +   if (exit $ac_status) && test -s "$ac_outfile"; then
 17.6540 +     # The compiler can only warn and ignore the option if not recognized
 17.6541 +     # So say no if there are warnings other than the usual output.
 17.6542 +     $echo "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' >conftest.exp
 17.6543 +     $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2
 17.6544 +     if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then
 17.6545 +       lt_cv_prog_compiler_rtti_exceptions=yes
 17.6546 +     fi
 17.6547 +   fi
 17.6548 +   $rm conftest*
 17.6549 +
 17.6550 +fi
 17.6551 +echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_rtti_exceptions" >&5
 17.6552 +echo "${ECHO_T}$lt_cv_prog_compiler_rtti_exceptions" >&6
 17.6553 +
 17.6554 +if test x"$lt_cv_prog_compiler_rtti_exceptions" = xyes; then
 17.6555 +    lt_prog_compiler_no_builtin_flag="$lt_prog_compiler_no_builtin_flag -fno-rtti -fno-exceptions"
 17.6556 +else
 17.6557 +    :
 17.6558 +fi
 17.6559 +
 17.6560 +fi
 17.6561 +
 17.6562 +lt_prog_compiler_wl=
 17.6563 +lt_prog_compiler_pic=
 17.6564 +lt_prog_compiler_static=
 17.6565 +
 17.6566 +echo "$as_me:$LINENO: checking for $compiler option to produce PIC" >&5
 17.6567 +echo $ECHO_N "checking for $compiler option to produce PIC... $ECHO_C" >&6
 17.6568 +
 17.6569 +  if test "$GCC" = yes; then
 17.6570 +    lt_prog_compiler_wl='-Wl,'
 17.6571 +    lt_prog_compiler_static='-static'
 17.6572 +
 17.6573 +    case $host_os in
 17.6574 +      aix*)
 17.6575 +      # All AIX code is PIC.
 17.6576 +      if test "$host_cpu" = ia64; then
 17.6577 +	# AIX 5 now supports IA64 processor
 17.6578 +	lt_prog_compiler_static='-Bstatic'
 17.6579 +      fi
 17.6580 +      ;;
 17.6581 +
 17.6582 +    amigaos*)
 17.6583 +      # FIXME: we need at least 68020 code to build shared libraries, but
 17.6584 +      # adding the `-m68020' flag to GCC prevents building anything better,
 17.6585 +      # like `-m68040'.
 17.6586 +      lt_prog_compiler_pic='-m68020 -resident32 -malways-restore-a4'
 17.6587 +      ;;
 17.6588 +
 17.6589 +    beos* | cygwin* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*)
 17.6590 +      # PIC is the default for these OSes.
 17.6591 +      ;;
 17.6592 +
 17.6593 +    mingw* | pw32* | os2*)
 17.6594 +      # This hack is so that the source file can tell whether it is being
 17.6595 +      # built for inclusion in a dll (and should export symbols for example).
 17.6596 +      lt_prog_compiler_pic='-DDLL_EXPORT'
 17.6597 +      ;;
 17.6598 +
 17.6599 +    darwin* | rhapsody*)
 17.6600 +      # PIC is the default on this platform
 17.6601 +      # Common symbols not allowed in MH_DYLIB files
 17.6602 +      lt_prog_compiler_pic='-fno-common'
 17.6603 +      ;;
 17.6604 +
 17.6605 +    interix3*)
 17.6606 +      # Interix 3.x gcc -fpic/-fPIC options generate broken code.
 17.6607 +      # Instead, we relocate shared libraries at runtime.
 17.6608 +      ;;
 17.6609 +
 17.6610 +    msdosdjgpp*)
 17.6611 +      # Just because we use GCC doesn't mean we suddenly get shared libraries
 17.6612 +      # on systems that don't support them.
 17.6613 +      lt_prog_compiler_can_build_shared=no
 17.6614 +      enable_shared=no
 17.6615 +      ;;
 17.6616 +
 17.6617 +    sysv4*MP*)
 17.6618 +      if test -d /usr/nec; then
 17.6619 +	lt_prog_compiler_pic=-Kconform_pic
 17.6620 +      fi
 17.6621 +      ;;
 17.6622 +
 17.6623 +    hpux*)
 17.6624 +      # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but
 17.6625 +      # not for PA HP-UX.
 17.6626 +      case $host_cpu in
 17.6627 +      hppa*64*|ia64*)
 17.6628 +	# +Z the default
 17.6629 +	;;
 17.6630 +      *)
 17.6631 +	lt_prog_compiler_pic='-fPIC'
 17.6632 +	;;
 17.6633 +      esac
 17.6634 +      ;;
 17.6635 +
 17.6636 +    *)
 17.6637 +      lt_prog_compiler_pic='-fPIC'
 17.6638 +      ;;
 17.6639 +    esac
 17.6640 +  else
 17.6641 +    # PORTME Check for flag to pass linker flags through the system compiler.
 17.6642 +    case $host_os in
 17.6643 +    aix*)
 17.6644 +      lt_prog_compiler_wl='-Wl,'
 17.6645 +      if test "$host_cpu" = ia64; then
 17.6646 +	# AIX 5 now supports IA64 processor
 17.6647 +	lt_prog_compiler_static='-Bstatic'
 17.6648 +      else
 17.6649 +	lt_prog_compiler_static='-bnso -bI:/lib/syscalls.exp'
 17.6650 +      fi
 17.6651 +      ;;
 17.6652 +      darwin*)
 17.6653 +        # PIC is the default on this platform
 17.6654 +        # Common symbols not allowed in MH_DYLIB files
 17.6655 +       case $cc_basename in
 17.6656 +         xlc*)
 17.6657 +         lt_prog_compiler_pic='-qnocommon'
 17.6658 +         lt_prog_compiler_wl='-Wl,'
 17.6659 +         ;;
 17.6660 +       esac
 17.6661 +       ;;
 17.6662 +
 17.6663 +    mingw* | pw32* | os2*)
 17.6664 +      # This hack is so that the source file can tell whether it is being
 17.6665 +      # built for inclusion in a dll (and should export symbols for example).
 17.6666 +      lt_prog_compiler_pic='-DDLL_EXPORT'
 17.6667 +      ;;
 17.6668 +
 17.6669 +    hpux9* | hpux10* | hpux11*)
 17.6670 +      lt_prog_compiler_wl='-Wl,'
 17.6671 +      # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but
 17.6672 +      # not for PA HP-UX.
 17.6673 +      case $host_cpu in
 17.6674 +      hppa*64*|ia64*)
 17.6675 +	# +Z the default
 17.6676 +	;;
 17.6677 +      *)
 17.6678 +	lt_prog_compiler_pic='+Z'
 17.6679 +	;;
 17.6680 +      esac
 17.6681 +      # Is there a better lt_prog_compiler_static that works with the bundled CC?
 17.6682 +      lt_prog_compiler_static='${wl}-a ${wl}archive'
 17.6683 +      ;;
 17.6684 +
 17.6685 +    irix5* | irix6* | nonstopux*)
 17.6686 +      lt_prog_compiler_wl='-Wl,'
 17.6687 +      # PIC (with -KPIC) is the default.
 17.6688 +      lt_prog_compiler_static='-non_shared'
 17.6689 +      ;;
 17.6690 +
 17.6691 +    newsos6)
 17.6692 +      lt_prog_compiler_pic='-KPIC'
 17.6693 +      lt_prog_compiler_static='-Bstatic'
 17.6694 +      ;;
 17.6695 +
 17.6696 +    linux*)
 17.6697 +      case $cc_basename in
 17.6698 +      icc* | ecc*)
 17.6699 +	lt_prog_compiler_wl='-Wl,'
 17.6700 +	lt_prog_compiler_pic='-KPIC'
 17.6701 +	lt_prog_compiler_static='-static'
 17.6702 +        ;;
 17.6703 +      pgcc* | pgf77* | pgf90* | pgf95*)
 17.6704 +        # Portland Group compilers (*not* the Pentium gcc compiler,
 17.6705 +	# which looks to be a dead project)
 17.6706 +	lt_prog_compiler_wl='-Wl,'
 17.6707 +	lt_prog_compiler_pic='-fpic'
 17.6708 +	lt_prog_compiler_static='-Bstatic'
 17.6709 +        ;;
 17.6710 +      ccc*)
 17.6711 +        lt_prog_compiler_wl='-Wl,'
 17.6712 +        # All Alpha code is PIC.
 17.6713 +        lt_prog_compiler_static='-non_shared'
 17.6714 +        ;;
 17.6715 +      esac
 17.6716 +      ;;
 17.6717 +
 17.6718 +    osf3* | osf4* | osf5*)
 17.6719 +      lt_prog_compiler_wl='-Wl,'
 17.6720 +      # All OSF/1 code is PIC.
 17.6721 +      lt_prog_compiler_static='-non_shared'
 17.6722 +      ;;
 17.6723 +
 17.6724 +    solaris*)
 17.6725 +      lt_prog_compiler_pic='-KPIC'
 17.6726 +      lt_prog_compiler_static='-Bstatic'
 17.6727 +      case $cc_basename in
 17.6728 +      f77* | f90* | f95*)
 17.6729 +	lt_prog_compiler_wl='-Qoption ld ';;
 17.6730 +      *)
 17.6731 +	lt_prog_compiler_wl='-Wl,';;
 17.6732 +      esac
 17.6733 +      ;;
 17.6734 +
 17.6735 +    sunos4*)
 17.6736 +      lt_prog_compiler_wl='-Qoption ld '
 17.6737 +      lt_prog_compiler_pic='-PIC'
 17.6738 +      lt_prog_compiler_static='-Bstatic'
 17.6739 +      ;;
 17.6740 +
 17.6741 +    sysv4 | sysv4.2uw2* | sysv4.3*)
 17.6742 +      lt_prog_compiler_wl='-Wl,'
 17.6743 +      lt_prog_compiler_pic='-KPIC'
 17.6744 +      lt_prog_compiler_static='-Bstatic'
 17.6745 +      ;;
 17.6746 +
 17.6747 +    sysv4*MP*)
 17.6748 +      if test -d /usr/nec ;then
 17.6749 +	lt_prog_compiler_pic='-Kconform_pic'
 17.6750 +	lt_prog_compiler_static='-Bstatic'
 17.6751 +      fi
 17.6752 +      ;;
 17.6753 +
 17.6754 +    sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*)
 17.6755 +      lt_prog_compiler_wl='-Wl,'
 17.6756 +      lt_prog_compiler_pic='-KPIC'
 17.6757 +      lt_prog_compiler_static='-Bstatic'
 17.6758 +      ;;
 17.6759 +
 17.6760 +    unicos*)
 17.6761 +      lt_prog_compiler_wl='-Wl,'
 17.6762 +      lt_prog_compiler_can_build_shared=no
 17.6763 +      ;;
 17.6764 +
 17.6765 +    uts4*)
 17.6766 +      lt_prog_compiler_pic='-pic'
 17.6767 +      lt_prog_compiler_static='-Bstatic'
 17.6768 +      ;;
 17.6769 +
 17.6770 +    *)
 17.6771 +      lt_prog_compiler_can_build_shared=no
 17.6772 +      ;;
 17.6773 +    esac
 17.6774 +  fi
 17.6775 +
 17.6776 +echo "$as_me:$LINENO: result: $lt_prog_compiler_pic" >&5
 17.6777 +echo "${ECHO_T}$lt_prog_compiler_pic" >&6
 17.6778 +
 17.6779 +#
 17.6780 +# Check to make sure the PIC flag actually works.
 17.6781 +#
 17.6782 +if test -n "$lt_prog_compiler_pic"; then
 17.6783 +
 17.6784 +echo "$as_me:$LINENO: checking if $compiler PIC flag $lt_prog_compiler_pic works" >&5
 17.6785 +echo $ECHO_N "checking if $compiler PIC flag $lt_prog_compiler_pic works... $ECHO_C" >&6
 17.6786 +if test "${lt_prog_compiler_pic_works+set}" = set; then
 17.6787 +  echo $ECHO_N "(cached) $ECHO_C" >&6
 17.6788 +else
 17.6789 +  lt_prog_compiler_pic_works=no
 17.6790 +  ac_outfile=conftest.$ac_objext
 17.6791 +   printf "$lt_simple_compile_test_code" > conftest.$ac_ext
 17.6792 +   lt_compiler_flag="$lt_prog_compiler_pic -DPIC"
 17.6793 +   # Insert the option either (1) after the last *FLAGS variable, or
 17.6794 +   # (2) before a word containing "conftest.", or (3) at the end.
 17.6795 +   # Note that $ac_compile itself does not contain backslashes and begins
 17.6796 +   # with a dollar sign (not a hyphen), so the echo should work correctly.
 17.6797 +   # The option is referenced via a variable to avoid confusing sed.
 17.6798 +   lt_compile=`echo "$ac_compile" | $SED \
 17.6799 +   -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
 17.6800 +   -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
 17.6801 +   -e 's:$: $lt_compiler_flag:'`
 17.6802 +   (eval echo "\"\$as_me:6799: $lt_compile\"" >&5)
 17.6803 +   (eval "$lt_compile" 2>conftest.err)
 17.6804 +   ac_status=$?
 17.6805 +   cat conftest.err >&5
 17.6806 +   echo "$as_me:6803: \$? = $ac_status" >&5
 17.6807 +   if (exit $ac_status) && test -s "$ac_outfile"; then
 17.6808 +     # The compiler can only warn and ignore the option if not recognized
 17.6809 +     # So say no if there are warnings other than the usual output.
 17.6810 +     $echo "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' >conftest.exp
 17.6811 +     $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2
 17.6812 +     if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then
 17.6813 +       lt_prog_compiler_pic_works=yes
 17.6814 +     fi
 17.6815 +   fi
 17.6816 +   $rm conftest*
 17.6817 +
 17.6818 +fi
 17.6819 +echo "$as_me:$LINENO: result: $lt_prog_compiler_pic_works" >&5
 17.6820 +echo "${ECHO_T}$lt_prog_compiler_pic_works" >&6
 17.6821 +
 17.6822 +if test x"$lt_prog_compiler_pic_works" = xyes; then
 17.6823 +    case $lt_prog_compiler_pic in
 17.6824 +     "" | " "*) ;;
 17.6825 +     *) lt_prog_compiler_pic=" $lt_prog_compiler_pic" ;;
 17.6826 +     esac
 17.6827 +else
 17.6828 +    lt_prog_compiler_pic=
 17.6829 +     lt_prog_compiler_can_build_shared=no
 17.6830 +fi
 17.6831 +
 17.6832 +fi
 17.6833 +case $host_os in
 17.6834 +  # For platforms which do not support PIC, -DPIC is meaningless:
 17.6835 +  *djgpp*)
 17.6836 +    lt_prog_compiler_pic=
 17.6837 +    ;;
 17.6838 +  *)
 17.6839 +    lt_prog_compiler_pic="$lt_prog_compiler_pic -DPIC"
 17.6840 +    ;;
 17.6841 +esac
 17.6842 +
 17.6843 +#
 17.6844 +# Check to make sure the static flag actually works.
 17.6845 +#
 17.6846 +wl=$lt_prog_compiler_wl eval lt_tmp_static_flag=\"$lt_prog_compiler_static\"
 17.6847 +echo "$as_me:$LINENO: checking if $compiler static flag $lt_tmp_static_flag works" >&5
 17.6848 +echo $ECHO_N "checking if $compiler static flag $lt_tmp_static_flag works... $ECHO_C" >&6
 17.6849 +if test "${lt_prog_compiler_static_works+set}" = set; then
 17.6850 +  echo $ECHO_N "(cached) $ECHO_C" >&6
 17.6851 +else
 17.6852 +  lt_prog_compiler_static_works=no
 17.6853 +   save_LDFLAGS="$LDFLAGS"
 17.6854 +   LDFLAGS="$LDFLAGS $lt_tmp_static_flag"
 17.6855 +   printf "$lt_simple_link_test_code" > conftest.$ac_ext
 17.6856 +   if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then
 17.6857 +     # The linker can only warn and ignore the option if not recognized
 17.6858 +     # So say no if there are warnings
 17.6859 +     if test -s conftest.err; then
 17.6860 +       # Append any errors to the config.log.
 17.6861 +       cat conftest.err 1>&5
 17.6862 +       $echo "X$_lt_linker_boilerplate" | $Xsed -e '/^$/d' > conftest.exp
 17.6863 +       $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2
 17.6864 +       if diff conftest.exp conftest.er2 >/dev/null; then
 17.6865 +         lt_prog_compiler_static_works=yes
 17.6866 +       fi
 17.6867 +     else
 17.6868 +       lt_prog_compiler_static_works=yes
 17.6869 +     fi
 17.6870 +   fi
 17.6871 +   $rm conftest*
 17.6872 +   LDFLAGS="$save_LDFLAGS"
 17.6873 +
 17.6874 +fi
 17.6875 +echo "$as_me:$LINENO: result: $lt_prog_compiler_static_works" >&5
 17.6876 +echo "${ECHO_T}$lt_prog_compiler_static_works" >&6
 17.6877 +
 17.6878 +if test x"$lt_prog_compiler_static_works" = xyes; then
 17.6879 +    :
 17.6880 +else
 17.6881 +    lt_prog_compiler_static=
 17.6882 +fi
 17.6883 +
 17.6884 +
 17.6885 +echo "$as_me:$LINENO: checking if $compiler supports -c -o file.$ac_objext" >&5
 17.6886 +echo $ECHO_N "checking if $compiler supports -c -o file.$ac_objext... $ECHO_C" >&6
 17.6887 +if test "${lt_cv_prog_compiler_c_o+set}" = set; then
 17.6888 +  echo $ECHO_N "(cached) $ECHO_C" >&6
 17.6889 +else
 17.6890 +  lt_cv_prog_compiler_c_o=no
 17.6891 +   $rm -r conftest 2>/dev/null
 17.6892 +   mkdir conftest
 17.6893 +   cd conftest
 17.6894 +   mkdir out
 17.6895 +   printf "$lt_simple_compile_test_code" > conftest.$ac_ext
 17.6896 +
 17.6897 +   lt_compiler_flag="-o out/conftest2.$ac_objext"
 17.6898 +   # Insert the option either (1) after the last *FLAGS variable, or
 17.6899 +   # (2) before a word containing "conftest.", or (3) at the end.
 17.6900 +   # Note that $ac_compile itself does not contain backslashes and begins
 17.6901 +   # with a dollar sign (not a hyphen), so the echo should work correctly.
 17.6902 +   lt_compile=`echo "$ac_compile" | $SED \
 17.6903 +   -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
 17.6904 +   -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
 17.6905 +   -e 's:$: $lt_compiler_flag:'`
 17.6906 +   (eval echo "\"\$as_me:6903: $lt_compile\"" >&5)
 17.6907 +   (eval "$lt_compile" 2>out/conftest.err)
 17.6908 +   ac_status=$?
 17.6909 +   cat out/conftest.err >&5
 17.6910 +   echo "$as_me:6907: \$? = $ac_status" >&5
 17.6911 +   if (exit $ac_status) && test -s out/conftest2.$ac_objext
 17.6912 +   then
 17.6913 +     # The compiler can only warn and ignore the option if not recognized
 17.6914 +     # So say no if there are warnings
 17.6915 +     $echo "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' > out/conftest.exp
 17.6916 +     $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2
 17.6917 +     if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then
 17.6918 +       lt_cv_prog_compiler_c_o=yes
 17.6919 +     fi
 17.6920 +   fi
 17.6921 +   chmod u+w . 2>&5
 17.6922 +   $rm conftest*
 17.6923 +   # SGI C++ compiler will create directory out/ii_files/ for
 17.6924 +   # template instantiation
 17.6925 +   test -d out/ii_files && $rm out/ii_files/* && rmdir out/ii_files
 17.6926 +   $rm out/* && rmdir out
 17.6927 +   cd ..
 17.6928 +   rmdir conftest
 17.6929 +   $rm conftest*
 17.6930 +
 17.6931 +fi
 17.6932 +echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_c_o" >&5
 17.6933 +echo "${ECHO_T}$lt_cv_prog_compiler_c_o" >&6
 17.6934 +
 17.6935 +
 17.6936 +hard_links="nottested"
 17.6937 +if test "$lt_cv_prog_compiler_c_o" = no && test "$need_locks" != no; then
 17.6938 +  # do not overwrite the value of need_locks provided by the user
 17.6939 +  echo "$as_me:$LINENO: checking if we can lock with hard links" >&5
 17.6940 +echo $ECHO_N "checking if we can lock with hard links... $ECHO_C" >&6
 17.6941 +  hard_links=yes
 17.6942 +  $rm conftest*
 17.6943 +  ln conftest.a conftest.b 2>/dev/null && hard_links=no
 17.6944 +  touch conftest.a
 17.6945 +  ln conftest.a conftest.b 2>&5 || hard_links=no
 17.6946 +  ln conftest.a conftest.b 2>/dev/null && hard_links=no
 17.6947 +  echo "$as_me:$LINENO: result: $hard_links" >&5
 17.6948 +echo "${ECHO_T}$hard_links" >&6
 17.6949 +  if test "$hard_links" = no; then
 17.6950 +    { echo "$as_me:$LINENO: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&5
 17.6951 +echo "$as_me: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&2;}
 17.6952 +    need_locks=warn
 17.6953 +  fi
 17.6954 +else
 17.6955 +  need_locks=no
 17.6956 +fi
 17.6957 +
 17.6958 +echo "$as_me:$LINENO: checking whether the $compiler linker ($LD) supports shared libraries" >&5
 17.6959 +echo $ECHO_N "checking whether the $compiler linker ($LD) supports shared libraries... $ECHO_C" >&6
 17.6960 +
 17.6961 +  runpath_var=
 17.6962 +  allow_undefined_flag=
 17.6963 +  enable_shared_with_static_runtimes=no
 17.6964 +  archive_cmds=
 17.6965 +  archive_expsym_cmds=
 17.6966 +  old_archive_From_new_cmds=
 17.6967 +  old_archive_from_expsyms_cmds=
 17.6968 +  export_dynamic_flag_spec=
 17.6969 +  whole_archive_flag_spec=
 17.6970 +  thread_safe_flag_spec=
 17.6971 +  hardcode_libdir_flag_spec=
 17.6972 +  hardcode_libdir_flag_spec_ld=
 17.6973 +  hardcode_libdir_separator=
 17.6974 +  hardcode_direct=no
 17.6975 +  hardcode_minus_L=no
 17.6976 +  hardcode_shlibpath_var=unsupported
 17.6977 +  link_all_deplibs=unknown
 17.6978 +  hardcode_automatic=no
 17.6979 +  module_cmds=
 17.6980 +  module_expsym_cmds=
 17.6981 +  always_export_symbols=no
 17.6982 +  export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols'
 17.6983 +  # include_expsyms should be a list of space-separated symbols to be *always*
 17.6984 +  # included in the symbol list
 17.6985 +  include_expsyms=
 17.6986 +  # exclude_expsyms can be an extended regexp of symbols to exclude
 17.6987 +  # it will be wrapped by ` (' and `)$', so one must not match beginning or
 17.6988 +  # end of line.  Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc',
 17.6989 +  # as well as any symbol that contains `d'.
 17.6990 +  exclude_expsyms="_GLOBAL_OFFSET_TABLE_"
 17.6991 +  # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out
 17.6992 +  # platforms (ab)use it in PIC code, but their linkers get confused if
 17.6993 +  # the symbol is explicitly referenced.  Since portable code cannot
 17.6994 +  # rely on this symbol name, it's probably fine to never include it in
 17.6995 +  # preloaded symbol tables.
 17.6996 +  extract_expsyms_cmds=
 17.6997 +  # Just being paranoid about ensuring that cc_basename is set.
 17.6998 +  for cc_temp in $compiler""; do
 17.6999 +  case $cc_temp in
 17.7000 +    compile | *[\\/]compile | ccache | *[\\/]ccache ) ;;
 17.7001 +    distcc | *[\\/]distcc | purify | *[\\/]purify ) ;;
 17.7002 +    \-*) ;;
 17.7003 +    *) break;;
 17.7004 +  esac
 17.7005 +done
 17.7006 +cc_basename=`$echo "X$cc_temp" | $Xsed -e 's%.*/%%' -e "s%^$host_alias-%%"`
 17.7007 +
 17.7008 +  case $host_os in
 17.7009 +  cygwin* | mingw* | pw32*)
 17.7010 +    # FIXME: the MSVC++ port hasn't been tested in a loooong time
 17.7011 +    # When not using gcc, we currently assume that we are using
 17.7012 +    # Microsoft Visual C++.
 17.7013 +    if test "$GCC" != yes; then
 17.7014 +      with_gnu_ld=no
 17.7015 +    fi
 17.7016 +    ;;
 17.7017 +  interix*)
 17.7018 +    # we just hope/assume this is gcc and not c89 (= MSVC++)
 17.7019 +    with_gnu_ld=yes
 17.7020 +    ;;
 17.7021 +  openbsd*)
 17.7022 +    with_gnu_ld=no
 17.7023 +    ;;
 17.7024 +  esac
 17.7025 +
 17.7026 +  ld_shlibs=yes
 17.7027 +  if test "$with_gnu_ld" = yes; then
 17.7028 +    # If archive_cmds runs LD, not CC, wlarc should be empty
 17.7029 +    wlarc='${wl}'
 17.7030 +
 17.7031 +    # Set some defaults for GNU ld with shared library support. These
 17.7032 +    # are reset later if shared libraries are not supported. Putting them
 17.7033 +    # here allows them to be overridden if necessary.
 17.7034 +    runpath_var=LD_RUN_PATH
 17.7035 +    hardcode_libdir_flag_spec='${wl}--rpath ${wl}$libdir'
 17.7036 +    export_dynamic_flag_spec='${wl}--export-dynamic'
 17.7037 +    # ancient GNU ld didn't support --whole-archive et. al.
 17.7038 +    if $LD --help 2>&1 | grep 'no-whole-archive' > /dev/null; then
 17.7039 +	whole_archive_flag_spec="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive'
 17.7040 +      else
 17.7041 +  	whole_archive_flag_spec=
 17.7042 +    fi
 17.7043 +    supports_anon_versioning=no
 17.7044 +    case `$LD -v 2>/dev/null` in
 17.7045 +      *\ [01].* | *\ 2.[0-9].* | *\ 2.10.*) ;; # catch versions < 2.11
 17.7046 +      *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ...
 17.7047 +      *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ...
 17.7048 +      *\ 2.11.*) ;; # other 2.11 versions
 17.7049 +      *) supports_anon_versioning=yes ;;
 17.7050 +    esac
 17.7051 +
 17.7052 +    # See if GNU ld supports shared libraries.
 17.7053 +    case $host_os in
 17.7054 +    aix3* | aix4* | aix5*)
 17.7055 +      # On AIX/PPC, the GNU linker is very broken
 17.7056 +      if test "$host_cpu" != ia64; then
 17.7057 +	ld_shlibs=no
 17.7058 +	cat <<EOF 1>&2
 17.7059 +
 17.7060 +*** Warning: the GNU linker, at least up to release 2.9.1, is reported
 17.7061 +*** to be unable to reliably create shared libraries on AIX.
 17.7062 +*** Therefore, libtool is disabling shared libraries support.  If you
 17.7063 +*** really care for shared libraries, you may want to modify your PATH
 17.7064 +*** so that a non-GNU linker is found, and then restart.
 17.7065 +
 17.7066 +EOF
 17.7067 +      fi
 17.7068 +      ;;
 17.7069 +
 17.7070 +    amigaos*)
 17.7071 +      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)'
 17.7072 +      hardcode_libdir_flag_spec='-L$libdir'
 17.7073 +      hardcode_minus_L=yes
 17.7074 +
 17.7075 +      # Samuel A. Falvo II <kc5tja@dolphin.openprojects.net> reports
 17.7076 +      # that the semantics of dynamic libraries on AmigaOS, at least up
 17.7077 +      # to version 4, is to share data among multiple programs linked
 17.7078 +      # with the same dynamic library.  Since this doesn't match the
 17.7079 +      # behavior of shared libraries on other platforms, we can't use
 17.7080 +      # them.
 17.7081 +      ld_shlibs=no
 17.7082 +      ;;
 17.7083 +
 17.7084 +    beos*)
 17.7085 +      if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
 17.7086 +	allow_undefined_flag=unsupported
 17.7087 +	# Joseph Beckenbach <jrb3@best.com> says some releases of gcc
 17.7088 +	# support --undefined.  This deserves some investigation.  FIXME
 17.7089 +	archive_cmds='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
 17.7090 +      else
 17.7091 +	ld_shlibs=no
 17.7092 +      fi
 17.7093 +      ;;
 17.7094 +
 17.7095 +    cygwin* | mingw* | pw32*)
 17.7096 +      # _LT_AC_TAGVAR(hardcode_libdir_flag_spec, ) is actually meaningless,
 17.7097 +      # as there is no search path for DLLs.
 17.7098 +      hardcode_libdir_flag_spec='-L$libdir'
 17.7099 +      allow_undefined_flag=unsupported
 17.7100 +      always_export_symbols=no
 17.7101 +      enable_shared_with_static_runtimes=yes
 17.7102 +      export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS] /s/.* \([^ ]*\)/\1 DATA/'\'' | $SED -e '\''/^[AITW] /s/.* //'\'' | sort | uniq > $export_symbols'
 17.7103 +
 17.7104 +      if $LD --help 2>&1 | grep 'auto-import' > /dev/null; then
 17.7105 +        archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
 17.7106 +	# If the export-symbols file already is a .def file (1st line
 17.7107 +	# is EXPORTS), use it as is; otherwise, prepend...
 17.7108 +	archive_expsym_cmds='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then
 17.7109 +	  cp $export_symbols $output_objdir/$soname.def;
 17.7110 +	else
 17.7111 +	  echo EXPORTS > $output_objdir/$soname.def;
 17.7112 +	  cat $export_symbols >> $output_objdir/$soname.def;
 17.7113 +	fi~
 17.7114 +	$CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
 17.7115 +      else
 17.7116 +	ld_shlibs=no
 17.7117 +      fi
 17.7118 +      ;;
 17.7119 +
 17.7120 +    interix3*)
 17.7121 +      hardcode_direct=no
 17.7122 +      hardcode_shlibpath_var=no
 17.7123 +      hardcode_libdir_flag_spec='${wl}-rpath,$libdir'
 17.7124 +      export_dynamic_flag_spec='${wl}-E'
 17.7125 +      # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc.
 17.7126 +      # Instead, shared libraries are loaded at an image base (0x10000000 by
 17.7127 +      # default) and relocated if they conflict, which is a slow very memory
 17.7128 +      # consuming and fragmenting process.  To avoid this, we pick a random,
 17.7129 +      # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link
 17.7130 +      # time.  Moving up from 0x10000000 also allows more sbrk(2) space.
 17.7131 +      archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
 17.7132 +      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'
 17.7133 +      ;;
 17.7134 +
 17.7135 +    linux*)
 17.7136 +      if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
 17.7137 +	tmp_addflag=
 17.7138 +	case $cc_basename,$host_cpu in
 17.7139 +	pgcc*)				# Portland Group C compiler
 17.7140 +	  whole_archive_flag_spec='${wl}--whole-archive`for conv in $convenience\"\"; do test  -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $echo \"$new_convenience\"` ${wl}--no-whole-archive'
 17.7141 +	  tmp_addflag=' $pic_flag'
 17.7142 +	  ;;
 17.7143 +	pgf77* | pgf90* | pgf95*)	# Portland Group f77 and f90 compilers
 17.7144 +	  whole_archive_flag_spec='${wl}--whole-archive`for conv in $convenience\"\"; do test  -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $echo \"$new_convenience\"` ${wl}--no-whole-archive'
 17.7145 +	  tmp_addflag=' $pic_flag -Mnomain' ;;
 17.7146 +	ecc*,ia64* | icc*,ia64*)		# Intel C compiler on ia64
 17.7147 +	  tmp_addflag=' -i_dynamic' ;;
 17.7148 +	efc*,ia64* | ifort*,ia64*)	# Intel Fortran compiler on ia64
 17.7149 +	  tmp_addflag=' -i_dynamic -nofor_main' ;;
 17.7150 +	ifc* | ifort*)			# Intel Fortran compiler
 17.7151 +	  tmp_addflag=' -nofor_main' ;;
 17.7152 +	esac
 17.7153 +	archive_cmds='$CC -shared'"$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
 17.7154 +
 17.7155 +	if test $supports_anon_versioning = yes; then
 17.7156 +	  archive_expsym_cmds='$echo "{ global:" > $output_objdir/$libname.ver~
 17.7157 +  cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~
 17.7158 +  $echo "local: *; };" >> $output_objdir/$libname.ver~
 17.7159 +	  $CC -shared'"$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib'
 17.7160 +	fi
 17.7161 +	link_all_deplibs=no
 17.7162 +      else
 17.7163 +	ld_shlibs=no
 17.7164 +      fi
 17.7165 +      ;;
 17.7166 +
 17.7167 +    netbsd* | netbsdelf*-gnu | knetbsd*-gnu)
 17.7168 +      if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then
 17.7169 +	archive_cmds='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib'
 17.7170 +	wlarc=
 17.7171 +      else
 17.7172 +	archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
 17.7173 +	archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
 17.7174 +      fi
 17.7175 +      ;;
 17.7176 +
 17.7177 +    solaris*)
 17.7178 +      if $LD -v 2>&1 | grep 'BFD 2\.8' > /dev/null; then
 17.7179 +	ld_shlibs=no
 17.7180 +	cat <<EOF 1>&2
 17.7181 +
 17.7182 +*** Warning: The releases 2.8.* of the GNU linker cannot reliably
 17.7183 +*** create shared libraries on Solaris systems.  Therefore, libtool
 17.7184 +*** is disabling shared libraries support.  We urge you to upgrade GNU
 17.7185 +*** binutils to release 2.9.1 or newer.  Another option is to modify
 17.7186 +*** your PATH or compiler configuration so that the native linker is
 17.7187 +*** used, and then restart.
 17.7188 +
 17.7189 +EOF
 17.7190 +      elif $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
 17.7191 +	archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
 17.7192 +	archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
 17.7193 +      else
 17.7194 +	ld_shlibs=no
 17.7195 +      fi
 17.7196 +      ;;
 17.7197 +
 17.7198 +    sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*)
 17.7199 +      case `$LD -v 2>&1` in
 17.7200 +        *\ [01].* | *\ 2.[0-9].* | *\ 2.1[0-5].*)
 17.7201 +	ld_shlibs=no
 17.7202 +	cat <<_LT_EOF 1>&2
 17.7203 +
 17.7204 +*** Warning: Releases of the GNU linker prior to 2.16.91.0.3 can not
 17.7205 +*** reliably create shared libraries on SCO systems.  Therefore, libtool
 17.7206 +*** is disabling shared libraries support.  We urge you to upgrade GNU
 17.7207 +*** binutils to release 2.16.91.0.3 or newer.  Another option is to modify
 17.7208 +*** your PATH or compiler configuration so that the native linker is
 17.7209 +*** used, and then restart.
 17.7210 +
 17.7211 +_LT_EOF
 17.7212 +	;;
 17.7213 +	*)
 17.7214 +	  if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
 17.7215 +	    hardcode_libdir_flag_spec='`test -z "$SCOABSPATH" && echo ${wl}-rpath,$libdir`'
 17.7216 +	    archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib'
 17.7217 +	    archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname,\${SCOABSPATH:+${install_libdir}/}$soname,-retain-symbols-file,$export_symbols -o $lib'
 17.7218 +	  else
 17.7219 +	    ld_shlibs=no
 17.7220 +	  fi
 17.7221 +	;;
 17.7222 +      esac
 17.7223 +      ;;
 17.7224 +
 17.7225 +    sunos4*)
 17.7226 +      archive_cmds='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags'
 17.7227 +      wlarc=
 17.7228 +      hardcode_direct=yes
 17.7229 +      hardcode_shlibpath_var=no
 17.7230 +      ;;
 17.7231 +
 17.7232 +    *)
 17.7233 +      if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
 17.7234 +	archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
 17.7235 +	archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
 17.7236 +      else
 17.7237 +	ld_shlibs=no
 17.7238 +      fi
 17.7239 +      ;;
 17.7240 +    esac
 17.7241 +
 17.7242 +    if test "$ld_shlibs" = no; then
 17.7243 +      runpath_var=
 17.7244 +      hardcode_libdir_flag_spec=
 17.7245 +      export_dynamic_flag_spec=
 17.7246 +      whole_archive_flag_spec=
 17.7247 +    fi
 17.7248 +  else
 17.7249 +    # PORTME fill in a description of your system's linker (not GNU ld)
 17.7250 +    case $host_os in
 17.7251 +    aix3*)
 17.7252 +      allow_undefined_flag=unsupported
 17.7253 +      always_export_symbols=yes
 17.7254 +      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'
 17.7255 +      # Note: this linker hardcodes the directories in LIBPATH if there
 17.7256 +      # are no directories specified by -L.
 17.7257 +      hardcode_minus_L=yes
 17.7258 +      if test "$GCC" = yes && test -z "$lt_prog_compiler_static"; then
 17.7259 +	# Neither direct hardcoding nor static linking is supported with a
 17.7260 +	# broken collect2.
 17.7261 +	hardcode_direct=unsupported
 17.7262 +      fi
 17.7263 +      ;;
 17.7264 +
 17.7265 +    aix4* | aix5*)
 17.7266 +      if test "$host_cpu" = ia64; then
 17.7267 +	# On IA64, the linker does run time linking by default, so we don't
 17.7268 +	# have to do anything special.
 17.7269 +	aix_use_runtimelinking=no
 17.7270 +	exp_sym_flag='-Bexport'
 17.7271 +	no_entry_flag=""
 17.7272 +      else
 17.7273 +	# If we're using GNU nm, then we don't want the "-C" option.
 17.7274 +	# -C means demangle to AIX nm, but means don't demangle with GNU nm
 17.7275 +	if $NM -V 2>&1 | grep 'GNU' > /dev/null; then
 17.7276 +	  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'
 17.7277 +	else
 17.7278 +	  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'
 17.7279 +	fi
 17.7280 +	aix_use_runtimelinking=no
 17.7281 +
 17.7282 +	# Test if we are trying to use run time linking or normal
 17.7283 +	# AIX style linking. If -brtl is somewhere in LDFLAGS, we
 17.7284 +	# need to do runtime linking.
 17.7285 +	case $host_os in aix4.[23]|aix4.[23].*|aix5*)
 17.7286 +	  for ld_flag in $LDFLAGS; do
 17.7287 +  	  if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then
 17.7288 +  	    aix_use_runtimelinking=yes
 17.7289 +  	    break
 17.7290 +  	  fi
 17.7291 +	  done
 17.7292 +	  ;;
 17.7293 +	esac
 17.7294 +
 17.7295 +	exp_sym_flag='-bexport'
 17.7296 +	no_entry_flag='-bnoentry'
 17.7297 +      fi
 17.7298 +
 17.7299 +      # When large executables or shared objects are built, AIX ld can
 17.7300 +      # have problems creating the table of contents.  If linking a library
 17.7301 +      # or program results in "error TOC overflow" add -mminimal-toc to
 17.7302 +      # CXXFLAGS/CFLAGS for g++/gcc.  In the cases where that is not
 17.7303 +      # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS.
 17.7304 +
 17.7305 +      archive_cmds=''
 17.7306 +      hardcode_direct=yes
 17.7307 +      hardcode_libdir_separator=':'
 17.7308 +      link_all_deplibs=yes
 17.7309 +
 17.7310 +      if test "$GCC" = yes; then
 17.7311 +	case $host_os in aix4.[012]|aix4.[012].*)
 17.7312 +	# We only want to do this on AIX 4.2 and lower, the check
 17.7313 +	# below for broken collect2 doesn't work under 4.3+
 17.7314 +	  collect2name=`${CC} -print-prog-name=collect2`
 17.7315 +	  if test -f "$collect2name" && \
 17.7316 +  	   strings "$collect2name" | grep resolve_lib_name >/dev/null
 17.7317 +	  then
 17.7318 +  	  # We have reworked collect2
 17.7319 +  	  hardcode_direct=yes
 17.7320 +	  else
 17.7321 +  	  # We have old collect2
 17.7322 +  	  hardcode_direct=unsupported
 17.7323 +  	  # It fails to find uninstalled libraries when the uninstalled
 17.7324 +  	  # path is not listed in the libpath.  Setting hardcode_minus_L
 17.7325 +  	  # to unsupported forces relinking
 17.7326 +  	  hardcode_minus_L=yes
 17.7327 +  	  hardcode_libdir_flag_spec='-L$libdir'
 17.7328 +  	  hardcode_libdir_separator=
 17.7329 +	  fi
 17.7330 +	  ;;
 17.7331 +	esac
 17.7332 +	shared_flag='-shared'
 17.7333 +	if test "$aix_use_runtimelinking" = yes; then
 17.7334 +	  shared_flag="$shared_flag "'${wl}-G'
 17.7335 +	fi
 17.7336 +      else
 17.7337 +	# not using gcc
 17.7338 +	if test "$host_cpu" = ia64; then
 17.7339 +  	# VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release
 17.7340 +  	# chokes on -Wl,-G. The following line is correct:
 17.7341 +	  shared_flag='-G'
 17.7342 +	else
 17.7343 +	  if test "$aix_use_runtimelinking" = yes; then
 17.7344 +	    shared_flag='${wl}-G'
 17.7345 +	  else
 17.7346 +	    shared_flag='${wl}-bM:SRE'
 17.7347 +	  fi
 17.7348 +	fi
 17.7349 +      fi
 17.7350 +
 17.7351 +      # It seems that -bexpall does not export symbols beginning with
 17.7352 +      # underscore (_), so it is better to generate a list of symbols to export.
 17.7353 +      always_export_symbols=yes
 17.7354 +      if test "$aix_use_runtimelinking" = yes; then
 17.7355 +	# Warning - without using the other runtime loading flags (-brtl),
 17.7356 +	# -berok will link without error, but may produce a broken library.
 17.7357 +	allow_undefined_flag='-berok'
 17.7358 +       # Determine the default libpath from the value encoded in an empty executable.
 17.7359 +       cat >conftest.$ac_ext <<_ACEOF
 17.7360 +/* confdefs.h.  */
 17.7361 +_ACEOF
 17.7362 +cat confdefs.h >>conftest.$ac_ext
 17.7363 +cat >>conftest.$ac_ext <<_ACEOF
 17.7364 +/* end confdefs.h.  */
 17.7365 +
 17.7366 +int
 17.7367 +main ()
 17.7368 +{
 17.7369 +
 17.7370 +  ;
 17.7371 +  return 0;
 17.7372 +}
 17.7373 +_ACEOF
 17.7374 +rm -f conftest.$ac_objext conftest$ac_exeext
 17.7375 +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
 17.7376 +  (eval $ac_link) 2>conftest.er1
 17.7377 +  ac_status=$?
 17.7378 +  grep -v '^ *+' conftest.er1 >conftest.err
 17.7379 +  rm -f conftest.er1
 17.7380 +  cat conftest.err >&5
 17.7381 +  echo "$as_me:$LINENO: \$? = $ac_status" >&5
 17.7382 +  (exit $ac_status); } &&
 17.7383 +	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
 17.7384 +  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
 17.7385 +  (eval $ac_try) 2>&5
 17.7386 +  ac_status=$?
 17.7387 +  echo "$as_me:$LINENO: \$? = $ac_status" >&5
 17.7388 +  (exit $ac_status); }; } &&
 17.7389 +	 { ac_try='test -s conftest$ac_exeext'
 17.7390 +  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
 17.7391 +  (eval $ac_try) 2>&5
 17.7392 +  ac_status=$?
 17.7393 +  echo "$as_me:$LINENO: \$? = $ac_status" >&5
 17.7394 +  (exit $ac_status); }; }; then
 17.7395 +
 17.7396 +aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0  *\(.*\)$/\1/; p; }
 17.7397 +}'`
 17.7398 +# Check for a 64-bit object if we didn't find anything.
 17.7399 +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; }
 17.7400 +}'`; fi
 17.7401 +else
 17.7402 +  echo "$as_me: failed program was:" >&5
 17.7403 +sed 's/^/| /' conftest.$ac_ext >&5
 17.7404 +
 17.7405 +fi
 17.7406 +rm -f conftest.err conftest.$ac_objext \
 17.7407 +      conftest$ac_exeext conftest.$ac_ext
 17.7408 +if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
 17.7409 +
 17.7410 +       hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath"
 17.7411 +	archive_expsym_cmds="\$CC"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then echo "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag"
 17.7412 +       else
 17.7413 +	if test "$host_cpu" = ia64; then
 17.7414 +	  hardcode_libdir_flag_spec='${wl}-R $libdir:/usr/lib:/lib'
 17.7415 +	  allow_undefined_flag="-z nodefs"
 17.7416 +	  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"
 17.7417 +	else
 17.7418 +	 # Determine the default libpath from the value encoded in an empty executable.
 17.7419 +	 cat >conftest.$ac_ext <<_ACEOF
 17.7420 +/* confdefs.h.  */
 17.7421 +_ACEOF
 17.7422 +cat confdefs.h >>conftest.$ac_ext
 17.7423 +cat >>conftest.$ac_ext <<_ACEOF
 17.7424 +/* end confdefs.h.  */
 17.7425 +
 17.7426 +int
 17.7427 +main ()
 17.7428 +{
 17.7429 +
 17.7430 +  ;
 17.7431 +  return 0;
 17.7432 +}
 17.7433 +_ACEOF
 17.7434 +rm -f conftest.$ac_objext conftest$ac_exeext
 17.7435 +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
 17.7436 +  (eval $ac_link) 2>conftest.er1
 17.7437 +  ac_status=$?
 17.7438 +  grep -v '^ *+' conftest.er1 >conftest.err
 17.7439 +  rm -f conftest.er1
 17.7440 +  cat conftest.err >&5
 17.7441 +  echo "$as_me:$LINENO: \$? = $ac_status" >&5
 17.7442 +  (exit $ac_status); } &&
 17.7443 +	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
 17.7444 +  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
 17.7445 +  (eval $ac_try) 2>&5
 17.7446 +  ac_status=$?
 17.7447 +  echo "$as_me:$LINENO: \$? = $ac_status" >&5
 17.7448 +  (exit $ac_status); }; } &&
 17.7449 +	 { ac_try='test -s conftest$ac_exeext'
 17.7450 +  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
 17.7451 +  (eval $ac_try) 2>&5
 17.7452 +  ac_status=$?
 17.7453 +  echo "$as_me:$LINENO: \$? = $ac_status" >&5
 17.7454 +  (exit $ac_status); }; }; then
 17.7455 +
 17.7456 +aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0  *\(.*\)$/\1/; p; }
 17.7457 +}'`
 17.7458 +# Check for a 64-bit object if we didn't find anything.
 17.7459 +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; }
 17.7460 +}'`; fi
 17.7461 +else
 17.7462 +  echo "$as_me: failed program was:" >&5
 17.7463 +sed 's/^/| /' conftest.$ac_ext >&5
 17.7464 +
 17.7465 +fi
 17.7466 +rm -f conftest.err conftest.$ac_objext \
 17.7467 +      conftest$ac_exeext conftest.$ac_ext
 17.7468 +if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
 17.7469 +
 17.7470 +	 hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath"
 17.7471 +	  # Warning - without using the other run time loading flags,
 17.7472 +	  # -berok will link without error, but may produce a broken library.
 17.7473 +	  no_undefined_flag=' ${wl}-bernotok'
 17.7474 +	  allow_undefined_flag=' ${wl}-berok'
 17.7475 +	  # Exported symbols can be pulled into shared objects from archives
 17.7476 +	  whole_archive_flag_spec='$convenience'
 17.7477 +	  archive_cmds_need_lc=yes
 17.7478 +	  # This is similar to how AIX traditionally builds its shared libraries.
 17.7479 +	  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'
 17.7480 +	fi
 17.7481 +      fi
 17.7482 +      ;;
 17.7483 +
 17.7484 +    amigaos*)
 17.7485 +      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)'
 17.7486 +      hardcode_libdir_flag_spec='-L$libdir'
 17.7487 +      hardcode_minus_L=yes
 17.7488 +      # see comment about different semantics on the GNU ld section
 17.7489 +      ld_shlibs=no
 17.7490 +      ;;
 17.7491 +
 17.7492 +    bsdi[45]*)
 17.7493 +      export_dynamic_flag_spec=-rdynamic
 17.7494 +      ;;
 17.7495 +
 17.7496 +    cygwin* | mingw* | pw32*)
 17.7497 +      # When not using gcc, we currently assume that we are using
 17.7498 +      # Microsoft Visual C++.
 17.7499 +      # hardcode_libdir_flag_spec is actually meaningless, as there is
 17.7500 +      # no search path for DLLs.
 17.7501 +      hardcode_libdir_flag_spec=' '
 17.7502 +      allow_undefined_flag=unsupported
 17.7503 +      # Tell ltmain to make .lib files, not .a files.
 17.7504 +      libext=lib
 17.7505 +      # Tell ltmain to make .dll files, not .so files.
 17.7506 +      shrext_cmds=".dll"
 17.7507 +      # FIXME: Setting linknames here is a bad hack.
 17.7508 +      archive_cmds='$CC -o $lib $libobjs $compiler_flags `echo "$deplibs" | $SED -e '\''s/ -lc$//'\''` -link -dll~linknames='
 17.7509 +      # The linker will automatically build a .lib file if we build a DLL.
 17.7510 +      old_archive_From_new_cmds='true'
 17.7511 +      # FIXME: Should let the user specify the lib program.
 17.7512 +      old_archive_cmds='lib /OUT:$oldlib$oldobjs$old_deplibs'
 17.7513 +      fix_srcfile_path='`cygpath -w "$srcfile"`'
 17.7514 +      enable_shared_with_static_runtimes=yes
 17.7515 +      ;;
 17.7516 +
 17.7517 +    darwin* | rhapsody*)
 17.7518 +      case $host_os in
 17.7519 +        rhapsody* | darwin1.[012])
 17.7520 +         allow_undefined_flag='${wl}-undefined ${wl}suppress'
 17.7521 +         ;;
 17.7522 +       *) # Darwin 1.3 on
 17.7523 +         if test -z ${MACOSX_DEPLOYMENT_TARGET} ; then
 17.7524 +           allow_undefined_flag='${wl}-flat_namespace ${wl}-undefined ${wl}suppress'
 17.7525 +         else
 17.7526 +           case ${MACOSX_DEPLOYMENT_TARGET} in
 17.7527 +             10.[012])
 17.7528 +               allow_undefined_flag='${wl}-flat_namespace ${wl}-undefined ${wl}suppress'
 17.7529 +               ;;
 17.7530 +             10.*)
 17.7531 +               allow_undefined_flag='${wl}-undefined ${wl}dynamic_lookup'
 17.7532 +               ;;
 17.7533 +           esac
 17.7534 +         fi
 17.7535 +         ;;
 17.7536 +      esac
 17.7537 +      archive_cmds_need_lc=no
 17.7538 +      hardcode_direct=no
 17.7539 +      hardcode_automatic=yes
 17.7540 +      hardcode_shlibpath_var=unsupported
 17.7541 +      whole_archive_flag_spec=''
 17.7542 +      link_all_deplibs=yes
 17.7543 +    if test "$GCC" = yes ; then
 17.7544 +    	output_verbose_link_cmd='echo'
 17.7545 +        archive_cmds='$CC -dynamiclib $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring'
 17.7546 +      module_cmds='$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags'
 17.7547 +      # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin lds
 17.7548 +      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}'
 17.7549 +      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}'
 17.7550 +    else
 17.7551 +      case $cc_basename in
 17.7552 +        xlc*)
 17.7553 +         output_verbose_link_cmd='echo'
 17.7554 +         archive_cmds='$CC -qmkshrobj $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}`echo $rpath/$soname` $verstring'
 17.7555 +         module_cmds='$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags'
 17.7556 +          # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin lds
 17.7557 +         archive_expsym_cmds='sed -e "s,#.*,," -e "s,^[    ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -qmkshrobj $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}$rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
 17.7558 +          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}'
 17.7559 +          ;;
 17.7560 +       *)
 17.7561 +         ld_shlibs=no
 17.7562 +          ;;
 17.7563 +      esac
 17.7564 +    fi
 17.7565 +      ;;
 17.7566 +
 17.7567 +    dgux*)
 17.7568 +      archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
 17.7569 +      hardcode_libdir_flag_spec='-L$libdir'
 17.7570 +      hardcode_shlibpath_var=no
 17.7571 +      ;;
 17.7572 +
 17.7573 +    freebsd1*)
 17.7574 +      ld_shlibs=no
 17.7575 +      ;;
 17.7576 +
 17.7577 +    # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor
 17.7578 +    # support.  Future versions do this automatically, but an explicit c++rt0.o
 17.7579 +    # does not break anything, and helps significantly (at the cost of a little
 17.7580 +    # extra space).
 17.7581 +    freebsd2.2*)
 17.7582 +      archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o'
 17.7583 +      hardcode_libdir_flag_spec='-R$libdir'
 17.7584 +      hardcode_direct=yes
 17.7585 +      hardcode_shlibpath_var=no
 17.7586 +      ;;
 17.7587 +
 17.7588 +    # Unfortunately, older versions of FreeBSD 2 do not have this feature.
 17.7589 +    freebsd2*)
 17.7590 +      archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'
 17.7591 +      hardcode_direct=yes
 17.7592 +      hardcode_minus_L=yes
 17.7593 +      hardcode_shlibpath_var=no
 17.7594 +      ;;
 17.7595 +
 17.7596 +    # FreeBSD 3 and greater uses gcc -shared to do shared libraries.
 17.7597 +    freebsd* | dragonfly*)
 17.7598 +      archive_cmds='$CC -shared -o $lib $libobjs $deplibs $compiler_flags'
 17.7599 +      hardcode_libdir_flag_spec='-R$libdir'
 17.7600 +      hardcode_direct=yes
 17.7601 +      hardcode_shlibpath_var=no
 17.7602 +      ;;
 17.7603 +
 17.7604 +    # GNU/kFreeBSD uses gcc -shared to do shared libraries.
 17.7605 +    kfreebsd*-gnu)
 17.7606 +      archive_cmds='$CC -shared -o $lib $libobjs $deplibs $compiler_flags'
 17.7607 +      hardcode_libdir_flag_spec='-R$libdir'
 17.7608 +      hardcode_direct=yes
 17.7609 +      hardcode_shlibpath_var=no
 17.7610 +      link_all_deplibs=no
 17.7611 +      ;;
 17.7612 +
 17.7613 +    hpux9*)
 17.7614 +      if test "$GCC" = yes; then
 17.7615 +	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'
 17.7616 +      else
 17.7617 +	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'
 17.7618 +      fi
 17.7619 +      hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir'
 17.7620 +      hardcode_libdir_separator=:
 17.7621 +      hardcode_direct=yes
 17.7622 +
 17.7623 +      # hardcode_minus_L: Not really in the search PATH,
 17.7624 +      # but as the default location of the library.
 17.7625 +      hardcode_minus_L=yes
 17.7626 +      export_dynamic_flag_spec='${wl}-E'
 17.7627 +      ;;
 17.7628 +
 17.7629 +    hpux10*)
 17.7630 +      if test "$GCC" = yes -a "$with_gnu_ld" = no; then
 17.7631 +	archive_cmds='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
 17.7632 +      else
 17.7633 +	archive_cmds='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags'
 17.7634 +      fi
 17.7635 +      if test "$with_gnu_ld" = no; then
 17.7636 +	hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir'
 17.7637 +	hardcode_libdir_separator=:
 17.7638 +
 17.7639 +	hardcode_direct=yes
 17.7640 +	export_dynamic_flag_spec='${wl}-E'
 17.7641 +
 17.7642 +	# hardcode_minus_L: Not really in the search PATH,
 17.7643 +	# but as the default location of the library.
 17.7644 +	hardcode_minus_L=yes
 17.7645 +      fi
 17.7646 +      ;;
 17.7647 +
 17.7648 +    hpux11*)
 17.7649 +      if test "$GCC" = yes -a "$with_gnu_ld" = no; then
 17.7650 +	case $host_cpu in
 17.7651 +	hppa*64*)
 17.7652 +	  archive_cmds='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
 17.7653 +	  ;;
 17.7654 +	ia64*)
 17.7655 +	  archive_cmds='$CC -shared ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags'
 17.7656 +	  ;;
 17.7657 +	*)
 17.7658 +	  archive_cmds='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
 17.7659 +	  ;;
 17.7660 +	esac
 17.7661 +      else
 17.7662 +	case $host_cpu in
 17.7663 +	hppa*64*)
 17.7664 +	  archive_cmds='$CC -b ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
 17.7665 +	  ;;
 17.7666 +	ia64*)
 17.7667 +	  archive_cmds='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags'
 17.7668 +	  ;;
 17.7669 +	*)
 17.7670 +	  archive_cmds='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
 17.7671 +	  ;;
 17.7672 +	esac
 17.7673 +      fi
 17.7674 +      if test "$with_gnu_ld" = no; then
 17.7675 +	hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir'
 17.7676 +	hardcode_libdir_separator=:
 17.7677 +
 17.7678 +	case $host_cpu in
 17.7679 +	hppa*64*|ia64*)
 17.7680 +	  hardcode_libdir_flag_spec_ld='+b $libdir'
 17.7681 +	  hardcode_direct=no
 17.7682 +	  hardcode_shlibpath_var=no
 17.7683 +	  ;;
 17.7684 +	*)
 17.7685 +	  hardcode_direct=yes
 17.7686 +	  export_dynamic_flag_spec='${wl}-E'
 17.7687 +
 17.7688 +	  # hardcode_minus_L: Not really in the search PATH,
 17.7689 +	  # but as the default location of the library.
 17.7690 +	  hardcode_minus_L=yes
 17.7691 +	  ;;
 17.7692 +	esac
 17.7693 +      fi
 17.7694 +      ;;
 17.7695 +
 17.7696 +    irix5* | irix6* | nonstopux*)
 17.7697 +      if test "$GCC" = yes; then
 17.7698 +	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'
 17.7699 +      else
 17.7700 +	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'
 17.7701 +	hardcode_libdir_flag_spec_ld='-rpath $libdir'
 17.7702 +      fi
 17.7703 +      hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
 17.7704 +      hardcode_libdir_separator=:
 17.7705 +      link_all_deplibs=yes
 17.7706 +      ;;
 17.7707 +
 17.7708 +    netbsd* | netbsdelf*-gnu | knetbsd*-gnu)
 17.7709 +      if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then
 17.7710 +	archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'  # a.out
 17.7711 +      else
 17.7712 +	archive_cmds='$LD -shared -o $lib $libobjs $deplibs $linker_flags'      # ELF
 17.7713 +      fi
 17.7714 +      hardcode_libdir_flag_spec='-R$libdir'
 17.7715 +      hardcode_direct=yes
 17.7716 +      hardcode_shlibpath_var=no
 17.7717 +      ;;
 17.7718 +
 17.7719 +    newsos6)
 17.7720 +      archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
 17.7721 +      hardcode_direct=yes
 17.7722 +      hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
 17.7723 +      hardcode_libdir_separator=:
 17.7724 +      hardcode_shlibpath_var=no
 17.7725 +      ;;
 17.7726 +
 17.7727 +    openbsd*)
 17.7728 +      hardcode_direct=yes
 17.7729 +      hardcode_shlibpath_var=no
 17.7730 +      if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
 17.7731 +	archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
 17.7732 +	archive_expsym_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-retain-symbols-file,$export_symbols'
 17.7733 +	hardcode_libdir_flag_spec='${wl}-rpath,$libdir'
 17.7734 +	export_dynamic_flag_spec='${wl}-E'
 17.7735 +      else
 17.7736 +       case $host_os in
 17.7737 +	 openbsd[01].* | openbsd2.[0-7] | openbsd2.[0-7].*)
 17.7738 +	   archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'
 17.7739 +	   hardcode_libdir_flag_spec='-R$libdir'
 17.7740 +	   ;;
 17.7741 +	 *)
 17.7742 +	   archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
 17.7743 +	   hardcode_libdir_flag_spec='${wl}-rpath,$libdir'
 17.7744 +	   ;;
 17.7745 +       esac
 17.7746 +      fi
 17.7747 +      ;;
 17.7748 +
 17.7749 +    os2*)
 17.7750 +      hardcode_libdir_flag_spec='-L$libdir'
 17.7751 +      hardcode_minus_L=yes
 17.7752 +      allow_undefined_flag=unsupported
 17.7753 +      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'
 17.7754 +      old_archive_From_new_cmds='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def'
 17.7755 +      ;;
 17.7756 +
 17.7757 +    osf3*)
 17.7758 +      if test "$GCC" = yes; then
 17.7759 +	allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*'
 17.7760 +	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'
 17.7761 +      else
 17.7762 +	allow_undefined_flag=' -expect_unresolved \*'
 17.7763 +	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'
 17.7764 +      fi
 17.7765 +      hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
 17.7766 +      hardcode_libdir_separator=:
 17.7767 +      ;;
 17.7768 +
 17.7769 +    osf4* | osf5*)	# as osf3* with the addition of -msym flag
 17.7770 +      if test "$GCC" = yes; then
 17.7771 +	allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*'
 17.7772 +	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'
 17.7773 +	hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
 17.7774 +      else
 17.7775 +	allow_undefined_flag=' -expect_unresolved \*'
 17.7776 +	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'
 17.7777 +	archive_expsym_cmds='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; echo "-hidden">> $lib.exp~
 17.7778 +	$LD -shared${allow_undefined_flag} -input $lib.exp $linker_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib~$rm $lib.exp'
 17.7779 +
 17.7780 +	# Both c and cxx compiler support -rpath directly
 17.7781 +	hardcode_libdir_flag_spec='-rpath $libdir'
 17.7782 +      fi
 17.7783 +      hardcode_libdir_separator=:
 17.7784 +      ;;
 17.7785 +
 17.7786 +    solaris*)
 17.7787 +      no_undefined_flag=' -z text'
 17.7788 +      if test "$GCC" = yes; then
 17.7789 +	wlarc='${wl}'
 17.7790 +	archive_cmds='$CC -shared ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
 17.7791 +	archive_expsym_cmds='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~
 17.7792 +	  $CC -shared ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$rm $lib.exp'
 17.7793 +      else
 17.7794 +	wlarc=''
 17.7795 +	archive_cmds='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags'
 17.7796 +	archive_expsym_cmds='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~
 17.7797 +  	$LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$rm $lib.exp'
 17.7798 +      fi
 17.7799 +      hardcode_libdir_flag_spec='-R$libdir'
 17.7800 +      hardcode_shlibpath_var=no
 17.7801 +      case $host_os in
 17.7802 +      solaris2.[0-5] | solaris2.[0-5].*) ;;
 17.7803 +      *)
 17.7804 + 	# The compiler driver will combine linker options so we
 17.7805 + 	# cannot just pass the convience library names through
 17.7806 + 	# without $wl, iff we do not link with $LD.
 17.7807 + 	# Luckily, gcc supports the same syntax we need for Sun Studio.
 17.7808 + 	# Supported since Solaris 2.6 (maybe 2.5.1?)
 17.7809 + 	case $wlarc in
 17.7810 + 	'')
 17.7811 + 	  whole_archive_flag_spec='-z allextract$convenience -z defaultextract' ;;
 17.7812 + 	*)
 17.7813 + 	  whole_archive_flag_spec='${wl}-z ${wl}allextract`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $echo \"$new_convenience\"` ${wl}-z ${wl}defaultextract' ;;
 17.7814 + 	esac ;;
 17.7815 +      esac
 17.7816 +      link_all_deplibs=yes
 17.7817 +      ;;
 17.7818 +
 17.7819 +    sunos4*)
 17.7820 +      if test "x$host_vendor" = xsequent; then
 17.7821 +	# Use $CC to link under sequent, because it throws in some extra .o
 17.7822 +	# files that make .init and .fini sections work.
 17.7823 +	archive_cmds='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags'
 17.7824 +      else
 17.7825 +	archive_cmds='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags'
 17.7826 +      fi
 17.7827 +      hardcode_libdir_flag_spec='-L$libdir'
 17.7828 +      hardcode_direct=yes
 17.7829 +      hardcode_minus_L=yes
 17.7830 +      hardcode_shlibpath_var=no
 17.7831 +      ;;
 17.7832 +
 17.7833 +    sysv4)
 17.7834 +      case $host_vendor in
 17.7835 +	sni)
 17.7836 +	  archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
 17.7837 +	  hardcode_direct=yes # is this really true???
 17.7838 +	;;
 17.7839 +	siemens)
 17.7840 +	  ## LD is ld it makes a PLAMLIB
 17.7841 +	  ## CC just makes a GrossModule.
 17.7842 +	  archive_cmds='$LD -G -o $lib $libobjs $deplibs $linker_flags'
 17.7843 +	  reload_cmds='$CC -r -o $output$reload_objs'
 17.7844 +	  hardcode_direct=no
 17.7845 +        ;;
 17.7846 +	motorola)
 17.7847 +	  archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
 17.7848 +	  hardcode_direct=no #Motorola manual says yes, but my tests say they lie
 17.7849 +	;;
 17.7850 +      esac
 17.7851 +      runpath_var='LD_RUN_PATH'
 17.7852 +      hardcode_shlibpath_var=no
 17.7853 +      ;;
 17.7854 +
 17.7855 +    sysv4.3*)
 17.7856 +      archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
 17.7857 +      hardcode_shlibpath_var=no
 17.7858 +      export_dynamic_flag_spec='-Bexport'
 17.7859 +      ;;
 17.7860 +
 17.7861 +    sysv4*MP*)
 17.7862 +      if test -d /usr/nec; then
 17.7863 +	archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
 17.7864 +	hardcode_shlibpath_var=no
 17.7865 +	runpath_var=LD_RUN_PATH
 17.7866 +	hardcode_runpath_var=yes
 17.7867 +	ld_shlibs=yes
 17.7868 +      fi
 17.7869 +      ;;
 17.7870 +
 17.7871 +    sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7*)
 17.7872 +      no_undefined_flag='${wl}-z,text'
 17.7873 +      archive_cmds_need_lc=no
 17.7874 +      hardcode_shlibpath_var=no
 17.7875 +      runpath_var='LD_RUN_PATH'
 17.7876 +
 17.7877 +      if test "$GCC" = yes; then
 17.7878 +	archive_cmds='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
 17.7879 +	archive_expsym_cmds='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
 17.7880 +      else
 17.7881 +	archive_cmds='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
 17.7882 +	archive_expsym_cmds='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
 17.7883 +      fi
 17.7884 +      ;;
 17.7885 +
 17.7886 +    sysv5* | sco3.2v5* | sco5v6*)
 17.7887 +      # Note: We can NOT use -z defs as we might desire, because we do not
 17.7888 +      # link with -lc, and that would cause any symbols used from libc to
 17.7889 +      # always be unresolved, which means just about no library would
 17.7890 +      # ever link correctly.  If we're not using GNU ld we use -z text
 17.7891 +      # though, which does catch some bad symbols but isn't as heavy-handed
 17.7892 +      # as -z defs.
 17.7893 +      no_undefined_flag='${wl}-z,text'
 17.7894 +      allow_undefined_flag='${wl}-z,nodefs'
 17.7895 +      archive_cmds_need_lc=no
 17.7896 +      hardcode_shlibpath_var=no
 17.7897 +      hardcode_libdir_flag_spec='`test -z "$SCOABSPATH" && echo ${wl}-R,$libdir`'
 17.7898 +      hardcode_libdir_separator=':'
 17.7899 +      link_all_deplibs=yes
 17.7900 +      export_dynamic_flag_spec='${wl}-Bexport'
 17.7901 +      runpath_var='LD_RUN_PATH'
 17.7902 +
 17.7903 +      if test "$GCC" = yes; then
 17.7904 +	archive_cmds='$CC -shared ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags'
 17.7905 +	archive_expsym_cmds='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags'
 17.7906 +      else
 17.7907 +	archive_cmds='$CC -G ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags'
 17.7908 +	archive_expsym_cmds='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags'
 17.7909 +      fi
 17.7910 +      ;;
 17.7911 +
 17.7912 +    uts4*)
 17.7913 +      archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
 17.7914 +      hardcode_libdir_flag_spec='-L$libdir'
 17.7915 +      hardcode_shlibpath_var=no
 17.7916 +      ;;
 17.7917 +
 17.7918 +    *)
 17.7919 +      ld_shlibs=no
 17.7920 +      ;;
 17.7921 +    esac
 17.7922 +  fi
 17.7923 +
 17.7924 +echo "$as_me:$LINENO: result: $ld_shlibs" >&5
 17.7925 +echo "${ECHO_T}$ld_shlibs" >&6
 17.7926 +test "$ld_shlibs" = no && can_build_shared=no
 17.7927 +
 17.7928 +#
 17.7929 +# Do we need to explicitly link libc?
 17.7930 +#
 17.7931 +case "x$archive_cmds_need_lc" in
 17.7932 +x|xyes)
 17.7933 +  # Assume -lc should be added
 17.7934 +  archive_cmds_need_lc=yes
 17.7935 +
 17.7936 +  if test "$enable_shared" = yes && test "$GCC" = yes; then
 17.7937 +    case $archive_cmds in
 17.7938 +    *'~'*)
 17.7939 +      # FIXME: we may have to deal with multi-command sequences.
 17.7940 +      ;;
 17.7941 +    '$CC '*)
 17.7942 +      # Test whether the compiler implicitly links with -lc since on some
 17.7943 +      # systems, -lgcc has to come before -lc. If gcc already passes -lc
 17.7944 +      # to ld, don't add -lc before -lgcc.
 17.7945 +      echo "$as_me:$LINENO: checking whether -lc should be explicitly linked in" >&5
 17.7946 +echo $ECHO_N "checking whether -lc should be explicitly linked in... $ECHO_C" >&6
 17.7947 +      $rm conftest*
 17.7948 +      printf "$lt_simple_compile_test_code" > conftest.$ac_ext
 17.7949 +
 17.7950 +      if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
 17.7951 +  (eval $ac_compile) 2>&5
 17.7952 +  ac_status=$?
 17.7953 +  echo "$as_me:$LINENO: \$? = $ac_status" >&5
 17.7954 +  (exit $ac_status); } 2>conftest.err; then
 17.7955 +        soname=conftest
 17.7956 +        lib=conftest
 17.7957 +        libobjs=conftest.$ac_objext
 17.7958 +        deplibs=
 17.7959 +        wl=$lt_prog_compiler_wl
 17.7960 +	pic_flag=$lt_prog_compiler_pic
 17.7961 +        compiler_flags=-v
 17.7962 +        linker_flags=-v
 17.7963 +        verstring=
 17.7964 +        output_objdir=.
 17.7965 +        libname=conftest
 17.7966 +        lt_save_allow_undefined_flag=$allow_undefined_flag
 17.7967 +        allow_undefined_flag=
 17.7968 +        if { (eval echo "$as_me:$LINENO: \"$archive_cmds 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1\"") >&5
 17.7969 +  (eval $archive_cmds 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1) 2>&5
 17.7970 +  ac_status=$?
 17.7971 +  echo "$as_me:$LINENO: \$? = $ac_status" >&5
 17.7972 +  (exit $ac_status); }
 17.7973 +        then
 17.7974 +	  archive_cmds_need_lc=no
 17.7975 +        else
 17.7976 +	  archive_cmds_need_lc=yes
 17.7977 +        fi
 17.7978 +        allow_undefined_flag=$lt_save_allow_undefined_flag
 17.7979 +      else
 17.7980 +        cat conftest.err 1>&5
 17.7981 +      fi
 17.7982 +      $rm conftest*
 17.7983 +      echo "$as_me:$LINENO: result: $archive_cmds_need_lc" >&5
 17.7984 +echo "${ECHO_T}$archive_cmds_need_lc" >&6
 17.7985 +      ;;
 17.7986 +    esac
 17.7987 +  fi
 17.7988 +  ;;
 17.7989 +esac
 17.7990 +
 17.7991 +echo "$as_me:$LINENO: checking dynamic linker characteristics" >&5
 17.7992 +echo $ECHO_N "checking dynamic linker characteristics... $ECHO_C" >&6
 17.7993 +library_names_spec=
 17.7994 +libname_spec='lib$name'
 17.7995 +soname_spec=
 17.7996 +shrext_cmds=".so"
 17.7997 +postinstall_cmds=
 17.7998 +postuninstall_cmds=
 17.7999 +finish_cmds=
 17.8000 +finish_eval=
 17.8001 +shlibpath_var=
 17.8002 +shlibpath_overrides_runpath=unknown
 17.8003 +version_type=none
 17.8004 +dynamic_linker="$host_os ld.so"
 17.8005 +sys_lib_dlsearch_path_spec="/lib /usr/lib"
 17.8006 +if test "$GCC" = yes; then
 17.8007 +  sys_lib_search_path_spec=`$CC -print-search-dirs | grep "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"`
 17.8008 +  if echo "$sys_lib_search_path_spec" | grep ';' >/dev/null ; then
 17.8009 +    # if the path contains ";" then we assume it to be the separator
 17.8010 +    # otherwise default to the standard path separator (i.e. ":") - it is
 17.8011 +    # assumed that no part of a normal pathname contains ";" but that should
 17.8012 +    # okay in the real world where ";" in dirpaths is itself problematic.
 17.8013 +    sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'`
 17.8014 +  else
 17.8015 +    sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED  -e "s/$PATH_SEPARATOR/ /g"`
 17.8016 +  fi
 17.8017 +else
 17.8018 +  sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib"
 17.8019 +fi
 17.8020 +need_lib_prefix=unknown
 17.8021 +hardcode_into_libs=no
 17.8022 +
 17.8023 +# when you set need_version to no, make sure it does not cause -set_version
 17.8024 +# flags to be left without arguments
 17.8025 +need_version=unknown
 17.8026 +
 17.8027 +case $host_os in
 17.8028 +aix3*)
 17.8029 +  version_type=linux
 17.8030 +  library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a'
 17.8031 +  shlibpath_var=LIBPATH
 17.8032 +
 17.8033 +  # AIX 3 has no versioning support, so we append a major version to the name.
 17.8034 +  soname_spec='${libname}${release}${shared_ext}$major'
 17.8035 +  ;;
 17.8036 +
 17.8037 +aix4* | aix5*)
 17.8038 +  version_type=linux
 17.8039 +  need_lib_prefix=no
 17.8040 +  need_version=no
 17.8041 +  hardcode_into_libs=yes
 17.8042 +  if test "$host_cpu" = ia64; then
 17.8043 +    # AIX 5 supports IA64
 17.8044 +    library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}'
 17.8045 +    shlibpath_var=LD_LIBRARY_PATH
 17.8046 +  else
 17.8047 +    # With GCC up to 2.95.x, collect2 would create an import file
 17.8048 +    # for dependence libraries.  The import file would start with
 17.8049 +    # the line `#! .'.  This would cause the generated library to
 17.8050 +    # depend on `.', always an invalid library.  This was fixed in
 17.8051 +    # development snapshots of GCC prior to 3.0.
 17.8052 +    case $host_os in
 17.8053 +      aix4 | aix4.[01] | aix4.[01].*)
 17.8054 +      if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)'
 17.8055 +	   echo ' yes '
 17.8056 +	   echo '#endif'; } | ${CC} -E - | grep yes > /dev/null; then
 17.8057 +	:
 17.8058 +      else
 17.8059 +	can_build_shared=no
 17.8060 +      fi
 17.8061 +      ;;
 17.8062 +    esac
 17.8063 +    # AIX (on Power*) has no versioning support, so currently we can not hardcode correct
 17.8064 +    # soname into executable. Probably we can add versioning support to
 17.8065 +    # collect2, so additional links can be useful in future.
 17.8066 +    if test "$aix_use_runtimelinking" = yes; then
 17.8067 +      # If using run time linking (on AIX 4.2 or later) use lib<name>.so
 17.8068 +      # instead of lib<name>.a to let people know that these are not
 17.8069 +      # typical AIX shared libraries.
 17.8070 +      library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
 17.8071 +    else
 17.8072 +      # We preserve .a as extension for shared libraries through AIX4.2
 17.8073 +      # and later when we are not doing run time linking.
 17.8074 +      library_names_spec='${libname}${release}.a $libname.a'
 17.8075 +      soname_spec='${libname}${release}${shared_ext}$major'
 17.8076 +    fi
 17.8077 +    shlibpath_var=LIBPATH
 17.8078 +  fi
 17.8079 +  ;;
 17.8080 +
 17.8081 +amigaos*)
 17.8082 +  library_names_spec='$libname.ixlibrary $libname.a'
 17.8083 +  # Create ${libname}_ixlibrary.a entries in /sys/libs.
 17.8084 +  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'
 17.8085 +  ;;
 17.8086 +
 17.8087 +beos*)
 17.8088 +  library_names_spec='${libname}${shared_ext}'
 17.8089 +  dynamic_linker="$host_os ld.so"
 17.8090 +  shlibpath_var=LIBRARY_PATH
 17.8091 +  ;;
 17.8092 +
 17.8093 +bsdi[45]*)
 17.8094 +  version_type=linux
 17.8095 +  need_version=no
 17.8096 +  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
 17.8097 +  soname_spec='${libname}${release}${shared_ext}$major'
 17.8098 +  finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir'
 17.8099 +  shlibpath_var=LD_LIBRARY_PATH
 17.8100 +  sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib"
 17.8101 +  sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib"
 17.8102 +  # the default ld.so.conf also contains /usr/contrib/lib and
 17.8103 +  # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow
 17.8104 +  # libtool to hard-code these into programs
 17.8105 +  ;;
 17.8106 +
 17.8107 +cygwin* | mingw* | pw32*)
 17.8108 +  version_type=windows
 17.8109 +  shrext_cmds=".dll"
 17.8110 +  need_version=no
 17.8111 +  need_lib_prefix=no
 17.8112 +
 17.8113 +  case $GCC,$host_os in
 17.8114 +  yes,cygwin* | yes,mingw* | yes,pw32*)
 17.8115 +    library_names_spec='$libname.dll.a'
 17.8116 +    # DLL is installed to $(libdir)/../bin by postinstall_cmds
 17.8117 +    postinstall_cmds='base_file=`basename \${file}`~
 17.8118 +      dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i;echo \$dlname'\''`~
 17.8119 +      dldir=$destdir/`dirname \$dlpath`~
 17.8120 +      test -d \$dldir || mkdir -p \$dldir~
 17.8121 +      $install_prog $dir/$dlname \$dldir/$dlname~
 17.8122 +      chmod a+x \$dldir/$dlname'
 17.8123 +    postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~
 17.8124 +      dlpath=$dir/\$dldll~
 17.8125 +       $rm \$dlpath'
 17.8126 +    shlibpath_overrides_runpath=yes
 17.8127 +
 17.8128 +    case $host_os in
 17.8129 +    cygwin*)
 17.8130 +      # Cygwin DLLs use 'cyg' prefix rather than 'lib'
 17.8131 +      soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}'
 17.8132 +      sys_lib_search_path_spec="/usr/lib /lib/w32api /lib /usr/local/lib"
 17.8133 +      ;;
 17.8134 +    mingw*)
 17.8135 +      # MinGW DLLs use traditional 'lib' prefix
 17.8136 +      soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}'
 17.8137 +      sys_lib_search_path_spec=`$CC -print-search-dirs | grep "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"`
 17.8138 +      if echo "$sys_lib_search_path_spec" | grep ';[c-zC-Z]:/' >/dev/null; then
 17.8139 +        # It is most probably a Windows format PATH printed by
 17.8140 +        # mingw gcc, but we are running on Cygwin. Gcc prints its search
 17.8141 +        # path with ; separators, and with drive letters. We can handle the
 17.8142 +        # drive letters (cygwin fileutils understands them), so leave them,
 17.8143 +        # especially as we might pass files found there to a mingw objdump,
 17.8144 +        # which wouldn't understand a cygwinified path. Ahh.
 17.8145 +        sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'`
 17.8146 +      else
 17.8147 +        sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED  -e "s/$PATH_SEPARATOR/ /g"`
 17.8148 +      fi
 17.8149 +      ;;
 17.8150 +    pw32*)
 17.8151 +      # pw32 DLLs use 'pw' prefix rather than 'lib'
 17.8152 +      library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}'
 17.8153 +      ;;
 17.8154 +    esac
 17.8155 +    ;;
 17.8156 +
 17.8157 +  *)
 17.8158 +    library_names_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext} $libname.lib'
 17.8159 +    ;;
 17.8160 +  esac
 17.8161 +  dynamic_linker='Win32 ld.exe'
 17.8162 +  # FIXME: first we should search . and the directory the executable is in
 17.8163 +  shlibpath_var=PATH
 17.8164 +  ;;
 17.8165 +
 17.8166 +darwin* | rhapsody*)
 17.8167 +  dynamic_linker="$host_os dyld"
 17.8168 +  version_type=darwin
 17.8169 +  need_lib_prefix=no
 17.8170 +  need_version=no
 17.8171 +  library_names_spec='${libname}${release}${versuffix}$shared_ext ${libname}${release}${major}$shared_ext ${libname}$shared_ext'
 17.8172 +  soname_spec='${libname}${release}${major}$shared_ext'
 17.8173 +  shlibpath_overrides_runpath=yes
 17.8174 +  shlibpath_var=DYLD_LIBRARY_PATH
 17.8175 +  shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`'
 17.8176 +  # Apple's gcc prints 'gcc -print-search-dirs' doesn't operate the same.
 17.8177 +  if test "$GCC" = yes; then
 17.8178 +    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"`
 17.8179 +  else
 17.8180 +    sys_lib_search_path_spec='/lib /usr/lib /usr/local/lib'
 17.8181 +  fi
 17.8182 +  sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib'
 17.8183 +  ;;
 17.8184 +
 17.8185 +dgux*)
 17.8186 +  version_type=linux
 17.8187 +  need_lib_prefix=no
 17.8188 +  need_version=no
 17.8189 +  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext'
 17.8190 +  soname_spec='${libname}${release}${shared_ext}$major'
 17.8191 +  shlibpath_var=LD_LIBRARY_PATH
 17.8192 +  ;;
 17.8193 +
 17.8194 +freebsd1*)
 17.8195 +  dynamic_linker=no
 17.8196 +  ;;
 17.8197 +
 17.8198 +kfreebsd*-gnu)
 17.8199 +  version_type=linux
 17.8200 +  need_lib_prefix=no
 17.8201 +  need_version=no
 17.8202 +  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
 17.8203 +  soname_spec='${libname}${release}${shared_ext}$major'
 17.8204 +  shlibpath_var=LD_LIBRARY_PATH
 17.8205 +  shlibpath_overrides_runpath=no
 17.8206 +  hardcode_into_libs=yes
 17.8207 +  dynamic_linker='GNU ld.so'
 17.8208 +  ;;
 17.8209 +
 17.8210 +freebsd* | dragonfly*)
 17.8211 +  # DragonFly does not have aout.  When/if they implement a new
 17.8212 +  # versioning mechanism, adjust this.
 17.8213 +  if test -x /usr/bin/objformat; then
 17.8214 +    objformat=`/usr/bin/objformat`
 17.8215 +  else
 17.8216 +    case $host_os in
 17.8217 +    freebsd[123]*) objformat=aout ;;
 17.8218 +    *) objformat=elf ;;
 17.8219 +    esac
 17.8220 +  fi
 17.8221 +  version_type=freebsd-$objformat
 17.8222 +  case $version_type in
 17.8223 +    freebsd-elf*)
 17.8224 +      library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}'
 17.8225 +      need_version=no
 17.8226 +      need_lib_prefix=no
 17.8227 +      ;;
 17.8228 +    freebsd-*)
 17.8229 +      library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix'
 17.8230 +      need_version=yes
 17.8231 +      ;;
 17.8232 +  esac
 17.8233 +  shlibpath_var=LD_LIBRARY_PATH
 17.8234 +  case $host_os in
 17.8235 +  freebsd2*)
 17.8236 +    shlibpath_overrides_runpath=yes
 17.8237 +    ;;
 17.8238 +  freebsd3.[01]* | freebsdelf3.[01]*)
 17.8239 +    shlibpath_overrides_runpath=yes
 17.8240 +    hardcode_into_libs=yes
 17.8241 +    ;;
 17.8242 +  freebsd3.[2-9]* | freebsdelf3.[2-9]* | \
 17.8243 +  freebsd4.[0-5] | freebsdelf4.[0-5] | freebsd4.1.1 | freebsdelf4.1.1)
 17.8244 +    shlibpath_overrides_runpath=no
 17.8245 +    hardcode_into_libs=yes
 17.8246 +    ;;
 17.8247 +  freebsd*) # from 4.6 on
 17.8248 +    shlibpath_overrides_runpath=yes
 17.8249 +    hardcode_into_libs=yes
 17.8250 +    ;;
 17.8251 +  esac
 17.8252 +  ;;
 17.8253 +
 17.8254 +gnu*)
 17.8255 +  version_type=linux
 17.8256 +  need_lib_prefix=no
 17.8257 +  need_version=no
 17.8258 +  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}'
 17.8259 +  soname_spec='${libname}${release}${shared_ext}$major'
 17.8260 +  shlibpath_var=LD_LIBRARY_PATH
 17.8261 +  hardcode_into_libs=yes
 17.8262 +  ;;
 17.8263 +
 17.8264 +hpux9* | hpux10* | hpux11*)
 17.8265 +  # Give a soname corresponding to the major version so that dld.sl refuses to
 17.8266 +  # link against other versions.
 17.8267 +  version_type=sunos
 17.8268 +  need_lib_prefix=no
 17.8269 +  need_version=no
 17.8270 +  case $host_cpu in
 17.8271 +  ia64*)
 17.8272 +    shrext_cmds='.so'
 17.8273 +    hardcode_into_libs=yes
 17.8274 +    dynamic_linker="$host_os dld.so"
 17.8275 +    shlibpath_var=LD_LIBRARY_PATH
 17.8276 +    shlibpath_overrides_runpath=yes # Unless +noenvvar is specified.
 17.8277 +    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
 17.8278 +    soname_spec='${libname}${release}${shared_ext}$major'
 17.8279 +    if test "X$HPUX_IA64_MODE" = X32; then
 17.8280 +      sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib"
 17.8281 +    else
 17.8282 +      sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64"
 17.8283 +    fi
 17.8284 +    sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec
 17.8285 +    ;;
 17.8286 +   hppa*64*)
 17.8287 +     shrext_cmds='.sl'
 17.8288 +     hardcode_into_libs=yes
 17.8289 +     dynamic_linker="$host_os dld.sl"
 17.8290 +     shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH
 17.8291 +     shlibpath_overrides_runpath=yes # Unless +noenvvar is specified.
 17.8292 +     library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
 17.8293 +     soname_spec='${libname}${release}${shared_ext}$major'
 17.8294 +     sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64"
 17.8295 +     sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec
 17.8296 +     ;;
 17.8297 +   *)
 17.8298 +    shrext_cmds='.sl'
 17.8299 +    dynamic_linker="$host_os dld.sl"
 17.8300 +    shlibpath_var=SHLIB_PATH
 17.8301 +    shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH
 17.8302 +    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
 17.8303 +    soname_spec='${libname}${release}${shared_ext}$major'
 17.8304 +    ;;
 17.8305 +  esac
 17.8306 +  # HP-UX runs *really* slowly unless shared libraries are mode 555.
 17.8307 +  postinstall_cmds='chmod 555 $lib'
 17.8308 +  ;;
 17.8309 +
 17.8310 +interix3*)
 17.8311 +  version_type=linux
 17.8312 +  need_lib_prefix=no
 17.8313 +  need_version=no
 17.8314 +  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
 17.8315 +  soname_spec='${libname}${release}${shared_ext}$major'
 17.8316 +  dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)'
 17.8317 +  shlibpath_var=LD_LIBRARY_PATH
 17.8318 +  shlibpath_overrides_runpath=no
 17.8319 +  hardcode_into_libs=yes
 17.8320 +  ;;
 17.8321 +
 17.8322 +irix5* | irix6* | nonstopux*)
 17.8323 +  case $host_os in
 17.8324 +    nonstopux*) version_type=nonstopux ;;
 17.8325 +    *)
 17.8326 +	if test "$lt_cv_prog_gnu_ld" = yes; then
 17.8327 +		version_type=linux
 17.8328 +	else
 17.8329 +		version_type=irix
 17.8330 +	fi ;;
 17.8331 +  esac
 17.8332 +  need_lib_prefix=no
 17.8333 +  need_version=no
 17.8334 +  soname_spec='${libname}${release}${shared_ext}$major'
 17.8335 +  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}'
 17.8336 +  case $host_os in
 17.8337 +  irix5* | nonstopux*)
 17.8338 +    libsuff= shlibsuff=
 17.8339 +    ;;
 17.8340 +  *)
 17.8341 +    case $LD in # libtool.m4 will add one of these switches to LD
 17.8342 +    *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ")
 17.8343 +      libsuff= shlibsuff= libmagic=32-bit;;
 17.8344 +    *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ")
 17.8345 +      libsuff=32 shlibsuff=N32 libmagic=N32;;
 17.8346 +    *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ")
 17.8347 +      libsuff=64 shlibsuff=64 libmagic=64-bit;;
 17.8348 +    *) libsuff= shlibsuff= libmagic=never-match;;
 17.8349 +    esac
 17.8350 +    ;;
 17.8351 +  esac
 17.8352 +  shlibpath_var=LD_LIBRARY${shlibsuff}_PATH
 17.8353 +  shlibpath_overrides_runpath=no
 17.8354 +  sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}"
 17.8355 +  sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}"
 17.8356 +  hardcode_into_libs=yes
 17.8357 +  ;;
 17.8358 +
 17.8359 +# No shared lib support for Linux oldld, aout, or coff.
 17.8360 +linux*oldld* | linux*aout* | linux*coff*)
 17.8361 +  dynamic_linker=no
 17.8362 +  ;;
 17.8363 +
 17.8364 +# This must be Linux ELF.
 17.8365 +linux*)
 17.8366 +  version_type=linux
 17.8367 +  need_lib_prefix=no
 17.8368 +  need_version=no
 17.8369 +  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
 17.8370 +  soname_spec='${libname}${release}${shared_ext}$major'
 17.8371 +  finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir'
 17.8372 +  shlibpath_var=LD_LIBRARY_PATH
 17.8373 +  shlibpath_overrides_runpath=no
 17.8374 +  # This implies no fast_install, which is unacceptable.
 17.8375 +  # Some rework will be needed to allow for fast_install
 17.8376 +  # before this can be enabled.
 17.8377 +  hardcode_into_libs=yes
 17.8378 +
 17.8379 +  # Append ld.so.conf contents to the search path
 17.8380 +  if test -f /etc/ld.so.conf; then
 17.8381 +    lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;s/[:,	]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;/^$/d' | tr '\n' ' '`
 17.8382 +    sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra"
 17.8383 +  fi
 17.8384 +
 17.8385 +  # We used to test for /lib/ld.so.1 and disable shared libraries on
 17.8386 +  # powerpc, because MkLinux only supported shared libraries with the
 17.8387 +  # GNU dynamic linker.  Since this was broken with cross compilers,
 17.8388 +  # most powerpc-linux boxes support dynamic linking these days and
 17.8389 +  # people can always --disable-shared, the test was removed, and we
 17.8390 +  # assume the GNU/Linux dynamic linker is in use.
 17.8391 +  dynamic_linker='GNU/Linux ld.so'
 17.8392 +  ;;
 17.8393 +
 17.8394 +netbsdelf*-gnu)
 17.8395 +  version_type=linux
 17.8396 +  need_lib_prefix=no
 17.8397 +  need_version=no
 17.8398 +  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
 17.8399 +  soname_spec='${libname}${release}${shared_ext}$major'
 17.8400 +  shlibpath_var=LD_LIBRARY_PATH
 17.8401 +  shlibpath_overrides_runpath=no
 17.8402 +  hardcode_into_libs=yes
 17.8403 +  dynamic_linker='NetBSD ld.elf_so'
 17.8404 +  ;;
 17.8405 +
 17.8406 +knetbsd*-gnu)
 17.8407 +  version_type=linux
 17.8408 +  need_lib_prefix=no
 17.8409 +  need_version=no
 17.8410 +  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
 17.8411 +  soname_spec='${libname}${release}${shared_ext}$major'
 17.8412 +  shlibpath_var=LD_LIBRARY_PATH
 17.8413 +  shlibpath_overrides_runpath=no
 17.8414 +  hardcode_into_libs=yes
 17.8415 +  dynamic_linker='GNU ld.so'
 17.8416 +  ;;
 17.8417 +
 17.8418 +netbsd*)
 17.8419 +  version_type=sunos
 17.8420 +  need_lib_prefix=no
 17.8421 +  need_version=no
 17.8422 +  if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then
 17.8423 +    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
 17.8424 +    finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir'
 17.8425 +    dynamic_linker='NetBSD (a.out) ld.so'
 17.8426 +  else
 17.8427 +    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
 17.8428 +    soname_spec='${libname}${release}${shared_ext}$major'
 17.8429 +    dynamic_linker='NetBSD ld.elf_so'
 17.8430 +  fi
 17.8431 +  shlibpath_var=LD_LIBRARY_PATH
 17.8432 +  shlibpath_overrides_runpath=yes
 17.8433 +  hardcode_into_libs=yes
 17.8434 +  ;;
 17.8435 +
 17.8436 +newsos6)
 17.8437 +  version_type=linux
 17.8438 +  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
 17.8439 +  shlibpath_var=LD_LIBRARY_PATH
 17.8440 +  shlibpath_overrides_runpath=yes
 17.8441 +  ;;
 17.8442 +
 17.8443 +nto-qnx*)
 17.8444 +  version_type=linux
 17.8445 +  need_lib_prefix=no
 17.8446 +  need_version=no
 17.8447 +  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
 17.8448 +  soname_spec='${libname}${release}${shared_ext}$major'
 17.8449 +  shlibpath_var=LD_LIBRARY_PATH
 17.8450 +  shlibpath_overrides_runpath=yes
 17.8451 +  ;;
 17.8452 +
 17.8453 +openbsd*)
 17.8454 +  version_type=sunos
 17.8455 +  sys_lib_dlsearch_path_spec="/usr/lib"
 17.8456 +  need_lib_prefix=no
 17.8457 +  # Some older versions of OpenBSD (3.3 at least) *do* need versioned libs.
 17.8458 +  case $host_os in
 17.8459 +    openbsd3.3 | openbsd3.3.*) need_version=yes ;;
 17.8460 +    *)                         need_version=no  ;;
 17.8461 +  esac
 17.8462 +  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
 17.8463 +  finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir'
 17.8464 +  shlibpath_var=LD_LIBRARY_PATH
 17.8465 +  if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
 17.8466 +    case $host_os in
 17.8467 +      openbsd2.[89] | openbsd2.[89].*)
 17.8468 +	shlibpath_overrides_runpath=no
 17.8469 +	;;
 17.8470 +      *)
 17.8471 +	shlibpath_overrides_runpath=yes
 17.8472 +	;;
 17.8473 +      esac
 17.8474 +  else
 17.8475 +    shlibpath_overrides_runpath=yes
 17.8476 +  fi
 17.8477 +  ;;
 17.8478 +
 17.8479 +os2*)
 17.8480 +  libname_spec='$name'
 17.8481 +  shrext_cmds=".dll"
 17.8482 +  need_lib_prefix=no
 17.8483 +  library_names_spec='$libname${shared_ext} $libname.a'
 17.8484 +  dynamic_linker='OS/2 ld.exe'
 17.8485 +  shlibpath_var=LIBPATH
 17.8486 +  ;;
 17.8487 +
 17.8488 +osf3* | osf4* | osf5*)
 17.8489 +  version_type=osf
 17.8490 +  need_lib_prefix=no
 17.8491 +  need_version=no
 17.8492 +  soname_spec='${libname}${release}${shared_ext}$major'
 17.8493 +  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
 17.8494 +  shlibpath_var=LD_LIBRARY_PATH
 17.8495 +  sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib"
 17.8496 +  sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec"
 17.8497 +  ;;
 17.8498 +
 17.8499 +solaris*)
 17.8500 +  version_type=linux
 17.8501 +  need_lib_prefix=no
 17.8502 +  need_version=no
 17.8503 +  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
 17.8504 +  soname_spec='${libname}${release}${shared_ext}$major'
 17.8505 +  shlibpath_var=LD_LIBRARY_PATH
 17.8506 +  shlibpath_overrides_runpath=yes
 17.8507 +  hardcode_into_libs=yes
 17.8508 +  # ldd complains unless libraries are executable
 17.8509 +  postinstall_cmds='chmod +x $lib'
 17.8510 +  ;;
 17.8511 +
 17.8512 +sunos4*)
 17.8513 +  version_type=sunos
 17.8514 +  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
 17.8515 +  finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir'
 17.8516 +  shlibpath_var=LD_LIBRARY_PATH
 17.8517 +  shlibpath_overrides_runpath=yes
 17.8518 +  if test "$with_gnu_ld" = yes; then
 17.8519 +    need_lib_prefix=no
 17.8520 +  fi
 17.8521 +  need_version=yes
 17.8522 +  ;;
 17.8523 +
 17.8524 +sysv4 | sysv4.3*)
 17.8525 +  version_type=linux
 17.8526 +  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
 17.8527 +  soname_spec='${libname}${release}${shared_ext}$major'
 17.8528 +  shlibpath_var=LD_LIBRARY_PATH
 17.8529 +  case $host_vendor in
 17.8530 +    sni)
 17.8531 +      shlibpath_overrides_runpath=no
 17.8532 +      need_lib_prefix=no
 17.8533 +      export_dynamic_flag_spec='${wl}-Blargedynsym'
 17.8534 +      runpath_var=LD_RUN_PATH
 17.8535 +      ;;
 17.8536 +    siemens)
 17.8537 +      need_lib_prefix=no
 17.8538 +      ;;
 17.8539 +    motorola)
 17.8540 +      need_lib_prefix=no
 17.8541 +      need_version=no
 17.8542 +      shlibpath_overrides_runpath=no
 17.8543 +      sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib'
 17.8544 +      ;;
 17.8545 +  esac
 17.8546 +  ;;
 17.8547 +
 17.8548 +sysv4*MP*)
 17.8549 +  if test -d /usr/nec ;then
 17.8550 +    version_type=linux
 17.8551 +    library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}'
 17.8552 +    soname_spec='$libname${shared_ext}.$major'
 17.8553 +    shlibpath_var=LD_LIBRARY_PATH
 17.8554 +  fi
 17.8555 +  ;;
 17.8556 +
 17.8557 +sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*)
 17.8558 +  version_type=freebsd-elf
 17.8559 +  need_lib_prefix=no
 17.8560 +  need_version=no
 17.8561 +  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}'
 17.8562 +  soname_spec='${libname}${release}${shared_ext}$major'
 17.8563 +  shlibpath_var=LD_LIBRARY_PATH
 17.8564 +  hardcode_into_libs=yes
 17.8565 +  if test "$with_gnu_ld" = yes; then
 17.8566 +    sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib'
 17.8567 +    shlibpath_overrides_runpath=no
 17.8568 +  else
 17.8569 +    sys_lib_search_path_spec='/usr/ccs/lib /usr/lib'
 17.8570 +    shlibpath_overrides_runpath=yes
 17.8571 +    case $host_os in
 17.8572 +      sco3.2v5*)
 17.8573 +        sys_lib_search_path_spec="$sys_lib_search_path_spec /lib"
 17.8574 +	;;
 17.8575 +    esac
 17.8576 +  fi
 17.8577 +  sys_lib_dlsearch_path_spec='/usr/lib'
 17.8578 +  ;;
 17.8579 +
 17.8580 +uts4*)
 17.8581 +  version_type=linux
 17.8582 +  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
 17.8583 +  soname_spec='${libname}${release}${shared_ext}$major'
 17.8584 +  shlibpath_var=LD_LIBRARY_PATH
 17.8585 +  ;;
 17.8586 +
 17.8587 +*)
 17.8588 +  dynamic_linker=no
 17.8589 +  ;;
 17.8590 +esac
 17.8591 +echo "$as_me:$LINENO: result: $dynamic_linker" >&5
 17.8592 +echo "${ECHO_T}$dynamic_linker" >&6
 17.8593 +test "$dynamic_linker" = no && can_build_shared=no
 17.8594 +
 17.8595 +variables_saved_for_relink="PATH $shlibpath_var $runpath_var"
 17.8596 +if test "$GCC" = yes; then
 17.8597 +  variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH"
 17.8598 +fi
 17.8599 +
 17.8600 +echo "$as_me:$LINENO: checking how to hardcode library paths into programs" >&5
 17.8601 +echo $ECHO_N "checking how to hardcode library paths into programs... $ECHO_C" >&6
 17.8602 +hardcode_action=
 17.8603 +if test -n "$hardcode_libdir_flag_spec" || \
 17.8604 +   test -n "$runpath_var" || \
 17.8605 +   test "X$hardcode_automatic" = "Xyes" ; then
 17.8606 +
 17.8607 +  # We can hardcode non-existant directories.
 17.8608 +  if test "$hardcode_direct" != no &&
 17.8609 +     # If the only mechanism to avoid hardcoding is shlibpath_var, we
 17.8610 +     # have to relink, otherwise we might link with an installed library
 17.8611 +     # when we should be linking with a yet-to-be-installed one
 17.8612 +     ## test "$_LT_AC_TAGVAR(hardcode_shlibpath_var, )" != no &&
 17.8613 +     test "$hardcode_minus_L" != no; then
 17.8614 +    # Linking always hardcodes the temporary library directory.
 17.8615 +    hardcode_action=relink
 17.8616 +  else
 17.8617 +    # We can link without hardcoding, and we can hardcode nonexisting dirs.
 17.8618 +    hardcode_action=immediate
 17.8619 +  fi
 17.8620 +else
 17.8621 +  # We cannot hardcode anything, or else we can only hardcode existing
 17.8622 +  # directories.
 17.8623 +  hardcode_action=unsupported
 17.8624 +fi
 17.8625 +echo "$as_me:$LINENO: result: $hardcode_action" >&5
 17.8626 +echo "${ECHO_T}$hardcode_action" >&6
 17.8627 +
 17.8628 +if test "$hardcode_action" = relink; then
 17.8629 +  # Fast installation is not supported
 17.8630 +  enable_fast_install=no
 17.8631 +elif test "$shlibpath_overrides_runpath" = yes ||
 17.8632 +     test "$enable_shared" = no; then
 17.8633 +  # Fast installation is not necessary
 17.8634 +  enable_fast_install=needless
 17.8635 +fi
 17.8636 +
 17.8637 +striplib=
 17.8638 +old_striplib=
 17.8639 +echo "$as_me:$LINENO: checking whether stripping libraries is possible" >&5
 17.8640 +echo $ECHO_N "checking whether stripping libraries is possible... $ECHO_C" >&6
 17.8641 +if test -n "$STRIP" && $STRIP -V 2>&1 | grep "GNU strip" >/dev/null; then
 17.8642 +  test -z "$old_striplib" && old_striplib="$STRIP --strip-debug"
 17.8643 +  test -z "$striplib" && striplib="$STRIP --strip-unneeded"
 17.8644 +  echo "$as_me:$LINENO: result: yes" >&5
 17.8645 +echo "${ECHO_T}yes" >&6
 17.8646 +else
 17.8647 +# FIXME - insert some real tests, host_os isn't really good enough
 17.8648 +  case $host_os in
 17.8649 +   darwin*)
 17.8650 +       if test -n "$STRIP" ; then
 17.8651 +         striplib="$STRIP -x"
 17.8652 +         echo "$as_me:$LINENO: result: yes" >&5
 17.8653 +echo "${ECHO_T}yes" >&6
 17.8654 +       else
 17.8655 +  echo "$as_me:$LINENO: result: no" >&5
 17.8656 +echo "${ECHO_T}no" >&6
 17.8657 +fi
 17.8658 +       ;;
 17.8659 +   *)
 17.8660 +  echo "$as_me:$LINENO: result: no" >&5
 17.8661 +echo "${ECHO_T}no" >&6
 17.8662 +    ;;
 17.8663 +  esac
 17.8664 +fi
 17.8665 +
 17.8666 +if test "x$enable_dlopen" != xyes; then
 17.8667 +  enable_dlopen=unknown
 17.8668 +  enable_dlopen_self=unknown
 17.8669 +  enable_dlopen_self_static=unknown
 17.8670 +else
 17.8671 +  lt_cv_dlopen=no
 17.8672 +  lt_cv_dlopen_libs=
 17.8673 +
 17.8674 +  case $host_os in
 17.8675 +  beos*)
 17.8676 +    lt_cv_dlopen="load_add_on"
 17.8677 +    lt_cv_dlopen_libs=
 17.8678 +    lt_cv_dlopen_self=yes
 17.8679 +    ;;
 17.8680 +
 17.8681 +  mingw* | pw32*)
 17.8682 +    lt_cv_dlopen="LoadLibrary"
 17.8683 +    lt_cv_dlopen_libs=
 17.8684 +   ;;
 17.8685 +
 17.8686 +  cygwin*)
 17.8687 +    lt_cv_dlopen="dlopen"
 17.8688 +    lt_cv_dlopen_libs=
 17.8689 +   ;;
 17.8690 +
 17.8691 +  darwin*)
 17.8692 +  # if libdl is installed we need to link against it
 17.8693 +    echo "$as_me:$LINENO: checking for dlopen in -ldl" >&5
 17.8694 +echo $ECHO_N "checking for dlopen in -ldl... $ECHO_C" >&6
 17.8695 +if test "${ac_cv_lib_dl_dlopen+set}" = set; then
 17.8696 +  echo $ECHO_N "(cached) $ECHO_C" >&6
 17.8697 +else
 17.8698 +  ac_check_lib_save_LIBS=$LIBS
 17.8699 +LIBS="-ldl  $LIBS"
 17.8700 +cat >conftest.$ac_ext <<_ACEOF
 17.8701 +/* confdefs.h.  */
 17.8702 +_ACEOF
 17.8703 +cat confdefs.h >>conftest.$ac_ext
 17.8704 +cat >>conftest.$ac_ext <<_ACEOF
 17.8705 +/* end confdefs.h.  */
 17.8706 +
 17.8707 +/* Override any gcc2 internal prototype to avoid an error.  */
 17.8708 +#ifdef __cplusplus
 17.8709 +extern "C"
 17.8710 +#endif
 17.8711 +/* We use char because int might match the return type of a gcc2
 17.8712 +   builtin and then its argument prototype would still apply.  */
 17.8713 +char dlopen ();
 17.8714 +int
 17.8715 +main ()
 17.8716 +{
 17.8717 +dlopen ();
 17.8718 +  ;
 17.8719 +  return 0;
 17.8720 +}
 17.8721 +_ACEOF
 17.8722 +rm -f conftest.$ac_objext conftest$ac_exeext
 17.8723 +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
 17.8724 +  (eval $ac_link) 2>conftest.er1
 17.8725 +  ac_status=$?
 17.8726 +  grep -v '^ *+' conftest.er1 >conftest.err
 17.8727 +  rm -f conftest.er1
 17.8728 +  cat conftest.err >&5
 17.8729 +  echo "$as_me:$LINENO: \$? = $ac_status" >&5
 17.8730 +  (exit $ac_status); } &&
 17.8731 +	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
 17.8732 +  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
 17.8733 +  (eval $ac_try) 2>&5
 17.8734 +  ac_status=$?
 17.8735 +  echo "$as_me:$LINENO: \$? = $ac_status" >&5
 17.8736 +  (exit $ac_status); }; } &&
 17.8737 +	 { ac_try='test -s conftest$ac_exeext'
 17.8738 +  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
 17.8739 +  (eval $ac_try) 2>&5
 17.8740 +  ac_status=$?
 17.8741 +  echo "$as_me:$LINENO: \$? = $ac_status" >&5
 17.8742 +  (exit $ac_status); }; }; then
 17.8743 +  ac_cv_lib_dl_dlopen=yes
 17.8744 +else
 17.8745 +  echo "$as_me: failed program was:" >&5
 17.8746 +sed 's/^/| /' conftest.$ac_ext >&5
 17.8747 +
 17.8748 +ac_cv_lib_dl_dlopen=no
 17.8749 +fi
 17.8750 +rm -f conftest.err conftest.$ac_objext \
 17.8751 +      conftest$ac_exeext conftest.$ac_ext
 17.8752 +LIBS=$ac_check_lib_save_LIBS
 17.8753 +fi
 17.8754 +echo "$as_me:$LINENO: result: $ac_cv_lib_dl_dlopen" >&5
 17.8755 +echo "${ECHO_T}$ac_cv_lib_dl_dlopen" >&6
 17.8756 +if test $ac_cv_lib_dl_dlopen = yes; then
 17.8757 +  lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"
 17.8758 +else
 17.8759 +
 17.8760 +    lt_cv_dlopen="dyld"
 17.8761 +    lt_cv_dlopen_libs=
 17.8762 +    lt_cv_dlopen_self=yes
 17.8763 +
 17.8764 +fi
 17.8765 +
 17.8766 +   ;;
 17.8767 +
 17.8768 +  *)
 17.8769 +    echo "$as_me:$LINENO: checking for shl_load" >&5
 17.8770 +echo $ECHO_N "checking for shl_load... $ECHO_C" >&6
 17.8771 +if test "${ac_cv_func_shl_load+set}" = set; then
 17.8772 +  echo $ECHO_N "(cached) $ECHO_C" >&6
 17.8773 +else
 17.8774 +  cat >conftest.$ac_ext <<_ACEOF
 17.8775 +/* confdefs.h.  */
 17.8776 +_ACEOF
 17.8777 +cat confdefs.h >>conftest.$ac_ext
 17.8778 +cat >>conftest.$ac_ext <<_ACEOF
 17.8779 +/* end confdefs.h.  */
 17.8780 +/* Define shl_load to an innocuous variant, in case <limits.h> declares shl_load.
 17.8781 +   For example, HP-UX 11i <limits.h> declares gettimeofday.  */
 17.8782 +#define shl_load innocuous_shl_load
 17.8783 +
 17.8784 +/* System header to define __stub macros and hopefully few prototypes,
 17.8785 +    which can conflict with char shl_load (); below.
 17.8786 +    Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
 17.8787 +    <limits.h> exists even on freestanding compilers.  */
 17.8788 +
 17.8789 +#ifdef __STDC__
 17.8790 +# include <limits.h>
 17.8791 +#else
 17.8792 +# include <assert.h>
 17.8793 +#endif
 17.8794 +
 17.8795 +#undef shl_load
 17.8796 +
 17.8797 +/* Override any gcc2 internal prototype to avoid an error.  */
 17.8798 +#ifdef __cplusplus
 17.8799 +extern "C"
 17.8800 +{
 17.8801 +#endif
 17.8802 +/* We use char because int might match the return type of a gcc2
 17.8803 +   builtin and then its argument prototype would still apply.  */
 17.8804 +char shl_load ();
 17.8805 +/* The GNU C library defines this for functions which it implements
 17.8806 +    to always fail with ENOSYS.  Some functions are actually named
 17.8807 +    something starting with __ and the normal name is an alias.  */
 17.8808 +#if defined (__stub_shl_load) || defined (__stub___shl_load)
 17.8809 +choke me
 17.8810 +#else
 17.8811 +char (*f) () = shl_load;
 17.8812 +#endif
 17.8813 +#ifdef __cplusplus
 17.8814 +}
 17.8815 +#endif
 17.8816 +
 17.8817 +int
 17.8818 +main ()
 17.8819 +{
 17.8820 +return f != shl_load;
 17.8821 +  ;
 17.8822 +  return 0;
 17.8823 +}
 17.8824 +_ACEOF
 17.8825 +rm -f conftest.$ac_objext conftest$ac_exeext
 17.8826 +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
 17.8827 +  (eval $ac_link) 2>conftest.er1
 17.8828 +  ac_status=$?
 17.8829 +  grep -v '^ *+' conftest.er1 >conftest.err
 17.8830 +  rm -f conftest.er1
 17.8831 +  cat conftest.err >&5
 17.8832 +  echo "$as_me:$LINENO: \$? = $ac_status" >&5
 17.8833 +  (exit $ac_status); } &&
 17.8834 +	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
 17.8835 +  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
 17.8836 +  (eval $ac_try) 2>&5
 17.8837 +  ac_status=$?
 17.8838 +  echo "$as_me:$LINENO: \$? = $ac_status" >&5
 17.8839 +  (exit $ac_status); }; } &&
 17.8840 +	 { ac_try='test -s conftest$ac_exeext'
 17.8841 +  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
 17.8842 +  (eval $ac_try) 2>&5
 17.8843 +  ac_status=$?
 17.8844 +  echo "$as_me:$LINENO: \$? = $ac_status" >&5
 17.8845 +  (exit $ac_status); }; }; then
 17.8846 +  ac_cv_func_shl_load=yes
 17.8847 +else
 17.8848 +  echo "$as_me: failed program was:" >&5
 17.8849 +sed 's/^/| /' conftest.$ac_ext >&5
 17.8850 +
 17.8851 +ac_cv_func_shl_load=no
 17.8852 +fi
 17.8853 +rm -f conftest.err conftest.$ac_objext \
 17.8854 +      conftest$ac_exeext conftest.$ac_ext
 17.8855 +fi
 17.8856 +echo "$as_me:$LINENO: result: $ac_cv_func_shl_load" >&5
 17.8857 +echo "${ECHO_T}$ac_cv_func_shl_load" >&6
 17.8858 +if test $ac_cv_func_shl_load = yes; then
 17.8859 +  lt_cv_dlopen="shl_load"
 17.8860 +else
 17.8861 +  echo "$as_me:$LINENO: checking for shl_load in -ldld" >&5
 17.8862 +echo $ECHO_N "checking for shl_load in -ldld... $ECHO_C" >&6
 17.8863 +if test "${ac_cv_lib_dld_shl_load+set}" = set; then
 17.8864 +  echo $ECHO_N "(cached) $ECHO_C" >&6
 17.8865 +else
 17.8866 +  ac_check_lib_save_LIBS=$LIBS
 17.8867 +LIBS="-ldld  $LIBS"
 17.8868 +cat >conftest.$ac_ext <<_ACEOF
 17.8869 +/* confdefs.h.  */
 17.8870 +_ACEOF
 17.8871 +cat confdefs.h >>conftest.$ac_ext
 17.8872 +cat >>conftest.$ac_ext <<_ACEOF
 17.8873 +/* end confdefs.h.  */
 17.8874 +
 17.8875 +/* Override any gcc2 internal prototype to avoid an error.  */
 17.8876 +#ifdef __cplusplus
 17.8877 +extern "C"
 17.8878 +#endif
 17.8879 +/* We use char because int might match the return type of a gcc2
 17.8880 +   builtin and then its argument prototype would still apply.  */
 17.8881 +char shl_load ();
 17.8882 +int
 17.8883 +main ()
 17.8884 +{
 17.8885 +shl_load ();
 17.8886 +  ;
 17.8887 +  return 0;
 17.8888 +}
 17.8889 +_ACEOF
 17.8890 +rm -f conftest.$ac_objext conftest$ac_exeext
 17.8891 +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
 17.8892 +  (eval $ac_link) 2>conftest.er1
 17.8893 +  ac_status=$?
 17.8894 +  grep -v '^ *+' conftest.er1 >conftest.err
 17.8895 +  rm -f conftest.er1
 17.8896 +  cat conftest.err >&5
 17.8897 +  echo "$as_me:$LINENO: \$? = $ac_status" >&5
 17.8898 +  (exit $ac_status); } &&
 17.8899 +	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
 17.8900 +  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
 17.8901 +  (eval $ac_try) 2>&5
 17.8902 +  ac_status=$?
 17.8903 +  echo "$as_me:$LINENO: \$? = $ac_status" >&5
 17.8904 +  (exit $ac_status); }; } &&
 17.8905 +	 { ac_try='test -s conftest$ac_exeext'
 17.8906 +  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
 17.8907 +  (eval $ac_try) 2>&5
 17.8908 +  ac_status=$?
 17.8909 +  echo "$as_me:$LINENO: \$? = $ac_status" >&5
 17.8910 +  (exit $ac_status); }; }; then
 17.8911 +  ac_cv_lib_dld_shl_load=yes
 17.8912 +else
 17.8913 +  echo "$as_me: failed program was:" >&5
 17.8914 +sed 's/^/| /' conftest.$ac_ext >&5
 17.8915 +
 17.8916 +ac_cv_lib_dld_shl_load=no
 17.8917 +fi
 17.8918 +rm -f conftest.err conftest.$ac_objext \
 17.8919 +      conftest$ac_exeext conftest.$ac_ext
 17.8920 +LIBS=$ac_check_lib_save_LIBS
 17.8921 +fi
 17.8922 +echo "$as_me:$LINENO: result: $ac_cv_lib_dld_shl_load" >&5
 17.8923 +echo "${ECHO_T}$ac_cv_lib_dld_shl_load" >&6
 17.8924 +if test $ac_cv_lib_dld_shl_load = yes; then
 17.8925 +  lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-dld"
 17.8926 +else
 17.8927 +  echo "$as_me:$LINENO: checking for dlopen" >&5
 17.8928 +echo $ECHO_N "checking for dlopen... $ECHO_C" >&6
 17.8929 +if test "${ac_cv_func_dlopen+set}" = set; then
 17.8930 +  echo $ECHO_N "(cached) $ECHO_C" >&6
 17.8931 +else
 17.8932 +  cat >conftest.$ac_ext <<_ACEOF
 17.8933 +/* confdefs.h.  */
 17.8934 +_ACEOF
 17.8935 +cat confdefs.h >>conftest.$ac_ext
 17.8936 +cat >>conftest.$ac_ext <<_ACEOF
 17.8937 +/* end confdefs.h.  */
 17.8938 +/* Define dlopen to an innocuous variant, in case <limits.h> declares dlopen.
 17.8939 +   For example, HP-UX 11i <limits.h> declares gettimeofday.  */
 17.8940 +#define dlopen innocuous_dlopen
 17.8941 +
 17.8942 +/* System header to define __stub macros and hopefully few prototypes,
 17.8943 +    which can conflict with char dlopen (); below.
 17.8944 +    Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
 17.8945 +    <limits.h> exists even on freestanding compilers.  */
 17.8946 +
 17.8947 +#ifdef __STDC__
 17.8948 +# include <limits.h>
 17.8949 +#else
 17.8950 +# include <assert.h>
 17.8951 +#endif
 17.8952 +
 17.8953 +#undef dlopen
 17.8954 +
 17.8955 +/* Override any gcc2 internal prototype to avoid an error.  */
 17.8956 +#ifdef __cplusplus
 17.8957 +extern "C"
 17.8958 +{
 17.8959 +#endif
 17.8960 +/* We use char because int might match the return type of a gcc2
 17.8961 +   builtin and then its argument prototype would still apply.  */
 17.8962 +char dlopen ();
 17.8963 +/* The GNU C library defines this for functions which it implements
 17.8964 +    to always fail with ENOSYS.  Some functions are actually named
 17.8965 +    something starting with __ and the normal name is an alias.  */
 17.8966 +#if defined (__stub_dlopen) || defined (__stub___dlopen)
 17.8967 +choke me
 17.8968 +#else
 17.8969 +char (*f) () = dlopen;
 17.8970 +#endif
 17.8971 +#ifdef __cplusplus
 17.8972 +}
 17.8973 +#endif
 17.8974 +
 17.8975 +int
 17.8976 +main ()
 17.8977 +{
 17.8978 +return f != dlopen;
 17.8979 +  ;
 17.8980 +  return 0;
 17.8981 +}
 17.8982 +_ACEOF
 17.8983 +rm -f conftest.$ac_objext conftest$ac_exeext
 17.8984 +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
 17.8985 +  (eval $ac_link) 2>conftest.er1
 17.8986 +  ac_status=$?
 17.8987 +  grep -v '^ *+' conftest.er1 >conftest.err
 17.8988 +  rm -f conftest.er1
 17.8989 +  cat conftest.err >&5
 17.8990 +  echo "$as_me:$LINENO: \$? = $ac_status" >&5
 17.8991 +  (exit $ac_status); } &&
 17.8992 +	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
 17.8993 +  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
 17.8994 +  (eval $ac_try) 2>&5
 17.8995 +  ac_status=$?
 17.8996 +  echo "$as_me:$LINENO: \$? = $ac_status" >&5
 17.8997 +  (exit $ac_status); }; } &&
 17.8998 +	 { ac_try='test -s conftest$ac_exeext'
 17.8999 +  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
 17.9000 +  (eval $ac_try) 2>&5
 17.9001 +  ac_status=$?
 17.9002 +  echo "$as_me:$LINENO: \$? = $ac_status" >&5
 17.9003 +  (exit $ac_status); }; }; then
 17.9004 +  ac_cv_func_dlopen=yes
 17.9005 +else
 17.9006 +  echo "$as_me: failed program was:" >&5
 17.9007 +sed 's/^/| /' conftest.$ac_ext >&5
 17.9008 +
 17.9009 +ac_cv_func_dlopen=no
 17.9010 +fi
 17.9011 +rm -f conftest.err conftest.$ac_objext \
 17.9012 +      conftest$ac_exeext conftest.$ac_ext
 17.9013 +fi
 17.9014 +echo "$as_me:$LINENO: result: $ac_cv_func_dlopen" >&5
 17.9015 +echo "${ECHO_T}$ac_cv_func_dlopen" >&6
 17.9016 +if test $ac_cv_func_dlopen = yes; then
 17.9017 +  lt_cv_dlopen="dlopen"
 17.9018 +else
 17.9019 +  echo "$as_me:$LINENO: checking for dlopen in -ldl" >&5
 17.9020 +echo $ECHO_N "checking for dlopen in -ldl... $ECHO_C" >&6
 17.9021 +if test "${ac_cv_lib_dl_dlopen+set}" = set; then
 17.9022 +  echo $ECHO_N "(cached) $ECHO_C" >&6
 17.9023 +else
 17.9024 +  ac_check_lib_save_LIBS=$LIBS
 17.9025 +LIBS="-ldl  $LIBS"
 17.9026 +cat >conftest.$ac_ext <<_ACEOF
 17.9027 +/* confdefs.h.  */
 17.9028 +_ACEOF
 17.9029 +cat confdefs.h >>conftest.$ac_ext
 17.9030 +cat >>conftest.$ac_ext <<_ACEOF
 17.9031 +/* end confdefs.h.  */
 17.9032 +
 17.9033 +/* Override any gcc2 internal prototype to avoid an error.  */
 17.9034 +#ifdef __cplusplus
 17.9035 +extern "C"
 17.9036 +#endif
 17.9037 +/* We use char because int might match the return type of a gcc2
 17.9038 +   builtin and then its argument prototype would still apply.  */
 17.9039 +char dlopen ();
 17.9040 +int
 17.9041 +main ()
 17.9042 +{
 17.9043 +dlopen ();
 17.9044 +  ;
 17.9045 +  return 0;
 17.9046 +}
 17.9047 +_ACEOF
 17.9048 +rm -f conftest.$ac_objext conftest$ac_exeext
 17.9049 +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
 17.9050 +  (eval $ac_link) 2>conftest.er1
 17.9051 +  ac_status=$?
 17.9052 +  grep -v '^ *+' conftest.er1 >conftest.err
 17.9053 +  rm -f conftest.er1
 17.9054 +  cat conftest.err >&5
 17.9055 +  echo "$as_me:$LINENO: \$? = $ac_status" >&5
 17.9056 +  (exit $ac_status); } &&
 17.9057 +	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
 17.9058 +  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
 17.9059 +  (eval $ac_try) 2>&5
 17.9060 +  ac_status=$?
 17.9061 +  echo "$as_me:$LINENO: \$? = $ac_status" >&5
 17.9062 +  (exit $ac_status); }; } &&
 17.9063 +	 { ac_try='test -s conftest$ac_exeext'
 17.9064 +  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
 17.9065 +  (eval $ac_try) 2>&5
 17.9066 +  ac_status=$?
 17.9067 +  echo "$as_me:$LINENO: \$? = $ac_status" >&5
 17.9068 +  (exit $ac_status); }; }; then
 17.9069 +  ac_cv_lib_dl_dlopen=yes
 17.9070 +else
 17.9071 +  echo "$as_me: failed program was:" >&5
 17.9072 +sed 's/^/| /' conftest.$ac_ext >&5
 17.9073 +
 17.9074 +ac_cv_lib_dl_dlopen=no
 17.9075 +fi
 17.9076 +rm -f conftest.err conftest.$ac_objext \
 17.9077 +      conftest$ac_exeext conftest.$ac_ext
 17.9078 +LIBS=$ac_check_lib_save_LIBS
 17.9079 +fi
 17.9080 +echo "$as_me:$LINENO: result: $ac_cv_lib_dl_dlopen" >&5
 17.9081 +echo "${ECHO_T}$ac_cv_lib_dl_dlopen" >&6
 17.9082 +if test $ac_cv_lib_dl_dlopen = yes; then
 17.9083 +  lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"
 17.9084 +else
 17.9085 +  echo "$as_me:$LINENO: checking for dlopen in -lsvld" >&5
 17.9086 +echo $ECHO_N "checking for dlopen in -lsvld... $ECHO_C" >&6
 17.9087 +if test "${ac_cv_lib_svld_dlopen+set}" = set; then
 17.9088 +  echo $ECHO_N "(cached) $ECHO_C" >&6
 17.9089 +else
 17.9090 +  ac_check_lib_save_LIBS=$LIBS
 17.9091 +LIBS="-lsvld  $LIBS"
 17.9092 +cat >conftest.$ac_ext <<_ACEOF
 17.9093 +/* confdefs.h.  */
 17.9094 +_ACEOF
 17.9095 +cat confdefs.h >>conftest.$ac_ext
 17.9096 +cat >>conftest.$ac_ext <<_ACEOF
 17.9097 +/* end confdefs.h.  */
 17.9098 +
 17.9099 +/* Override any gcc2 internal prototype to avoid an error.  */
 17.9100 +#ifdef __cplusplus
 17.9101 +extern "C"
 17.9102 +#endif
 17.9103 +/* We use char because int might match the return type of a gcc2
 17.9104 +   builtin and then its argument prototype would still apply.  */
 17.9105 +char dlopen ();
 17.9106 +int
 17.9107 +main ()
 17.9108 +{
 17.9109 +dlopen ();
 17.9110 +  ;
 17.9111 +  return 0;
 17.9112 +}
 17.9113 +_ACEOF
 17.9114 +rm -f conftest.$ac_objext conftest$ac_exeext
 17.9115 +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
 17.9116 +  (eval $ac_link) 2>conftest.er1
 17.9117 +  ac_status=$?
 17.9118 +  grep -v '^ *+' conftest.er1 >conftest.err
 17.9119 +  rm -f conftest.er1
 17.9120 +  cat conftest.err >&5
 17.9121 +  echo "$as_me:$LINENO: \$? = $ac_status" >&5
 17.9122 +  (exit $ac_status); } &&
 17.9123 +	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
 17.9124 +  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
 17.9125 +  (eval $ac_try) 2>&5
 17.9126 +  ac_status=$?
 17.9127 +  echo "$as_me:$LINENO: \$? = $ac_status" >&5
 17.9128 +  (exit $ac_status); }; } &&
 17.9129 +	 { ac_try='test -s conftest$ac_exeext'
 17.9130 +  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
 17.9131 +  (eval $ac_try) 2>&5
 17.9132 +  ac_status=$?
 17.9133 +  echo "$as_me:$LINENO: \$? = $ac_status" >&5
 17.9134 +  (exit $ac_status); }; }; then
 17.9135 +  ac_cv_lib_svld_dlopen=yes
 17.9136 +else
 17.9137 +  echo "$as_me: failed program was:" >&5
 17.9138 +sed 's/^/| /' conftest.$ac_ext >&5
 17.9139 +
 17.9140 +ac_cv_lib_svld_dlopen=no
 17.9141 +fi
 17.9142 +rm -f conftest.err conftest.$ac_objext \
 17.9143 +      conftest$ac_exeext conftest.$ac_ext
 17.9144 +LIBS=$ac_check_lib_save_LIBS
 17.9145 +fi
 17.9146 +echo "$as_me:$LINENO: result: $ac_cv_lib_svld_dlopen" >&5
 17.9147 +echo "${ECHO_T}$ac_cv_lib_svld_dlopen" >&6
 17.9148 +if test $ac_cv_lib_svld_dlopen = yes; then
 17.9149 +  lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld"
 17.9150 +else
 17.9151 +  echo "$as_me:$LINENO: checking for dld_link in -ldld" >&5
 17.9152 +echo $ECHO_N "checking for dld_link in -ldld... $ECHO_C" >&6
 17.9153 +if test "${ac_cv_lib_dld_dld_link+set}" = set; then
 17.9154 +  echo $ECHO_N "(cached) $ECHO_C" >&6
 17.9155 +else
 17.9156 +  ac_check_lib_save_LIBS=$LIBS
 17.9157 +LIBS="-ldld  $LIBS"
 17.9158 +cat >conftest.$ac_ext <<_ACEOF
 17.9159 +/* confdefs.h.  */
 17.9160 +_ACEOF
 17.9161 +cat confdefs.h >>conftest.$ac_ext
 17.9162 +cat >>conftest.$ac_ext <<_ACEOF
 17.9163 +/* end confdefs.h.  */
 17.9164 +
 17.9165 +/* Override any gcc2 internal prototype to avoid an error.  */
 17.9166 +#ifdef __cplusplus
 17.9167 +extern "C"
 17.9168 +#endif
 17.9169 +/* We use char because int might match the return type of a gcc2
 17.9170 +   builtin and then its argument prototype would still apply.  */
 17.9171 +char dld_link ();
 17.9172 +int
 17.9173 +main ()
 17.9174 +{
 17.9175 +dld_link ();
 17.9176 +  ;
 17.9177 +  return 0;
 17.9178 +}
 17.9179 +_ACEOF
 17.9180 +rm -f conftest.$ac_objext conftest$ac_exeext
 17.9181 +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
 17.9182 +  (eval $ac_link) 2>conftest.er1
 17.9183 +  ac_status=$?
 17.9184 +  grep -v '^ *+' conftest.er1 >conftest.err
 17.9185 +  rm -f conftest.er1
 17.9186 +  cat conftest.err >&5
 17.9187 +  echo "$as_me:$LINENO: \$? = $ac_status" >&5
 17.9188 +  (exit $ac_status); } &&
 17.9189 +	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
 17.9190 +  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
 17.9191 +  (eval $ac_try) 2>&5
 17.9192 +  ac_status=$?
 17.9193 +  echo "$as_me:$LINENO: \$? = $ac_status" >&5
 17.9194 +  (exit $ac_status); }; } &&
 17.9195 +	 { ac_try='test -s conftest$ac_exeext'
 17.9196 +  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
 17.9197 +  (eval $ac_try) 2>&5
 17.9198 +  ac_status=$?
 17.9199 +  echo "$as_me:$LINENO: \$? = $ac_status" >&5
 17.9200 +  (exit $ac_status); }; }; then
 17.9201 +  ac_cv_lib_dld_dld_link=yes
 17.9202 +else
 17.9203 +  echo "$as_me: failed program was:" >&5
 17.9204 +sed 's/^/| /' conftest.$ac_ext >&5
 17.9205 +
 17.9206 +ac_cv_lib_dld_dld_link=no
 17.9207 +fi
 17.9208 +rm -f conftest.err conftest.$ac_objext \
 17.9209 +      conftest$ac_exeext conftest.$ac_ext
 17.9210 +LIBS=$ac_check_lib_save_LIBS
 17.9211 +fi
 17.9212 +echo "$as_me:$LINENO: result: $ac_cv_lib_dld_dld_link" >&5
 17.9213 +echo "${ECHO_T}$ac_cv_lib_dld_dld_link" >&6
 17.9214 +if test $ac_cv_lib_dld_dld_link = yes; then
 17.9215 +  lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-dld"
 17.9216 +fi
 17.9217 +
 17.9218 +
 17.9219 +fi
 17.9220 +
 17.9221 +
 17.9222 +fi
 17.9223 +
 17.9224 +
 17.9225 +fi
 17.9226 +
 17.9227 +
 17.9228 +fi
 17.9229 +
 17.9230 +
 17.9231 +fi
 17.9232 +
 17.9233 +    ;;
 17.9234 +  esac
 17.9235 +
 17.9236 +  if test "x$lt_cv_dlopen" != xno; then
 17.9237 +    enable_dlopen=yes
 17.9238 +  else
 17.9239 +    enable_dlopen=no
 17.9240 +  fi
 17.9241 +
 17.9242 +  case $lt_cv_dlopen in
 17.9243 +  dlopen)
 17.9244 +    save_CPPFLAGS="$CPPFLAGS"
 17.9245 +    test "x$ac_cv_header_dlfcn_h" = xyes && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H"
 17.9246 +
 17.9247 +    save_LDFLAGS="$LDFLAGS"
 17.9248 +    wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\"
 17.9249 +
 17.9250 +    save_LIBS="$LIBS"
 17.9251 +    LIBS="$lt_cv_dlopen_libs $LIBS"
 17.9252 +
 17.9253 +    echo "$as_me:$LINENO: checking whether a program can dlopen itself" >&5
 17.9254 +echo $ECHO_N "checking whether a program can dlopen itself... $ECHO_C" >&6
 17.9255 +if test "${lt_cv_dlopen_self+set}" = set; then
 17.9256 +  echo $ECHO_N "(cached) $ECHO_C" >&6
 17.9257 +else
 17.9258 +  	  if test "$cross_compiling" = yes; then :
 17.9259 +  lt_cv_dlopen_self=cross
 17.9260 +else
 17.9261 +  lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
 17.9262 +  lt_status=$lt_dlunknown
 17.9263 +  cat > conftest.$ac_ext <<EOF
 17.9264 +#line 9261 "configure"
 17.9265 +#include "confdefs.h"
 17.9266 +
 17.9267 +#if HAVE_DLFCN_H
 17.9268 +#include <dlfcn.h>
 17.9269 +#endif
 17.9270 +
 17.9271 +#include <stdio.h>
 17.9272 +
 17.9273 +#ifdef RTLD_GLOBAL
 17.9274 +#  define LT_DLGLOBAL		RTLD_GLOBAL
 17.9275 +#else
 17.9276 +#  ifdef DL_GLOBAL
 17.9277 +#    define LT_DLGLOBAL		DL_GLOBAL
 17.9278 +#  else
 17.9279 +#    define LT_DLGLOBAL		0
 17.9280 +#  endif
 17.9281 +#endif
 17.9282 +
 17.9283 +/* We may have to define LT_DLLAZY_OR_NOW in the command line if we
 17.9284 +   find out it does not work in some platform. */
 17.9285 +#ifndef LT_DLLAZY_OR_NOW
 17.9286 +#  ifdef RTLD_LAZY
 17.9287 +#    define LT_DLLAZY_OR_NOW		RTLD_LAZY
 17.9288 +#  else
 17.9289 +#    ifdef DL_LAZY
 17.9290 +#      define LT_DLLAZY_OR_NOW		DL_LAZY
 17.9291 +#    else
 17.9292 +#      ifdef RTLD_NOW
 17.9293 +#        define LT_DLLAZY_OR_NOW	RTLD_NOW
 17.9294 +#      else
 17.9295 +#        ifdef DL_NOW
 17.9296 +#          define LT_DLLAZY_OR_NOW	DL_NOW
 17.9297 +#        else
 17.9298 +#          define LT_DLLAZY_OR_NOW	0
 17.9299 +#        endif
 17.9300 +#      endif
 17.9301 +#    endif
 17.9302 +#  endif
 17.9303 +#endif
 17.9304 +
 17.9305 +#ifdef __cplusplus
 17.9306 +extern "C" void exit (int);
 17.9307 +#endif
 17.9308 +
 17.9309 +void fnord() { int i=42;}
 17.9310 +int main ()
 17.9311 +{
 17.9312 +  void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW);
 17.9313 +  int status = $lt_dlunknown;
 17.9314 +
 17.9315 +  if (self)
 17.9316 +    {
 17.9317 +      if (dlsym (self,"fnord"))       status = $lt_dlno_uscore;
 17.9318 +      else if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore;
 17.9319 +      /* dlclose (self); */
 17.9320 +    }
 17.9321 +  else
 17.9322 +    puts (dlerror ());
 17.9323 +
 17.9324 +    exit (status);
 17.9325 +}
 17.9326 +EOF
 17.9327 +  if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
 17.9328 +  (eval $ac_link) 2>&5
 17.9329 +  ac_status=$?
 17.9330 +  echo "$as_me:$LINENO: \$? = $ac_status" >&5
 17.9331 +  (exit $ac_status); } && test -s conftest${ac_exeext} 2>/dev/null; then
 17.9332 +    (./conftest; exit; ) >&5 2>/dev/null
 17.9333 +    lt_status=$?
 17.9334 +    case x$lt_status in
 17.9335 +      x$lt_dlno_uscore) lt_cv_dlopen_self=yes ;;
 17.9336 +      x$lt_dlneed_uscore) lt_cv_dlopen_self=yes ;;
 17.9337 +      x$lt_dlunknown|x*) lt_cv_dlopen_self=no ;;
 17.9338 +    esac
 17.9339 +  else :
 17.9340 +    # compilation failed
 17.9341 +    lt_cv_dlopen_self=no
 17.9342 +  fi
 17.9343 +fi
 17.9344 +rm -fr conftest*
 17.9345 +
 17.9346 +
 17.9347 +fi
 17.9348 +echo "$as_me:$LINENO: result: $lt_cv_dlopen_self" >&5
 17.9349 +echo "${ECHO_T}$lt_cv_dlopen_self" >&6
 17.9350 +
 17.9351 +    if test "x$lt_cv_dlopen_self" = xyes; then
 17.9352 +      wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $lt_prog_compiler_static\"
 17.9353 +      echo "$as_me:$LINENO: checking whether a statically linked program can dlopen itself" >&5
 17.9354 +echo $ECHO_N "checking whether a statically linked program can dlopen itself... $ECHO_C" >&6
 17.9355 +if test "${lt_cv_dlopen_self_static+set}" = set; then
 17.9356 +  echo $ECHO_N "(cached) $ECHO_C" >&6
 17.9357 +else
 17.9358 +  	  if test "$cross_compiling" = yes; then :
 17.9359 +  lt_cv_dlopen_self_static=cross
 17.9360 +else
 17.9361 +  lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
 17.9362 +  lt_status=$lt_dlunknown
 17.9363 +  cat > conftest.$ac_ext <<EOF
 17.9364 +#line 9361 "configure"
 17.9365 +#include "confdefs.h"
 17.9366 +
 17.9367 +#if HAVE_DLFCN_H
 17.9368 +#include <dlfcn.h>
 17.9369 +#endif
 17.9370 +
 17.9371 +#include <stdio.h>
 17.9372 +
 17.9373 +#ifdef RTLD_GLOBAL
 17.9374 +#  define LT_DLGLOBAL		RTLD_GLOBAL
 17.9375 +#else
 17.9376 +#  ifdef DL_GLOBAL
 17.9377 +#    define LT_DLGLOBAL		DL_GLOBAL
 17.9378 +#  else
 17.9379 +#    define LT_DLGLOBAL		0
 17.9380 +#  endif
 17.9381 +#endif
 17.9382 +
 17.9383 +/* We may have to define LT_DLLAZY_OR_NOW in the command line if we
 17.9384 +   find out it does not work in some platform. */
 17.9385 +#ifndef LT_DLLAZY_OR_NOW
 17.9386 +#  ifdef RTLD_LAZY
 17.9387 +#    define LT_DLLAZY_OR_NOW		RTLD_LAZY
 17.9388 +#  else
 17.9389 +#    ifdef DL_LAZY
 17.9390 +#      define LT_DLLAZY_OR_NOW		DL_LAZY
 17.9391 +#    else
 17.9392 +#      ifdef RTLD_NOW
 17.9393 +#        define LT_DLLAZY_OR_NOW	RTLD_NOW
 17.9394 +#      else
 17.9395 +#        ifdef DL_NOW
 17.9396 +#          define LT_DLLAZY_OR_NOW	DL_NOW
 17.9397 +#        else
 17.9398 +#          define LT_DLLAZY_OR_NOW	0
 17.9399 +#        endif
 17.9400 +#      endif
 17.9401 +#    endif
 17.9402 +#  endif
 17.9403 +#endif
 17.9404 +
 17.9405 +#ifdef __cplusplus
 17.9406 +extern "C" void exit (int);
 17.9407 +#endif
 17.9408 +
 17.9409 +void fnord() { int i=42;}
 17.9410 +int main ()
 17.9411 +{
 17.9412 +  void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW);
 17.9413 +  int status = $lt_dlunknown;
 17.9414 +
 17.9415 +  if (self)
 17.9416 +    {
 17.9417 +      if (dlsym (self,"fnord"))       status = $lt_dlno_uscore;
 17.9418 +      else if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore;
 17.9419 +      /* dlclose (self); */
 17.9420 +    }
 17.9421 +  else
 17.9422 +    puts (dlerror ());
 17.9423 +
 17.9424 +    exit (status);
 17.9425 +}
 17.9426 +EOF
 17.9427 +  if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
 17.9428 +  (eval $ac_link) 2>&5
 17.9429 +  ac_status=$?
 17.9430 +  echo "$as_me:$LINENO: \$? = $ac_status" >&5
 17.9431 +  (exit $ac_status); } && test -s conftest${ac_exeext} 2>/dev/null; then
 17.9432 +    (./conftest; exit; ) >&5 2>/dev/null
 17.9433 +    lt_status=$?
 17.9434 +    case x$lt_status in
 17.9435 +      x$lt_dlno_uscore) lt_cv_dlopen_self_static=yes ;;
 17.9436 +      x$lt_dlneed_uscore) lt_cv_dlopen_self_static=yes ;;
 17.9437 +      x$lt_dlunknown|x*) lt_cv_dlopen_self_static=no ;;
 17.9438 +    esac
 17.9439 +  else :
 17.9440 +    # compilation failed
 17.9441 +    lt_cv_dlopen_self_static=no
 17.9442 +  fi
 17.9443 +fi
 17.9444 +rm -fr conftest*
 17.9445 +
 17.9446 +
 17.9447 +fi
 17.9448 +echo "$as_me:$LINENO: result: $lt_cv_dlopen_self_static" >&5
 17.9449 +echo "${ECHO_T}$lt_cv_dlopen_self_static" >&6
 17.9450 +    fi
 17.9451 +
 17.9452 +    CPPFLAGS="$save_CPPFLAGS"
 17.9453 +    LDFLAGS="$save_LDFLAGS"
 17.9454 +    LIBS="$save_LIBS"
 17.9455 +    ;;
 17.9456 +  esac
 17.9457 +
 17.9458 +  case $lt_cv_dlopen_self in
 17.9459 +  yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;;
 17.9460 +  *) enable_dlopen_self=unknown ;;
 17.9461 +  esac
 17.9462 +
 17.9463 +  case $lt_cv_dlopen_self_static in
 17.9464 +  yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;;
 17.9465 +  *) enable_dlopen_self_static=unknown ;;
 17.9466 +  esac
 17.9467 +fi
 17.9468 +
 17.9469 +
 17.9470 +# Report which library types will actually be built
 17.9471 +echo "$as_me:$LINENO: checking if libtool supports shared libraries" >&5
 17.9472 +echo $ECHO_N "checking if libtool supports shared libraries... $ECHO_C" >&6
 17.9473 +echo "$as_me:$LINENO: result: $can_build_shared" >&5
 17.9474 +echo "${ECHO_T}$can_build_shared" >&6
 17.9475 +
 17.9476 +echo "$as_me:$LINENO: checking whether to build shared libraries" >&5
 17.9477 +echo $ECHO_N "checking whether to build shared libraries... $ECHO_C" >&6
 17.9478 +test "$can_build_shared" = "no" && enable_shared=no
 17.9479 +
 17.9480 +# On AIX, shared libraries and static libraries use the same namespace, and
 17.9481 +# are all built from PIC.
 17.9482 +case $host_os in
 17.9483 +aix3*)
 17.9484 +  test "$enable_shared" = yes && enable_static=no
 17.9485 +  if test -n "$RANLIB"; then
 17.9486 +    archive_cmds="$archive_cmds~\$RANLIB \$lib"
 17.9487 +    postinstall_cmds='$RANLIB $lib'
 17.9488 +  fi
 17.9489 +  ;;
 17.9490 +
 17.9491 +aix4* | aix5*)
 17.9492 +  if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then
 17.9493 +    test "$enable_shared" = yes && enable_static=no
 17.9494 +  fi
 17.9495 +    ;;
 17.9496 +esac
 17.9497 +echo "$as_me:$LINENO: result: $enable_shared" >&5
 17.9498 +echo "${ECHO_T}$enable_shared" >&6
 17.9499 +
 17.9500 +echo "$as_me:$LINENO: checking whether to build static libraries" >&5
 17.9501 +echo $ECHO_N "checking whether to build static libraries... $ECHO_C" >&6
 17.9502 +# Make sure either enable_shared or enable_static is yes.
 17.9503 +test "$enable_shared" = yes || enable_static=yes
 17.9504 +echo "$as_me:$LINENO: result: $enable_static" >&5
 17.9505 +echo "${ECHO_T}$enable_static" >&6
 17.9506 +
 17.9507 +# The else clause should only fire when bootstrapping the
 17.9508 +# libtool distribution, otherwise you forgot to ship ltmain.sh
 17.9509 +# with your package, and you will get complaints that there are
 17.9510 +# no rules to generate ltmain.sh.
 17.9511 +if test -f "$ltmain"; then
 17.9512 +  # See if we are running on zsh, and set the options which allow our commands through
 17.9513 +  # without removal of \ escapes.
 17.9514 +  if test -n "${ZSH_VERSION+set}" ; then
 17.9515 +    setopt NO_GLOB_SUBST
 17.9516 +  fi
 17.9517 +  # Now quote all the things that may contain metacharacters while being
 17.9518 +  # careful not to overquote the AC_SUBSTed values.  We take copies of the
 17.9519 +  # variables and quote the copies for generation of the libtool script.
 17.9520 +  for var in echo old_CC old_CFLAGS AR AR_FLAGS EGREP RANLIB LN_S LTCC LTCFLAGS NM \
 17.9521 +    SED SHELL STRIP \
 17.9522 +    libname_spec library_names_spec soname_spec extract_expsyms_cmds \
 17.9523 +    old_striplib striplib file_magic_cmd finish_cmds finish_eval \
 17.9524 +    deplibs_check_method reload_flag reload_cmds need_locks \
 17.9525 +    lt_cv_sys_global_symbol_pipe lt_cv_sys_global_symbol_to_cdecl \
 17.9526 +    lt_cv_sys_global_symbol_to_c_name_address \
 17.9527 +    sys_lib_search_path_spec sys_lib_dlsearch_path_spec \
 17.9528 +    old_postinstall_cmds old_postuninstall_cmds \
 17.9529 +    compiler \
 17.9530 +    CC \
 17.9531 +    LD \
 17.9532 +    lt_prog_compiler_wl \
 17.9533 +    lt_prog_compiler_pic \
 17.9534 +    lt_prog_compiler_static \
 17.9535 +    lt_prog_compiler_no_builtin_flag \
 17.9536 +    export_dynamic_flag_spec \
 17.9537 +    thread_safe_flag_spec \
 17.9538 +    whole_archive_flag_spec \
 17.9539 +    enable_shared_with_static_runtimes \
 17.9540 +    old_archive_cmds \
 17.9541 +    old_archive_from_new_cmds \
 17.9542 +    predep_objects \
 17.9543 +    postdep_objects \
 17.9544 +    predeps \
 17.9545 +    postdeps \
 17.9546 +    compiler_lib_search_path \
 17.9547 +    archive_cmds \
 17.9548 +    archive_expsym_cmds \
 17.9549 +    postinstall_cmds \
 17.9550 +    postuninstall_cmds \
 17.9551 +    old_archive_from_expsyms_cmds \
 17.9552 +    allow_undefined_flag \
 17.9553 +    no_undefined_flag \
 17.9554 +    export_symbols_cmds \
 17.9555 +    hardcode_libdir_flag_spec \
 17.9556 +    hardcode_libdir_flag_spec_ld \
 17.9557 +    hardcode_libdir_separator \
 17.9558 +    hardcode_automatic \
 17.9559 +    module_cmds \
 17.9560 +    module_expsym_cmds \
 17.9561 +    lt_cv_prog_compiler_c_o \
 17.9562 +    exclude_expsyms \
 17.9563 +    include_expsyms; do
 17.9564 +
 17.9565 +    case $var in
 17.9566 +    old_archive_cmds | \
 17.9567 +    old_archive_from_new_cmds | \
 17.9568 +    archive_cmds | \
 17.9569 +    archive_expsym_cmds | \
 17.9570 +    module_cmds | \
 17.9571 +    module_expsym_cmds | \
 17.9572 +    old_archive_from_expsyms_cmds | \
 17.9573 +    export_symbols_cmds | \
 17.9574 +    extract_expsyms_cmds | reload_cmds | finish_cmds | \
 17.9575 +    postinstall_cmds | postuninstall_cmds | \
 17.9576 +    old_postinstall_cmds | old_postuninstall_cmds | \
 17.9577 +    sys_lib_search_path_spec | sys_lib_dlsearch_path_spec)
 17.9578 +      # Double-quote double-evaled strings.
 17.9579 +      eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$double_quote_subst\" -e \"\$sed_quote_subst\" -e \"\$delay_variable_subst\"\`\\\""
 17.9580 +      ;;
 17.9581 +    *)
 17.9582 +      eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$sed_quote_subst\"\`\\\""
 17.9583 +      ;;
 17.9584 +    esac
 17.9585 +  done
 17.9586 +
 17.9587 +  case $lt_echo in
 17.9588 +  *'\$0 --fallback-echo"')
 17.9589 +    lt_echo=`$echo "X$lt_echo" | $Xsed -e 's/\\\\\\\$0 --fallback-echo"$/$0 --fallback-echo"/'`
 17.9590 +    ;;
 17.9591 +  esac
 17.9592 +
 17.9593 +cfgfile="${ofile}T"
 17.9594 +  trap "$rm \"$cfgfile\"; exit 1" 1 2 15
 17.9595 +  $rm -f "$cfgfile"
 17.9596 +  { echo "$as_me:$LINENO: creating $ofile" >&5
 17.9597 +echo "$as_me: creating $ofile" >&6;}
 17.9598 +
 17.9599 +  cat <<__EOF__ >> "$cfgfile"
 17.9600 +#! $SHELL
 17.9601 +
 17.9602 +# `$echo "$cfgfile" | sed 's%^.*/%%'` - Provide generalized library-building support services.
 17.9603 +# Generated automatically by $PROGRAM (GNU $PACKAGE $VERSION$TIMESTAMP)
 17.9604 +# NOTE: Changes made to this file will be lost: look at ltmain.sh.
 17.9605 +#
 17.9606 +# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001
 17.9607 +# Free Software Foundation, Inc.
 17.9608 +#
 17.9609 +# This file is part of GNU Libtool:
 17.9610 +# Originally by Gordon Matzigkeit <gord@gnu.ai.mit.edu>, 1996
 17.9611 +#
 17.9612 +# This program is free software; you can redistribute it and/or modify
 17.9613 +# it under the terms of the GNU General Public License as published by
 17.9614 +# the Free Software Foundation; either version 2 of the License, or
 17.9615 +# (at your option) any later version.
 17.9616 +#
 17.9617 +# This program is distributed in the hope that it will be useful, but
 17.9618 +# WITHOUT ANY WARRANTY; without even the implied warranty of
 17.9619 +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 17.9620 +# General Public License for more details.
 17.9621 +#
 17.9622 +# You should have received a copy of the GNU General Public License
 17.9623 +# along with this program; if not, write to the Free Software
 17.9624 +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
 17.9625 +#
 17.9626 +# As a special exception to the GNU General Public License, if you
 17.9627 +# distribute this file as part of a program that contains a
 17.9628 +# configuration script generated by Autoconf, you may include it under
 17.9629 +# the same distribution terms that you use for the rest of that program.
 17.9630 +
 17.9631 +# A sed program that does not truncate output.
 17.9632 +SED=$lt_SED
 17.9633 +
 17.9634 +# Sed that helps us avoid accidentally triggering echo(1) options like -n.
 17.9635 +Xsed="$SED -e 1s/^X//"
 17.9636 +
 17.9637 +# The HP-UX ksh and POSIX shell print the target directory to stdout
 17.9638 +# if CDPATH is set.
 17.9639 +(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
 17.9640 +
 17.9641 +# The names of the tagged configurations supported by this script.
 17.9642 +available_tags=
 17.9643 +
 17.9644 +# ### BEGIN LIBTOOL CONFIG
 17.9645 +
 17.9646 +# Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`:
 17.9647 +
 17.9648 +# Shell to use when invoking shell scripts.
 17.9649 +SHELL=$lt_SHELL
 17.9650 +
 17.9651 +# Whether or not to build shared libraries.
 17.9652 +build_libtool_libs=$enable_shared
 17.9653 +
 17.9654 +# Whether or not to build static libraries.
 17.9655 +build_old_libs=$enable_static
 17.9656 +
 17.9657 +# Whether or not to add -lc for building shared libraries.
 17.9658 +build_libtool_need_lc=$archive_cmds_need_lc
 17.9659 +
 17.9660 +# Whether or not to disallow shared libs when runtime libs are static
 17.9661 +allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes
 17.9662 +
 17.9663 +# Whether or not to optimize for fast installation.
 17.9664 +fast_install=$enable_fast_install
 17.9665 +
 17.9666 +# The host system.
 17.9667 +host_alias=$host_alias
 17.9668 +host=$host
 17.9669 +host_os=$host_os
 17.9670 +
 17.9671 +# The build system.
 17.9672 +build_alias=$build_alias
 17.9673 +build=$build
 17.9674 +build_os=$build_os
 17.9675 +
 17.9676 +# An echo program that does not interpret backslashes.
 17.9677 +echo=$lt_echo
 17.9678 +
 17.9679 +# The archiver.
 17.9680 +AR=$lt_AR
 17.9681 +AR_FLAGS=$lt_AR_FLAGS
 17.9682 +
 17.9683 +# A C compiler.
 17.9684 +LTCC=$lt_LTCC
 17.9685 +
 17.9686 +# LTCC compiler flags.
 17.9687 +LTCFLAGS=$lt_LTCFLAGS
 17.9688 +
 17.9689 +# A language-specific compiler.
 17.9690 +CC=$lt_compiler
 17.9691 +
 17.9692 +# Is the compiler the GNU C compiler?
 17.9693 +with_gcc=$GCC
 17.9694 +
 17.9695 +# An ERE matcher.
 17.9696 +EGREP=$lt_EGREP
 17.9697 +
 17.9698 +# The linker used to build libraries.
 17.9699 +LD=$lt_LD
 17.9700 +
 17.9701 +# Whether we need hard or soft links.
 17.9702 +LN_S=$lt_LN_S
 17.9703 +
 17.9704 +# A BSD-compatible nm program.
 17.9705 +NM=$lt_NM
 17.9706 +
 17.9707 +# A symbol stripping program
 17.9708 +STRIP=$lt_STRIP
 17.9709 +
 17.9710 +# Used to examine libraries when file_magic_cmd begins "file"
 17.9711 +MAGIC_CMD=$MAGIC_CMD
 17.9712 +
 17.9713 +# Used on cygwin: DLL creation program.
 17.9714 +DLLTOOL="$DLLTOOL"
 17.9715 +
 17.9716 +# Used on cygwin: object dumper.
 17.9717 +OBJDUMP="$OBJDUMP"
 17.9718 +
 17.9719 +# Used on cygwin: assembler.
 17.9720 +AS="$AS"
 17.9721 +
 17.9722 +# The name of the directory that contains temporary libtool files.
 17.9723 +objdir=$objdir
 17.9724 +
 17.9725 +# How to create reloadable object files.
 17.9726 +reload_flag=$lt_reload_flag
 17.9727 +reload_cmds=$lt_reload_cmds
 17.9728 +
 17.9729 +# How to pass a linker flag through the compiler.
 17.9730 +wl=$lt_lt_prog_compiler_wl
 17.9731 +
 17.9732 +# Object file suffix (normally "o").
 17.9733 +objext="$ac_objext"
 17.9734 +
 17.9735 +# Old archive suffix (normally "a").
 17.9736 +libext="$libext"
 17.9737 +
 17.9738 +# Shared library suffix (normally ".so").
 17.9739 +shrext_cmds='$shrext_cmds'
 17.9740 +
 17.9741 +# Executable file suffix (normally "").
 17.9742 +exeext="$exeext"
 17.9743 +
 17.9744 +# Additional compiler flags for building library objects.
 17.9745 +pic_flag=$lt_lt_prog_compiler_pic
 17.9746 +pic_mode=$pic_mode
 17.9747 +
 17.9748 +# What is the maximum length of a command?
 17.9749 +max_cmd_len=$lt_cv_sys_max_cmd_len
 17.9750 +
 17.9751 +# Does compiler simultaneously support -c and -o options?
 17.9752 +compiler_c_o=$lt_lt_cv_prog_compiler_c_o
 17.9753 +
 17.9754 +# Must we lock files when doing compilation?
 17.9755 +need_locks=$lt_need_locks
 17.9756 +
 17.9757 +# Do we need the lib prefix for modules?
 17.9758 +need_lib_prefix=$need_lib_prefix
 17.9759 +
 17.9760 +# Do we need a version for libraries?
 17.9761 +need_version=$need_version
 17.9762 +
 17.9763 +# Whether dlopen is supported.
 17.9764 +dlopen_support=$enable_dlopen
 17.9765 +
 17.9766 +# Whether dlopen of programs is supported.
 17.9767 +dlopen_self=$enable_dlopen_self
 17.9768 +
 17.9769 +# Whether dlopen of statically linked programs is supported.
 17.9770 +dlopen_self_static=$enable_dlopen_self_static
 17.9771 +
 17.9772 +# Compiler flag to prevent dynamic linking.
 17.9773 +link_static_flag=$lt_lt_prog_compiler_static
 17.9774 +
 17.9775 +# Compiler flag to turn off builtin functions.
 17.9776 +no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag
 17.9777 +
 17.9778 +# Compiler flag to allow reflexive dlopens.
 17.9779 +export_dynamic_flag_spec=$lt_export_dynamic_flag_spec
 17.9780 +
 17.9781 +# Compiler flag to generate shared objects directly from archives.
 17.9782 +whole_archive_flag_spec=$lt_whole_archive_flag_spec
 17.9783 +
 17.9784 +# Compiler flag to generate thread-safe objects.
 17.9785 +thread_safe_flag_spec=$lt_thread_safe_flag_spec
 17.9786 +
 17.9787 +# Library versioning type.
 17.9788 +version_type=$version_type
 17.9789 +
 17.9790 +# Format of library name prefix.
 17.9791 +libname_spec=$lt_libname_spec
 17.9792 +
 17.9793 +# List of archive names.  First name is the real one, the rest are links.
 17.9794 +# The last name is the one that the linker finds with -lNAME.
 17.9795 +library_names_spec=$lt_library_names_spec
 17.9796 +
 17.9797 +# The coded name of the library, if different from the real name.
 17.9798 +soname_spec=$lt_soname_spec
 17.9799 +
 17.9800 +# Commands used to build and install an old-style archive.
 17.9801 +RANLIB=$lt_RANLIB
 17.9802 +old_archive_cmds=$lt_old_archive_cmds
 17.9803 +old_postinstall_cmds=$lt_old_postinstall_cmds
 17.9804 +old_postuninstall_cmds=$lt_old_postuninstall_cmds
 17.9805 +
 17.9806 +# Create an old-style archive from a shared archive.
 17.9807 +old_archive_from_new_cmds=$lt_old_archive_from_new_cmds
 17.9808 +
 17.9809 +# Create a temporary old-style archive to link instead of a shared archive.
 17.9810 +old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds
 17.9811 +
 17.9812 +# Commands used to build and install a shared archive.
 17.9813 +archive_cmds=$lt_archive_cmds
 17.9814 +archive_expsym_cmds=$lt_archive_expsym_cmds
 17.9815 +postinstall_cmds=$lt_postinstall_cmds
 17.9816 +postuninstall_cmds=$lt_postuninstall_cmds
 17.9817 +
 17.9818 +# Commands used to build a loadable module (assumed same as above if empty)
 17.9819 +module_cmds=$lt_module_cmds
 17.9820 +module_expsym_cmds=$lt_module_expsym_cmds
 17.9821 +
 17.9822 +# Commands to strip libraries.
 17.9823 +old_striplib=$lt_old_striplib
 17.9824 +striplib=$lt_striplib
 17.9825 +
 17.9826 +# Dependencies to place before the objects being linked to create a
 17.9827 +# shared library.
 17.9828 +predep_objects=$lt_predep_objects
 17.9829 +
 17.9830 +# Dependencies to place after the objects being linked to create a
 17.9831 +# shared library.
 17.9832 +postdep_objects=$lt_postdep_objects
 17.9833 +
 17.9834 +# Dependencies to place before the objects being linked to create a
 17.9835 +# shared library.
 17.9836 +predeps=$lt_predeps
 17.9837 +
 17.9838 +# Dependencies to place after the objects being linked to create a
 17.9839 +# shared library.
 17.9840 +postdeps=$lt_postdeps
 17.9841 +
 17.9842 +# The library search path used internally by the compiler when linking
 17.9843 +# a shared library.
 17.9844 +compiler_lib_search_path=$lt_compiler_lib_search_path
 17.9845 +
 17.9846 +# Method to check whether dependent libraries are shared objects.
 17.9847 +deplibs_check_method=$lt_deplibs_check_method
 17.9848 +
 17.9849 +# Command to use when deplibs_check_method == file_magic.
 17.9850 +file_magic_cmd=$lt_file_magic_cmd
 17.9851 +
 17.9852 +# Flag that allows shared libraries with undefined symbols to be built.
 17.9853 +allow_undefined_flag=$lt_allow_undefined_flag
 17.9854 +
 17.9855 +# Flag that forces no undefined symbols.
 17.9856 +no_undefined_flag=$lt_no_undefined_flag
 17.9857 +
 17.9858 +# Commands used to finish a libtool library installation in a directory.
 17.9859 +finish_cmds=$lt_finish_cmds
 17.9860 +
 17.9861 +# Same as above, but a single script fragment to be evaled but not shown.
 17.9862 +finish_eval=$lt_finish_eval
 17.9863 +
 17.9864 +# Take the output of nm and produce a listing of raw symbols and C names.
 17.9865 +global_symbol_pipe=$lt_lt_cv_sys_global_symbol_pipe
 17.9866 +
 17.9867 +# Transform the output of nm in a proper C declaration
 17.9868 +global_symbol_to_cdecl=$lt_lt_cv_sys_global_symbol_to_cdecl
 17.9869 +
 17.9870 +# Transform the output of nm in a C name address pair
 17.9871 +global_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address
 17.9872 +
 17.9873 +# This is the shared library runtime path variable.
 17.9874 +runpath_var=$runpath_var
 17.9875 +
 17.9876 +# This is the shared library path variable.
 17.9877 +shlibpath_var=$shlibpath_var
 17.9878 +
 17.9879 +# Is shlibpath searched before the hard-coded library search path?
 17.9880 +shlibpath_overrides_runpath=$shlibpath_overrides_runpath
 17.9881 +
 17.9882 +# How to hardcode a shared library path into an executable.
 17.9883 +hardcode_action=$hardcode_action
 17.9884 +
 17.9885 +# Whether we should hardcode library paths into libraries.
 17.9886 +hardcode_into_libs=$hardcode_into_libs
 17.9887 +
 17.9888 +# Flag to hardcode \$libdir into a binary during linking.
 17.9889 +# This must work even if \$libdir does not exist.
 17.9890 +hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec
 17.9891 +
 17.9892 +# If ld is used when linking, flag to hardcode \$libdir into
 17.9893 +# a binary during linking. This must work even if \$libdir does
 17.9894 +# not exist.
 17.9895 +hardcode_libdir_flag_spec_ld=$lt_hardcode_libdir_flag_spec_ld
 17.9896 +
 17.9897 +# Whether we need a single -rpath flag with a separated argument.
 17.9898 +hardcode_libdir_separator=$lt_hardcode_libdir_separator
 17.9899 +
 17.9900 +# Set to yes if using DIR/libNAME${shared_ext} during linking hardcodes DIR into the
 17.9901 +# resulting binary.
 17.9902 +hardcode_direct=$hardcode_direct
 17.9903 +
 17.9904 +# Set to yes if using the -LDIR flag during linking hardcodes DIR into the
 17.9905 +# resulting binary.
 17.9906 +hardcode_minus_L=$hardcode_minus_L
 17.9907 +
 17.9908 +# Set to yes if using SHLIBPATH_VAR=DIR during linking hardcodes DIR into
 17.9909 +# the resulting binary.
 17.9910 +hardcode_shlibpath_var=$hardcode_shlibpath_var
 17.9911 +
 17.9912 +# Set to yes if building a shared library automatically hardcodes DIR into the library
 17.9913 +# and all subsequent libraries and executables linked against it.
 17.9914 +hardcode_automatic=$hardcode_automatic
 17.9915 +
 17.9916 +# Variables whose values should be saved in libtool wrapper scripts and
 17.9917 +# restored at relink time.
 17.9918 +variables_saved_for_relink="$variables_saved_for_relink"
 17.9919 +
 17.9920 +# Whether libtool must link a program against all its dependency libraries.
 17.9921 +link_all_deplibs=$link_all_deplibs
 17.9922 +
 17.9923 +# Compile-time system search path for libraries
 17.9924 +sys_lib_search_path_spec=$lt_sys_lib_search_path_spec
 17.9925 +
 17.9926 +# Run-time system search path for libraries
 17.9927 +sys_lib_dlsearch_path_spec=$lt_sys_lib_dlsearch_path_spec
 17.9928 +
 17.9929 +# Fix the shell variable \$srcfile for the compiler.
 17.9930 +fix_srcfile_path="$fix_srcfile_path"
 17.9931 +
 17.9932 +# Set to yes if exported symbols are required.
 17.9933 +always_export_symbols=$always_export_symbols
 17.9934 +
 17.9935 +# The commands to list exported symbols.
 17.9936 +export_symbols_cmds=$lt_export_symbols_cmds
 17.9937 +
 17.9938 +# The commands to extract the exported symbol list from a shared archive.
 17.9939 +extract_expsyms_cmds=$lt_extract_expsyms_cmds
 17.9940 +
 17.9941 +# Symbols that should not be listed in the preloaded symbols.
 17.9942 +exclude_expsyms=$lt_exclude_expsyms
 17.9943 +
 17.9944 +# Symbols that must always be exported.
 17.9945 +include_expsyms=$lt_include_expsyms
 17.9946 +
 17.9947 +# ### END LIBTOOL CONFIG
 17.9948 +
 17.9949 +__EOF__
 17.9950 +
 17.9951 +
 17.9952 +  case $host_os in
 17.9953 +  aix3*)
 17.9954 +    cat <<\EOF >> "$cfgfile"
 17.9955 +
 17.9956 +# AIX sometimes has problems with the GCC collect2 program.  For some
 17.9957 +# reason, if we set the COLLECT_NAMES environment variable, the problems
 17.9958 +# vanish in a puff of smoke.
 17.9959 +if test "X${COLLECT_NAMES+set}" != Xset; then
 17.9960 +  COLLECT_NAMES=
 17.9961 +  export COLLECT_NAMES
 17.9962 +fi
 17.9963 +EOF
 17.9964 +    ;;
 17.9965 +  esac
 17.9966 +
 17.9967 +  # We use sed instead of cat because bash on DJGPP gets confused if
 17.9968 +  # if finds mixed CR/LF and LF-only lines.  Since sed operates in
 17.9969 +  # text mode, it properly converts lines to CR/LF.  This bash problem
 17.9970 +  # is reportedly fixed, but why not run on old versions too?
 17.9971 +  sed '$q' "$ltmain" >> "$cfgfile" || (rm -f "$cfgfile"; exit 1)
 17.9972 +
 17.9973 +  mv -f "$cfgfile" "$ofile" || \
 17.9974 +    (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile")
 17.9975 +  chmod +x "$ofile"
 17.9976 +
 17.9977 +else
 17.9978 +  # If there is no Makefile yet, we rely on a make rule to execute
 17.9979 +  # `config.status --recheck' to rerun these tests and create the
 17.9980 +  # libtool script then.
 17.9981 +  ltmain_in=`echo $ltmain | sed -e 's/\.sh$/.in/'`
 17.9982 +  if test -f "$ltmain_in"; then
 17.9983 +    test -f Makefile && make "$ltmain"
 17.9984 +  fi
 17.9985 +fi
 17.9986 +
 17.9987 +
 17.9988 +ac_ext=c
 17.9989 +ac_cpp='$CPP $CPPFLAGS'
 17.9990 +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
 17.9991 +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
 17.9992 +ac_compiler_gnu=$ac_cv_c_compiler_gnu
 17.9993 +
 17.9994 +CC="$lt_save_CC"
 17.9995 +
 17.9996 +
 17.9997 +# Check whether --with-tags or --without-tags was given.
 17.9998 +if test "${with_tags+set}" = set; then
 17.9999 +  withval="$with_tags"
17.10000 +  tagnames="$withval"
17.10001 +fi;
17.10002 +
17.10003 +if test -f "$ltmain" && test -n "$tagnames"; then
17.10004 +  if test ! -f "${ofile}"; then
17.10005 +    { echo "$as_me:$LINENO: WARNING: output file \`$ofile' does not exist" >&5
17.10006 +echo "$as_me: WARNING: output file \`$ofile' does not exist" >&2;}
17.10007 +  fi
17.10008 +
17.10009 +  if test -z "$LTCC"; then
17.10010 +    eval "`$SHELL ${ofile} --config | grep '^LTCC='`"
17.10011 +    if test -z "$LTCC"; then
17.10012 +      { echo "$as_me:$LINENO: WARNING: output file \`$ofile' does not look like a libtool script" >&5
17.10013 +echo "$as_me: WARNING: output file \`$ofile' does not look like a libtool script" >&2;}
17.10014 +    else
17.10015 +      { echo "$as_me:$LINENO: WARNING: using \`LTCC=$LTCC', extracted from \`$ofile'" >&5
17.10016 +echo "$as_me: WARNING: using \`LTCC=$LTCC', extracted from \`$ofile'" >&2;}
17.10017 +    fi
17.10018 +  fi
17.10019 +  if test -z "$LTCFLAGS"; then
17.10020 +    eval "`$SHELL ${ofile} --config | grep '^LTCFLAGS='`"
17.10021 +  fi
17.10022 +
17.10023 +  # Extract list of available tagged configurations in $ofile.
17.10024 +  # Note that this assumes the entire list is on one line.
17.10025 +  available_tags=`grep "^available_tags=" "${ofile}" | $SED -e 's/available_tags=\(.*$\)/\1/' -e 's/\"//g'`
17.10026 +
17.10027 +  lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR,"
17.10028 +  for tagname in $tagnames; do
17.10029 +    IFS="$lt_save_ifs"
17.10030 +    # Check whether tagname contains only valid characters
17.10031 +    case `$echo "X$tagname" | $Xsed -e 's:[-_ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890,/]::g'` in
17.10032 +    "") ;;
17.10033 +    *)  { { echo "$as_me:$LINENO: error: invalid tag name: $tagname" >&5
17.10034 +echo "$as_me: error: invalid tag name: $tagname" >&2;}
17.10035 +   { (exit 1); exit 1; }; }
17.10036 +	;;
17.10037 +    esac
17.10038 +
17.10039 +    if grep "^# ### BEGIN LIBTOOL TAG CONFIG: $tagname$" < "${ofile}" > /dev/null
17.10040 +    then
17.10041 +      { { echo "$as_me:$LINENO: error: tag name \"$tagname\" already exists" >&5
17.10042 +echo "$as_me: error: tag name \"$tagname\" already exists" >&2;}
17.10043 +   { (exit 1); exit 1; }; }
17.10044 +    fi
17.10045 +
17.10046 +    # Update the list of available tags.
17.10047 +    if test -n "$tagname"; then
17.10048 +      echo appending configuration tag \"$tagname\" to $ofile
17.10049 +
17.10050 +      case $tagname in
17.10051 +      CXX)
17.10052 +	if test -n "$CXX" && ( test "X$CXX" != "Xno" &&
17.10053 +	    ( (test "X$CXX" = "Xg++" && `g++ -v >/dev/null 2>&1` ) ||
17.10054 +	    (test "X$CXX" != "Xg++"))) ; then
17.10055 +	  ac_ext=cc
17.10056 +ac_cpp='$CXXCPP $CPPFLAGS'
17.10057 +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
17.10058 +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
17.10059 +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
17.10060 +
17.10061 +
17.10062 +
17.10063 +
17.10064 +archive_cmds_need_lc_CXX=no
17.10065 +allow_undefined_flag_CXX=
17.10066 +always_export_symbols_CXX=no
17.10067 +archive_expsym_cmds_CXX=
17.10068 +export_dynamic_flag_spec_CXX=
17.10069 +hardcode_direct_CXX=no
17.10070 +hardcode_libdir_flag_spec_CXX=
17.10071 +hardcode_libdir_flag_spec_ld_CXX=
17.10072 +hardcode_libdir_separator_CXX=
17.10073 +hardcode_minus_L_CXX=no
17.10074 +hardcode_shlibpath_var_CXX=unsupported
17.10075 +hardcode_automatic_CXX=no
17.10076 +module_cmds_CXX=
17.10077 +module_expsym_cmds_CXX=
17.10078 +link_all_deplibs_CXX=unknown
17.10079 +old_archive_cmds_CXX=$old_archive_cmds
17.10080 +no_undefined_flag_CXX=
17.10081 +whole_archive_flag_spec_CXX=
17.10082 +enable_shared_with_static_runtimes_CXX=no
17.10083 +
17.10084 +# Dependencies to place before and after the object being linked:
17.10085 +predep_objects_CXX=
17.10086 +postdep_objects_CXX=
17.10087 +predeps_CXX=
17.10088 +postdeps_CXX=
17.10089 +compiler_lib_search_path_CXX=
17.10090 +
17.10091 +# Source file extension for C++ test sources.
17.10092 +ac_ext=cpp
17.10093 +
17.10094 +# Object file extension for compiled C++ test sources.
17.10095 +objext=o
17.10096 +objext_CXX=$objext
17.10097 +
17.10098 +# Code to be used in simple compile tests
17.10099 +lt_simple_compile_test_code="int some_variable = 0;\n"
17.10100 +
17.10101 +# Code to be used in simple link tests
17.10102 +lt_simple_link_test_code='int main(int, char *[]) { return(0); }\n'
17.10103 +
17.10104 +# ltmain only uses $CC for tagged configurations so make sure $CC is set.
17.10105 +
17.10106 +# If no C compiler was specified, use CC.
17.10107 +LTCC=${LTCC-"$CC"}
17.10108 +
17.10109 +# If no C compiler flags were specified, use CFLAGS.
17.10110 +LTCFLAGS=${LTCFLAGS-"$CFLAGS"}
17.10111 +
17.10112 +# Allow CC to be a program name with arguments.
17.10113 +compiler=$CC
17.10114 +
17.10115 +
17.10116 +# save warnings/boilerplate of simple test code
17.10117 +ac_outfile=conftest.$ac_objext
17.10118 +printf "$lt_simple_compile_test_code" >conftest.$ac_ext
17.10119 +eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err
17.10120 +_lt_compiler_boilerplate=`cat conftest.err`
17.10121 +$rm conftest*
17.10122 +
17.10123 +ac_outfile=conftest.$ac_objext
17.10124 +printf "$lt_simple_link_test_code" >conftest.$ac_ext
17.10125 +eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err
17.10126 +_lt_linker_boilerplate=`cat conftest.err`
17.10127 +$rm conftest*
17.10128 +
17.10129 +
17.10130 +# Allow CC to be a program name with arguments.
17.10131 +lt_save_CC=$CC
17.10132 +lt_save_LD=$LD
17.10133 +lt_save_GCC=$GCC
17.10134 +GCC=$GXX
17.10135 +lt_save_with_gnu_ld=$with_gnu_ld
17.10136 +lt_save_path_LD=$lt_cv_path_LD
17.10137 +if test -n "${lt_cv_prog_gnu_ldcxx+set}"; then
17.10138 +  lt_cv_prog_gnu_ld=$lt_cv_prog_gnu_ldcxx
17.10139 +else
17.10140 +  $as_unset lt_cv_prog_gnu_ld
17.10141 +fi
17.10142 +if test -n "${lt_cv_path_LDCXX+set}"; then
17.10143 +  lt_cv_path_LD=$lt_cv_path_LDCXX
17.10144 +else
17.10145 +  $as_unset lt_cv_path_LD
17.10146 +fi
17.10147 +test -z "${LDCXX+set}" || LD=$LDCXX
17.10148 +CC=${CXX-"c++"}
17.10149 +compiler=$CC
17.10150 +compiler_CXX=$CC
17.10151 +for cc_temp in $compiler""; do
17.10152 +  case $cc_temp in
17.10153 +    compile | *[\\/]compile | ccache | *[\\/]ccache ) ;;
17.10154 +    distcc | *[\\/]distcc | purify | *[\\/]purify ) ;;
17.10155 +    \-*) ;;
17.10156 +    *) break;;
17.10157 +  esac
17.10158 +done
17.10159 +cc_basename=`$echo "X$cc_temp" | $Xsed -e 's%.*/%%' -e "s%^$host_alias-%%"`
17.10160 +
17.10161 +
17.10162 +# We don't want -fno-exception wen compiling C++ code, so set the
17.10163 +# no_builtin_flag separately
17.10164 +if test "$GXX" = yes; then
17.10165 +  lt_prog_compiler_no_builtin_flag_CXX=' -fno-builtin'
17.10166 +else
17.10167 +  lt_prog_compiler_no_builtin_flag_CXX=
17.10168 +fi
17.10169 +
17.10170 +if test "$GXX" = yes; then
17.10171 +  # Set up default GNU C++ configuration
17.10172 +
17.10173 +
17.10174 +# Check whether --with-gnu-ld or --without-gnu-ld was given.
17.10175 +if test "${with_gnu_ld+set}" = set; then
17.10176 +  withval="$with_gnu_ld"
17.10177 +  test "$withval" = no || with_gnu_ld=yes
17.10178 +else
17.10179 +  with_gnu_ld=no
17.10180 +fi;
17.10181 +ac_prog=ld
17.10182 +if test "$GCC" = yes; then
17.10183 +  # Check if gcc -print-prog-name=ld gives a path.
17.10184 +  echo "$as_me:$LINENO: checking for ld used by $CC" >&5
17.10185 +echo $ECHO_N "checking for ld used by $CC... $ECHO_C" >&6
17.10186 +  case $host in
17.10187 +  *-*-mingw*)
17.10188 +    # gcc leaves a trailing carriage return which upsets mingw
17.10189 +    ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;;
17.10190 +  *)
17.10191 +    ac_prog=`($CC -print-prog-name=ld) 2>&5` ;;
17.10192 +  esac
17.10193 +  case $ac_prog in
17.10194 +    # Accept absolute paths.
17.10195 +    [\\/]* | ?:[\\/]*)
17.10196 +      re_direlt='/[^/][^/]*/\.\./'
17.10197 +      # Canonicalize the pathname of ld
17.10198 +      ac_prog=`echo $ac_prog| $SED 's%\\\\%/%g'`
17.10199 +      while echo $ac_prog | grep "$re_direlt" > /dev/null 2>&1; do
17.10200 +	ac_prog=`echo $ac_prog| $SED "s%$re_direlt%/%"`
17.10201 +      done
17.10202 +      test -z "$LD" && LD="$ac_prog"
17.10203 +      ;;
17.10204 +  "")
17.10205 +    # If it fails, then pretend we aren't using GCC.
17.10206 +    ac_prog=ld
17.10207 +    ;;
17.10208 +  *)
17.10209 +    # If it is relative, then search for the first ld in PATH.
17.10210 +    with_gnu_ld=unknown
17.10211 +    ;;
17.10212 +  esac
17.10213 +elif test "$with_gnu_ld" = yes; then
17.10214 +  echo "$as_me:$LINENO: checking for GNU ld" >&5
17.10215 +echo $ECHO_N "checking for GNU ld... $ECHO_C" >&6
17.10216 +else
17.10217 +  echo "$as_me:$LINENO: checking for non-GNU ld" >&5
17.10218 +echo $ECHO_N "checking for non-GNU ld... $ECHO_C" >&6
17.10219 +fi
17.10220 +if test "${lt_cv_path_LD+set}" = set; then
17.10221 +  echo $ECHO_N "(cached) $ECHO_C" >&6
17.10222 +else
17.10223 +  if test -z "$LD"; then
17.10224 +  lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
17.10225 +  for ac_dir in $PATH; do
17.10226 +    IFS="$lt_save_ifs"
17.10227 +    test -z "$ac_dir" && ac_dir=.
17.10228 +    if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then
17.10229 +      lt_cv_path_LD="$ac_dir/$ac_prog"
17.10230 +      # Check to see if the program is GNU ld.  I'd rather use --version,
17.10231 +      # but apparently some variants of GNU ld only accept -v.
17.10232 +      # Break only if it was the GNU/non-GNU ld that we prefer.
17.10233 +      case `"$lt_cv_path_LD" -v 2>&1 </dev/null` in
17.10234 +      *GNU* | *'with BFD'*)
17.10235 +	test "$with_gnu_ld" != no && break
17.10236 +	;;
17.10237 +      *)
17.10238 +	test "$with_gnu_ld" != yes && break
17.10239 +	;;
17.10240 +      esac
17.10241 +    fi
17.10242 +  done
17.10243 +  IFS="$lt_save_ifs"
17.10244 +else
17.10245 +  lt_cv_path_LD="$LD" # Let the user override the test with a path.
17.10246 +fi
17.10247 +fi
17.10248 +
17.10249 +LD="$lt_cv_path_LD"
17.10250 +if test -n "$LD"; then
17.10251 +  echo "$as_me:$LINENO: result: $LD" >&5
17.10252 +echo "${ECHO_T}$LD" >&6
17.10253 +else
17.10254 +  echo "$as_me:$LINENO: result: no" >&5
17.10255 +echo "${ECHO_T}no" >&6
17.10256 +fi
17.10257 +test -z "$LD" && { { echo "$as_me:$LINENO: error: no acceptable ld found in \$PATH" >&5
17.10258 +echo "$as_me: error: no acceptable ld found in \$PATH" >&2;}
17.10259 +   { (exit 1); exit 1; }; }
17.10260 +echo "$as_me:$LINENO: checking if the linker ($LD) is GNU ld" >&5
17.10261 +echo $ECHO_N "checking if the linker ($LD) is GNU ld... $ECHO_C" >&6
17.10262 +if test "${lt_cv_prog_gnu_ld+set}" = set; then
17.10263 +  echo $ECHO_N "(cached) $ECHO_C" >&6
17.10264 +else
17.10265 +  # I'd rather use --version here, but apparently some GNU lds only accept -v.
17.10266 +case `$LD -v 2>&1 </dev/null` in
17.10267 +*GNU* | *'with BFD'*)
17.10268 +  lt_cv_prog_gnu_ld=yes
17.10269 +  ;;
17.10270 +*)
17.10271 +  lt_cv_prog_gnu_ld=no
17.10272 +  ;;
17.10273 +esac
17.10274 +fi
17.10275 +echo "$as_me:$LINENO: result: $lt_cv_prog_gnu_ld" >&5
17.10276 +echo "${ECHO_T}$lt_cv_prog_gnu_ld" >&6
17.10277 +with_gnu_ld=$lt_cv_prog_gnu_ld
17.10278 +
17.10279 +
17.10280 +
17.10281 +  # Check if GNU C++ uses GNU ld as the underlying linker, since the
17.10282 +  # archiving commands below assume that GNU ld is being used.
17.10283 +  if test "$with_gnu_ld" = yes; then
17.10284 +    archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib'
17.10285 +    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'
17.10286 +
17.10287 +    hardcode_libdir_flag_spec_CXX='${wl}--rpath ${wl}$libdir'
17.10288 +    export_dynamic_flag_spec_CXX='${wl}--export-dynamic'
17.10289 +
17.10290 +    # If archive_cmds runs LD, not CC, wlarc should be empty
17.10291 +    # XXX I think wlarc can be eliminated in ltcf-cxx, but I need to
17.10292 +    #     investigate it a little bit more. (MM)
17.10293 +    wlarc='${wl}'
17.10294 +
17.10295 +    # ancient GNU ld didn't support --whole-archive et. al.
17.10296 +    if eval "`$CC -print-prog-name=ld` --help 2>&1" | \
17.10297 +	grep 'no-whole-archive' > /dev/null; then
17.10298 +      whole_archive_flag_spec_CXX="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive'
17.10299 +    else
17.10300 +      whole_archive_flag_spec_CXX=
17.10301 +    fi
17.10302 +  else
17.10303 +    with_gnu_ld=no
17.10304 +    wlarc=
17.10305 +
17.10306 +    # A generic and very simple default shared library creation
17.10307 +    # command for GNU C++ for the case where it uses the native
17.10308 +    # linker, instead of GNU ld.  If possible, this setting should
17.10309 +    # overridden to take advantage of the native linker features on
17.10310 +    # the platform it is being used on.
17.10311 +    archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib'
17.10312 +  fi
17.10313 +
17.10314 +  # Commands to make compiler produce verbose output that lists
17.10315 +  # what "hidden" libraries, object files and flags are used when
17.10316 +  # linking a shared library.
17.10317 +  output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "\-L"'
17.10318 +
17.10319 +else
17.10320 +  GXX=no
17.10321 +  with_gnu_ld=no
17.10322 +  wlarc=
17.10323 +fi
17.10324 +
17.10325 +# PORTME: fill in a description of your system's C++ link characteristics
17.10326 +echo "$as_me:$LINENO: checking whether the $compiler linker ($LD) supports shared libraries" >&5
17.10327 +echo $ECHO_N "checking whether the $compiler linker ($LD) supports shared libraries... $ECHO_C" >&6
17.10328 +ld_shlibs_CXX=yes
17.10329 +case $host_os in
17.10330 +  aix3*)
17.10331 +    # FIXME: insert proper C++ library support
17.10332 +    ld_shlibs_CXX=no
17.10333 +    ;;
17.10334 +  aix4* | aix5*)
17.10335 +    if test "$host_cpu" = ia64; then
17.10336 +      # On IA64, the linker does run time linking by default, so we don't
17.10337 +      # have to do anything special.
17.10338 +      aix_use_runtimelinking=no
17.10339 +      exp_sym_flag='-Bexport'
17.10340 +      no_entry_flag=""
17.10341 +    else
17.10342 +      aix_use_runtimelinking=no
17.10343 +
17.10344 +      # Test if we are trying to use run time linking or normal
17.10345 +      # AIX style linking. If -brtl is somewhere in LDFLAGS, we
17.10346 +      # need to do runtime linking.
17.10347 +      case $host_os in aix4.[23]|aix4.[23].*|aix5*)
17.10348 +	for ld_flag in $LDFLAGS; do
17.10349 +	  case $ld_flag in
17.10350 +	  *-brtl*)
17.10351 +	    aix_use_runtimelinking=yes
17.10352 +	    break
17.10353 +	    ;;
17.10354 +	  esac
17.10355 +	done
17.10356 +	;;
17.10357 +      esac
17.10358 +
17.10359 +      exp_sym_flag='-bexport'
17.10360 +      no_entry_flag='-bnoentry'
17.10361 +    fi
17.10362 +
17.10363 +    # When large executables or shared objects are built, AIX ld can
17.10364 +    # have problems creating the table of contents.  If linking a library
17.10365 +    # or program results in "error TOC overflow" add -mminimal-toc to
17.10366 +    # CXXFLAGS/CFLAGS for g++/gcc.  In the cases where that is not
17.10367 +    # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS.
17.10368 +
17.10369 +    archive_cmds_CXX=''
17.10370 +    hardcode_direct_CXX=yes
17.10371 +    hardcode_libdir_separator_CXX=':'
17.10372 +    link_all_deplibs_CXX=yes
17.10373 +
17.10374 +    if test "$GXX" = yes; then
17.10375 +      case $host_os in aix4.[012]|aix4.[012].*)
17.10376 +      # We only want to do this on AIX 4.2 and lower, the check
17.10377 +      # below for broken collect2 doesn't work under 4.3+
17.10378 +	collect2name=`${CC} -print-prog-name=collect2`
17.10379 +	if test -f "$collect2name" && \
17.10380 +	   strings "$collect2name" | grep resolve_lib_name >/dev/null
17.10381 +	then
17.10382 +	  # We have reworked collect2
17.10383 +	  hardcode_direct_CXX=yes
17.10384 +	else
17.10385 +	  # We have old collect2
17.10386 +	  hardcode_direct_CXX=unsupported
17.10387 +	  # It fails to find uninstalled libraries when the uninstalled
17.10388 +	  # path is not listed in the libpath.  Setting hardcode_minus_L
17.10389 +	  # to unsupported forces relinking
17.10390 +	  hardcode_minus_L_CXX=yes
17.10391 +	  hardcode_libdir_flag_spec_CXX='-L$libdir'
17.10392 +	  hardcode_libdir_separator_CXX=
17.10393 +	fi
17.10394 +	;;
17.10395 +      esac
17.10396 +      shared_flag='-shared'
17.10397 +      if test "$aix_use_runtimelinking" = yes; then
17.10398 +	shared_flag="$shared_flag "'${wl}-G'
17.10399 +      fi
17.10400 +    else
17.10401 +      # not using gcc
17.10402 +      if test "$host_cpu" = ia64; then
17.10403 +	# VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release
17.10404 +	# chokes on -Wl,-G. The following line is correct:
17.10405 +	shared_flag='-G'
17.10406 +      else
17.10407 +	if test "$aix_use_runtimelinking" = yes; then
17.10408 +	  shared_flag='${wl}-G'
17.10409 +	else
17.10410 +	  shared_flag='${wl}-bM:SRE'
17.10411 +	fi
17.10412 +      fi
17.10413 +    fi
17.10414 +
17.10415 +    # It seems that -bexpall does not export symbols beginning with
17.10416 +    # underscore (_), so it is better to generate a list of symbols to export.
17.10417 +    always_export_symbols_CXX=yes
17.10418 +    if test "$aix_use_runtimelinking" = yes; then
17.10419 +      # Warning - without using the other runtime loading flags (-brtl),
17.10420 +      # -berok will link without error, but may produce a broken library.
17.10421 +      allow_undefined_flag_CXX='-berok'
17.10422 +      # Determine the default libpath from the value encoded in an empty executable.
17.10423 +      cat >conftest.$ac_ext <<_ACEOF
17.10424 +/* confdefs.h.  */
17.10425 +_ACEOF
17.10426 +cat confdefs.h >>conftest.$ac_ext
17.10427 +cat >>conftest.$ac_ext <<_ACEOF
17.10428 +/* end confdefs.h.  */
17.10429 +
17.10430 +int
17.10431 +main ()
17.10432 +{
17.10433 +
17.10434 +  ;
17.10435 +  return 0;
17.10436 +}
17.10437 +_ACEOF
17.10438 +rm -f conftest.$ac_objext conftest$ac_exeext
17.10439 +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
17.10440 +  (eval $ac_link) 2>conftest.er1
17.10441 +  ac_status=$?
17.10442 +  grep -v '^ *+' conftest.er1 >conftest.err
17.10443 +  rm -f conftest.er1
17.10444 +  cat conftest.err >&5
17.10445 +  echo "$as_me:$LINENO: \$? = $ac_status" >&5
17.10446 +  (exit $ac_status); } &&
17.10447 +	 { ac_try='test -z "$ac_cxx_werror_flag"			 || test ! -s conftest.err'
17.10448 +  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
17.10449 +  (eval $ac_try) 2>&5
17.10450 +  ac_status=$?
17.10451 +  echo "$as_me:$LINENO: \$? = $ac_status" >&5
17.10452 +  (exit $ac_status); }; } &&
17.10453 +	 { ac_try='test -s conftest$ac_exeext'
17.10454 +  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
17.10455 +  (eval $ac_try) 2>&5
17.10456 +  ac_status=$?
17.10457 +  echo "$as_me:$LINENO: \$? = $ac_status" >&5
17.10458 +  (exit $ac_status); }; }; then
17.10459 +
17.10460 +aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0  *\(.*\)$/\1/; p; }
17.10461 +}'`
17.10462 +# Check for a 64-bit object if we didn't find anything.
17.10463 +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; }
17.10464 +}'`; fi
17.10465 +else
17.10466 +  echo "$as_me: failed program was:" >&5
17.10467 +sed 's/^/| /' conftest.$ac_ext >&5
17.10468 +
17.10469 +fi
17.10470 +rm -f conftest.err conftest.$ac_objext \
17.10471 +      conftest$ac_exeext conftest.$ac_ext
17.10472 +if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
17.10473 +
17.10474 +      hardcode_libdir_flag_spec_CXX='${wl}-blibpath:$libdir:'"$aix_libpath"
17.10475 +
17.10476 +      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 echo "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag"
17.10477 +     else
17.10478 +      if test "$host_cpu" = ia64; then
17.10479 +	hardcode_libdir_flag_spec_CXX='${wl}-R $libdir:/usr/lib:/lib'
17.10480 +	allow_undefined_flag_CXX="-z nodefs"
17.10481 +	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"
17.10482 +      else
17.10483 +	# Determine the default libpath from the value encoded in an empty executable.
17.10484 +	cat >conftest.$ac_ext <<_ACEOF
17.10485 +/* confdefs.h.  */
17.10486 +_ACEOF
17.10487 +cat confdefs.h >>conftest.$ac_ext
17.10488 +cat >>conftest.$ac_ext <<_ACEOF
17.10489 +/* end confdefs.h.  */
17.10490 +
17.10491 +int
17.10492 +main ()
17.10493 +{
17.10494 +
17.10495 +  ;
17.10496 +  return 0;
17.10497 +}
17.10498 +_ACEOF
17.10499 +rm -f conftest.$ac_objext conftest$ac_exeext
17.10500 +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
17.10501 +  (eval $ac_link) 2>conftest.er1
17.10502 +  ac_status=$?
17.10503 +  grep -v '^ *+' conftest.er1 >conftest.err
17.10504 +  rm -f conftest.er1
17.10505 +  cat conftest.err >&5
17.10506 +  echo "$as_me:$LINENO: \$? = $ac_status" >&5
17.10507 +  (exit $ac_status); } &&
17.10508 +	 { ac_try='test -z "$ac_cxx_werror_flag"			 || test ! -s conftest.err'
17.10509 +  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
17.10510 +  (eval $ac_try) 2>&5
17.10511 +  ac_status=$?
17.10512 +  echo "$as_me:$LINENO: \$? = $ac_status" >&5
17.10513 +  (exit $ac_status); }; } &&
17.10514 +	 { ac_try='test -s conftest$ac_exeext'
17.10515 +  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
17.10516 +  (eval $ac_try) 2>&5
17.10517 +  ac_status=$?
17.10518 +  echo "$as_me:$LINENO: \$? = $ac_status" >&5
17.10519 +  (exit $ac_status); }; }; then
17.10520 +
17.10521 +aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0  *\(.*\)$/\1/; p; }
17.10522 +}'`
17.10523 +# Check for a 64-bit object if we didn't find anything.
17.10524 +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; }
17.10525 +}'`; fi
17.10526 +else
17.10527 +  echo "$as_me: failed program was:" >&5
17.10528 +sed 's/^/| /' conftest.$ac_ext >&5
17.10529 +
17.10530 +fi
17.10531 +rm -f conftest.err conftest.$ac_objext \
17.10532 +      conftest$ac_exeext conftest.$ac_ext
17.10533 +if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
17.10534 +
17.10535 +	hardcode_libdir_flag_spec_CXX='${wl}-blibpath:$libdir:'"$aix_libpath"
17.10536 +	# Warning - without using the other run time loading flags,
17.10537 +	# -berok will link without error, but may produce a broken library.
17.10538 +	no_undefined_flag_CXX=' ${wl}-bernotok'
17.10539 +	allow_undefined_flag_CXX=' ${wl}-berok'
17.10540 +	# Exported symbols can be pulled into shared objects from archives
17.10541 +	whole_archive_flag_spec_CXX='$convenience'
17.10542 +	archive_cmds_need_lc_CXX=yes
17.10543 +	# This is similar to how AIX traditionally builds its shared libraries.
17.10544 +	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'
17.10545 +      fi
17.10546 +    fi
17.10547 +    ;;
17.10548 +
17.10549 +  beos*)
17.10550 +    if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
17.10551 +      allow_undefined_flag_CXX=unsupported
17.10552 +      # Joseph Beckenbach <jrb3@best.com> says some releases of gcc
17.10553 +      # support --undefined.  This deserves some investigation.  FIXME
17.10554 +      archive_cmds_CXX='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
17.10555 +    else
17.10556 +      ld_shlibs_CXX=no
17.10557 +    fi
17.10558 +    ;;
17.10559 +
17.10560 +  chorus*)
17.10561 +    case $cc_basename in
17.10562 +      *)
17.10563 +	# FIXME: insert proper C++ library support
17.10564 +	ld_shlibs_CXX=no
17.10565 +	;;
17.10566 +    esac
17.10567 +    ;;
17.10568 +
17.10569 +  cygwin* | mingw* | pw32*)
17.10570 +    # _LT_AC_TAGVAR(hardcode_libdir_flag_spec, CXX) is actually meaningless,
17.10571 +    # as there is no search path for DLLs.
17.10572 +    hardcode_libdir_flag_spec_CXX='-L$libdir'
17.10573 +    allow_undefined_flag_CXX=unsupported
17.10574 +    always_export_symbols_CXX=no
17.10575 +    enable_shared_with_static_runtimes_CXX=yes
17.10576 +
17.10577 +    if $LD --help 2>&1 | grep 'auto-import' > /dev/null; then
17.10578 +      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'
17.10579 +      # If the export-symbols file already is a .def file (1st line
17.10580 +      # is EXPORTS), use it as is; otherwise, prepend...
17.10581 +      archive_expsym_cmds_CXX='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then
17.10582 +	cp $export_symbols $output_objdir/$soname.def;
17.10583 +      else
17.10584 +	echo EXPORTS > $output_objdir/$soname.def;
17.10585 +	cat $export_symbols >> $output_objdir/$soname.def;
17.10586 +      fi~
17.10587 +      $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'
17.10588 +    else
17.10589 +      ld_shlibs_CXX=no
17.10590 +    fi
17.10591 +  ;;
17.10592 +      darwin* | rhapsody*)
17.10593 +        case $host_os in
17.10594 +        rhapsody* | darwin1.[012])
17.10595 +         allow_undefined_flag_CXX='${wl}-undefined ${wl}suppress'
17.10596 +         ;;
17.10597 +       *) # Darwin 1.3 on
17.10598 +         if test -z ${MACOSX_DEPLOYMENT_TARGET} ; then
17.10599 +           allow_undefined_flag_CXX='${wl}-flat_namespace ${wl}-undefined ${wl}suppress'
17.10600 +         else
17.10601 +           case ${MACOSX_DEPLOYMENT_TARGET} in
17.10602 +             10.[012])
17.10603 +               allow_undefined_flag_CXX='${wl}-flat_namespace ${wl}-undefined ${wl}suppress'
17.10604 +               ;;
17.10605 +             10.*)
17.10606 +               allow_undefined_flag_CXX='${wl}-undefined ${wl}dynamic_lookup'
17.10607 +               ;;
17.10608 +           esac
17.10609 +         fi
17.10610 +         ;;
17.10611 +        esac
17.10612 +      archive_cmds_need_lc_CXX=no
17.10613 +      hardcode_direct_CXX=no
17.10614 +      hardcode_automatic_CXX=yes
17.10615 +      hardcode_shlibpath_var_CXX=unsupported
17.10616 +      whole_archive_flag_spec_CXX=''
17.10617 +      link_all_deplibs_CXX=yes
17.10618 +
17.10619 +    if test "$GXX" = yes ; then
17.10620 +      lt_int_apple_cc_single_mod=no
17.10621 +      output_verbose_link_cmd='echo'
17.10622 +      if $CC -dumpspecs 2>&1 | $EGREP 'single_module' >/dev/null ; then
17.10623 +       lt_int_apple_cc_single_mod=yes
17.10624 +      fi
17.10625 +      if test "X$lt_int_apple_cc_single_mod" = Xyes ; then
17.10626 +       archive_cmds_CXX='$CC -dynamiclib -single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring'
17.10627 +      else
17.10628 +          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'
17.10629 +        fi
17.10630 +        module_cmds_CXX='$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags'
17.10631 +        # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin lds
17.10632 +          if test "X$lt_int_apple_cc_single_mod" = Xyes ; then
17.10633 +            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}'
17.10634 +          else
17.10635 +            archive_expsym_cmds_CXX='sed -e "s,#.*,," -e "s,^[    ]*,," -e "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~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
17.10636 +          fi
17.10637 +            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}'
17.10638 +      else
17.10639 +      case $cc_basename in
17.10640 +        xlc*)
17.10641 +         output_verbose_link_cmd='echo'
17.10642 +          archive_cmds_CXX='$CC -qmkshrobj ${wl}-single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}`echo $rpath/$soname` $verstring'
17.10643 +          module_cmds_CXX='$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags'
17.10644 +          # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin lds
17.10645 +          archive_expsym_cmds_CXX='sed -e "s,#.*,," -e "s,^[    ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -qmkshrobj ${wl}-single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}$rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
17.10646 +          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}'
17.10647 +          ;;
17.10648 +       *)
17.10649 +         ld_shlibs_CXX=no
17.10650 +          ;;
17.10651 +      esac
17.10652 +      fi
17.10653 +        ;;
17.10654 +
17.10655 +  dgux*)
17.10656 +    case $cc_basename in
17.10657 +      ec++*)
17.10658 +	# FIXME: insert proper C++ library support
17.10659 +	ld_shlibs_CXX=no
17.10660 +	;;
17.10661 +      ghcx*)
17.10662 +	# Green Hills C++ Compiler
17.10663 +	# FIXME: insert proper C++ library support
17.10664 +	ld_shlibs_CXX=no
17.10665 +	;;
17.10666 +      *)
17.10667 +	# FIXME: insert proper C++ library support
17.10668 +	ld_shlibs_CXX=no
17.10669 +	;;
17.10670 +    esac
17.10671 +    ;;
17.10672 +  freebsd[12]*)
17.10673 +    # C++ shared libraries reported to be fairly broken before switch to ELF
17.10674 +    ld_shlibs_CXX=no
17.10675 +    ;;
17.10676 +  freebsd-elf*)
17.10677 +    archive_cmds_need_lc_CXX=no
17.10678 +    ;;
17.10679 +  freebsd* | kfreebsd*-gnu | dragonfly*)
17.10680 +    # FreeBSD 3 and later use GNU C++ and GNU ld with standard ELF
17.10681 +    # conventions
17.10682 +    ld_shlibs_CXX=yes
17.10683 +    ;;
17.10684 +  gnu*)
17.10685 +    ;;
17.10686 +  hpux9*)
17.10687 +    hardcode_libdir_flag_spec_CXX='${wl}+b ${wl}$libdir'
17.10688 +    hardcode_libdir_separator_CXX=:
17.10689 +    export_dynamic_flag_spec_CXX='${wl}-E'
17.10690 +    hardcode_direct_CXX=yes
17.10691 +    hardcode_minus_L_CXX=yes # Not in the search PATH,
17.10692 +				# but as the default
17.10693 +				# location of the library.
17.10694 +
17.10695 +    case $cc_basename in
17.10696 +    CC*)
17.10697 +      # FIXME: insert proper C++ library support
17.10698 +      ld_shlibs_CXX=no
17.10699 +      ;;
17.10700 +    aCC*)
17.10701 +      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'
17.10702 +      # Commands to make compiler produce verbose output that lists
17.10703 +      # what "hidden" libraries, object files and flags are used when
17.10704 +      # linking a shared library.
17.10705 +      #
17.10706 +      # There doesn't appear to be a way to prevent this compiler from
17.10707 +      # explicitly linking system object files so we need to strip them
17.10708 +      # from the output so that they don't get included in the library
17.10709 +      # dependencies.
17.10710 +      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'
17.10711 +      ;;
17.10712 +    *)
17.10713 +      if test "$GXX" = yes; then
17.10714 +        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'
17.10715 +      else
17.10716 +        # FIXME: insert proper C++ library support
17.10717 +        ld_shlibs_CXX=no
17.10718 +      fi
17.10719 +      ;;
17.10720 +    esac
17.10721 +    ;;
17.10722 +  hpux10*|hpux11*)
17.10723 +    if test $with_gnu_ld = no; then
17.10724 +      hardcode_libdir_flag_spec_CXX='${wl}+b ${wl}$libdir'
17.10725 +      hardcode_libdir_separator_CXX=:
17.10726 +
17.10727 +      case $host_cpu in
17.10728 +      hppa*64*|ia64*)
17.10729 +	hardcode_libdir_flag_spec_ld_CXX='+b $libdir'
17.10730 +        ;;
17.10731 +      *)
17.10732 +	export_dynamic_flag_spec_CXX='${wl}-E'
17.10733 +        ;;
17.10734 +      esac
17.10735 +    fi
17.10736 +    case $host_cpu in
17.10737 +    hppa*64*|ia64*)
17.10738 +      hardcode_direct_CXX=no
17.10739 +      hardcode_shlibpath_var_CXX=no
17.10740 +      ;;
17.10741 +    *)
17.10742 +      hardcode_direct_CXX=yes
17.10743 +      hardcode_minus_L_CXX=yes # Not in the search PATH,
17.10744 +					      # but as the default
17.10745 +					      # location of the library.
17.10746 +      ;;
17.10747 +    esac
17.10748 +
17.10749 +    case $cc_basename in
17.10750 +      CC*)
17.10751 +	# FIXME: insert proper C++ library support
17.10752 +	ld_shlibs_CXX=no
17.10753 +	;;
17.10754 +      aCC*)
17.10755 +	case $host_cpu in
17.10756 +	hppa*64*)
17.10757 +	  archive_cmds_CXX='$CC -b ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
17.10758 +	  ;;
17.10759 +	ia64*)
17.10760 +	  archive_cmds_CXX='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
17.10761 +	  ;;
17.10762 +	*)
17.10763 +	  archive_cmds_CXX='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
17.10764 +	  ;;
17.10765 +	esac
17.10766 +	# Commands to make compiler produce verbose output that lists
17.10767 +	# what "hidden" libraries, object files and flags are used when
17.10768 +	# linking a shared library.
17.10769 +	#
17.10770 +	# There doesn't appear to be a way to prevent this compiler from
17.10771 +	# explicitly linking system object files so we need to strip them
17.10772 +	# from the output so that they don't get included in the library
17.10773 +	# dependencies.
17.10774 +	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'
17.10775 +	;;
17.10776 +      *)
17.10777 +	if test "$GXX" = yes; then
17.10778 +	  if test $with_gnu_ld = no; then
17.10779 +	    case $host_cpu in
17.10780 +	    hppa*64*)
17.10781 +	      archive_cmds_CXX='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
17.10782 +	      ;;
17.10783 +	    ia64*)
17.10784 +	      archive_cmds_CXX='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
17.10785 +	      ;;
17.10786 +	    *)
17.10787 +	      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'
17.10788 +	      ;;
17.10789 +	    esac
17.10790 +	  fi
17.10791 +	else
17.10792 +	  # FIXME: insert proper C++ library support
17.10793 +	  ld_shlibs_CXX=no
17.10794 +	fi
17.10795 +	;;
17.10796 +    esac
17.10797 +    ;;
17.10798 +  interix3*)
17.10799 +    hardcode_direct_CXX=no
17.10800 +    hardcode_shlibpath_var_CXX=no
17.10801 +    hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir'
17.10802 +    export_dynamic_flag_spec_CXX='${wl}-E'
17.10803 +    # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc.
17.10804 +    # Instead, shared libraries are loaded at an image base (0x10000000 by
17.10805 +    # default) and relocated if they conflict, which is a slow very memory
17.10806 +    # consuming and fragmenting process.  To avoid this, we pick a random,
17.10807 +    # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link
17.10808 +    # time.  Moving up from 0x10000000 also allows more sbrk(2) space.
17.10809 +    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'
17.10810 +    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'
17.10811 +    ;;
17.10812 +  irix5* | irix6*)
17.10813 +    case $cc_basename in
17.10814 +      CC*)
17.10815 +	# SGI C++
17.10816 +	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 ${output_objdir}/so_locations -o $lib'
17.10817 +
17.10818 +	# Archives containing C++ object files must be created using
17.10819 +	# "CC -ar", where "CC" is the IRIX C++ compiler.  This is
17.10820 +	# necessary to make sure instantiated templates are included
17.10821 +	# in the archive.
17.10822 +	old_archive_cmds_CXX='$CC -ar -WR,-u -o $oldlib $oldobjs'
17.10823 +	;;
17.10824 +      *)
17.10825 +	if test "$GXX" = yes; then
17.10826 +	  if test "$with_gnu_ld" = no; then
17.10827 +	    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}${output_objdir}/so_locations -o $lib'
17.10828 +	  else
17.10829 +	    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'
17.10830 +	  fi
17.10831 +	fi
17.10832 +	link_all_deplibs_CXX=yes
17.10833 +	;;
17.10834 +    esac
17.10835 +    hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir'
17.10836 +    hardcode_libdir_separator_CXX=:
17.10837 +    ;;
17.10838 +  linux*)
17.10839 +    case $cc_basename in
17.10840 +      KCC*)
17.10841 +	# Kuck and Associates, Inc. (KAI) C++ Compiler
17.10842 +
17.10843 +	# KCC will only create a shared library if the output file
17.10844 +	# ends with ".so" (or ".sl" for HP-UX), so rename the library
17.10845 +	# to its proper name (with version) after linking.
17.10846 +	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'
17.10847 +	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'
17.10848 +	# Commands to make compiler produce verbose output that lists
17.10849 +	# what "hidden" libraries, object files and flags are used when
17.10850 +	# linking a shared library.
17.10851 +	#
17.10852 +	# There doesn't appear to be a way to prevent this compiler from
17.10853 +	# explicitly linking system object files so we need to strip them
17.10854 +	# from the output so that they don't get included in the library
17.10855 +	# dependencies.
17.10856 +	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'
17.10857 +
17.10858 +	hardcode_libdir_flag_spec_CXX='${wl}--rpath,$libdir'
17.10859 +	export_dynamic_flag_spec_CXX='${wl}--export-dynamic'
17.10860 +
17.10861 +	# Archives containing C++ object files must be created using
17.10862 +	# "CC -Bstatic", where "CC" is the KAI C++ compiler.
17.10863 +	old_archive_cmds_CXX='$CC -Bstatic -o $oldlib $oldobjs'
17.10864 +	;;
17.10865 +      icpc*)
17.10866 +	# Intel C++
17.10867 +	with_gnu_ld=yes
17.10868 +	# version 8.0 and above of icpc choke on multiply defined symbols
17.10869 +	# if we add $predep_objects and $postdep_objects, however 7.1 and
17.10870 +	# earlier do not add the objects themselves.
17.10871 +	case `$CC -V 2>&1` in
17.10872 +	*"Version 7."*)
17.10873 +  	  archive_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib'
17.10874 +  	  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'
17.10875 +	  ;;
17.10876 +	*)  # Version 8.0 or newer
17.10877 +	  tmp_idyn=
17.10878 +	  case $host_cpu in
17.10879 +	    ia64*) tmp_idyn=' -i_dynamic';;
17.10880 +	  esac
17.10881 +  	  archive_cmds_CXX='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
17.10882 +	  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'
17.10883 +	  ;;
17.10884 +	esac
17.10885 +	archive_cmds_need_lc_CXX=no
17.10886 +	hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir'
17.10887 +	export_dynamic_flag_spec_CXX='${wl}--export-dynamic'
17.10888 +	whole_archive_flag_spec_CXX='${wl}--whole-archive$convenience ${wl}--no-whole-archive'
17.10889 +	;;
17.10890 +      pgCC*)
17.10891 +        # Portland Group C++ compiler
17.10892 +	archive_cmds_CXX='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib'
17.10893 +  	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'
17.10894 +
17.10895 +	hardcode_libdir_flag_spec_CXX='${wl}--rpath ${wl}$libdir'
17.10896 +	export_dynamic_flag_spec_CXX='${wl}--export-dynamic'
17.10897 +	whole_archive_flag_spec_CXX='${wl}--whole-archive`for conv in $convenience\"\"; do test  -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $echo \"$new_convenience\"` ${wl}--no-whole-archive'
17.10898 +        ;;
17.10899 +      cxx*)
17.10900 +	# Compaq C++
17.10901 +	archive_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib'
17.10902 +	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'
17.10903 +
17.10904 +	runpath_var=LD_RUN_PATH
17.10905 +	hardcode_libdir_flag_spec_CXX='-rpath $libdir'
17.10906 +	hardcode_libdir_separator_CXX=:
17.10907 +
17.10908 +	# Commands to make compiler produce verbose output that lists
17.10909 +	# what "hidden" libraries, object files and flags are used when
17.10910 +	# linking a shared library.
17.10911 +	#
17.10912 +	# There doesn't appear to be a way to prevent this compiler from
17.10913 +	# explicitly linking system object files so we need to strip them
17.10914 +	# from the output so that they don't get included in the library
17.10915 +	# dependencies.
17.10916 +	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'
17.10917 +	;;
17.10918 +    esac
17.10919 +    ;;
17.10920 +  lynxos*)
17.10921 +    # FIXME: insert proper C++ library support
17.10922 +    ld_shlibs_CXX=no
17.10923 +    ;;
17.10924 +  m88k*)
17.10925 +    # FIXME: insert proper C++ library support
17.10926 +    ld_shlibs_CXX=no
17.10927 +    ;;
17.10928 +  mvs*)
17.10929 +    case $cc_basename in
17.10930 +      cxx*)
17.10931 +	# FIXME: insert proper C++ library support
17.10932 +	ld_shlibs_CXX=no
17.10933 +	;;
17.10934 +      *)
17.10935 +	# FIXME: insert proper C++ library support
17.10936 +	ld_shlibs_CXX=no
17.10937 +	;;
17.10938 +    esac
17.10939 +    ;;
17.10940 +  netbsd* | netbsdelf*-gnu | knetbsd*-gnu)
17.10941 +    if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then
17.10942 +      archive_cmds_CXX='$LD -Bshareable  -o $lib $predep_objects $libobjs $deplibs $postdep_objects $linker_flags'
17.10943 +      wlarc=
17.10944 +      hardcode_libdir_flag_spec_CXX='-R$libdir'
17.10945 +      hardcode_direct_CXX=yes
17.10946 +      hardcode_shlibpath_var_CXX=no
17.10947 +    fi
17.10948 +    # Workaround some broken pre-1.5 toolchains
17.10949 +    output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep conftest.$objext | $SED -e "s:-lgcc -lc -lgcc::"'
17.10950 +    ;;
17.10951 +  openbsd2*)
17.10952 +    # C++ shared libraries are fairly broken
17.10953 +    ld_shlibs_CXX=no
17.10954 +    ;;
17.10955 +  openbsd*)
17.10956 +    hardcode_direct_CXX=yes
17.10957 +    hardcode_shlibpath_var_CXX=no
17.10958 +    archive_cmds_CXX='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib'
17.10959 +    hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir'
17.10960 +    if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
17.10961 +      archive_expsym_cmds_CXX='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file,$export_symbols -o $lib'
17.10962 +      export_dynamic_flag_spec_CXX='${wl}-E'
17.10963 +      whole_archive_flag_spec_CXX="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive'
17.10964 +    fi
17.10965 +    output_verbose_link_cmd='echo'
17.10966 +    ;;
17.10967 +  osf3*)
17.10968 +    case $cc_basename in
17.10969 +      KCC*)
17.10970 +	# Kuck and Associates, Inc. (KAI) C++ Compiler
17.10971 +
17.10972 +	# KCC will only create a shared library if the output file
17.10973 +	# ends with ".so" (or ".sl" for HP-UX), so rename the library
17.10974 +	# to its proper name (with version) after linking.
17.10975 +	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'
17.10976 +
17.10977 +	hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir'
17.10978 +	hardcode_libdir_separator_CXX=:
17.10979 +
17.10980 +	# Archives containing C++ object files must be created using
17.10981 +	# "CC -Bstatic", where "CC" is the KAI C++ compiler.
17.10982 +	old_archive_cmds_CXX='$CC -Bstatic -o $oldlib $oldobjs'
17.10983 +
17.10984 +	;;
17.10985 +      RCC*)
17.10986 +	# Rational C++ 2.4.1
17.10987 +	# FIXME: insert proper C++ library support
17.10988 +	ld_shlibs_CXX=no
17.10989 +	;;
17.10990 +      cxx*)
17.10991 +	allow_undefined_flag_CXX=' ${wl}-expect_unresolved ${wl}\*'
17.10992 +	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 ${output_objdir}/so_locations -o $lib'
17.10993 +
17.10994 +	hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir'
17.10995 +	hardcode_libdir_separator_CXX=:
17.10996 +
17.10997 +	# Commands to make compiler produce verbose output that lists
17.10998 +	# what "hidden" libraries, object files and flags are used when
17.10999 +	# linking a shared library.
17.11000 +	#
17.11001 +	# There doesn't appear to be a way to prevent this compiler from
17.11002 +	# explicitly linking system object files so we need to strip them
17.11003 +	# from the output so that they don't get included in the library
17.11004 +	# dependencies.
17.11005 +	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'
17.11006 +	;;
17.11007 +      *)
17.11008 +	if test "$GXX" = yes && test "$with_gnu_ld" = no; then
17.11009 +	  allow_undefined_flag_CXX=' ${wl}-expect_unresolved ${wl}\*'
17.11010 +	  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}${output_objdir}/so_locations -o $lib'
17.11011 +
17.11012 +	  hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir'
17.11013 +	  hardcode_libdir_separator_CXX=:
17.11014 +
17.11015 +	  # Commands to make compiler produce verbose output that lists
17.11016 +	  # what "hidden" libraries, object files and flags are used when
17.11017 +	  # linking a shared library.
17.11018 +	  output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "\-L"'
17.11019 +
17.11020 +	else
17.11021 +	  # FIXME: insert proper C++ library support
17.11022 +	  ld_shlibs_CXX=no
17.11023 +	fi
17.11024 +	;;
17.11025 +    esac
17.11026 +    ;;
17.11027 +  osf4* | osf5*)
17.11028 +    case $cc_basename in
17.11029 +      KCC*)
17.11030 +	# Kuck and Associates, Inc. (KAI) C++ Compiler
17.11031 +
17.11032 +	# KCC will only create a shared library if the output file
17.11033 +	# ends with ".so" (or ".sl" for HP-UX), so rename the library
17.11034 +	# to its proper name (with version) after linking.
17.11035 +	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'
17.11036 +
17.11037 +	hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir'
17.11038 +	hardcode_libdir_separator_CXX=:
17.11039 +
17.11040 +	# Archives containing C++ object files must be created using
17.11041 +	# the KAI C++ compiler.
17.11042 +	old_archive_cmds_CXX='$CC -o $oldlib $oldobjs'
17.11043 +	;;
17.11044 +      RCC*)
17.11045 +	# Rational C++ 2.4.1
17.11046 +	# FIXME: insert proper C++ library support
17.11047 +	ld_shlibs_CXX=no
17.11048 +	;;
17.11049 +      cxx*)
17.11050 +	allow_undefined_flag_CXX=' -expect_unresolved \*'
17.11051 +	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 ${output_objdir}/so_locations -o $lib'
17.11052 +	archive_expsym_cmds_CXX='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done~
17.11053 +	  echo "-hidden">> $lib.exp~
17.11054 +	  $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~
17.11055 +	  $rm $lib.exp'
17.11056 +
17.11057 +	hardcode_libdir_flag_spec_CXX='-rpath $libdir'
17.11058 +	hardcode_libdir_separator_CXX=:
17.11059 +
17.11060 +	# Commands to make compiler produce verbose output that lists
17.11061 +	# what "hidden" libraries, object files and flags are used when
17.11062 +	# linking a shared library.
17.11063 +	#
17.11064 +	# There doesn't appear to be a way to prevent this compiler from
17.11065 +	# explicitly linking system object files so we need to strip them
17.11066 +	# from the output so that they don't get included in the library
17.11067 +	# dependencies.
17.11068 +	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'
17.11069 +	;;
17.11070 +      *)
17.11071 +	if test "$GXX" = yes && test "$with_gnu_ld" = no; then
17.11072 +	  allow_undefined_flag_CXX=' ${wl}-expect_unresolved ${wl}\*'
17.11073 +	 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}${output_objdir}/so_locations -o $lib'
17.11074 +
17.11075 +	  hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir'
17.11076 +	  hardcode_libdir_separator_CXX=:
17.11077 +
17.11078 +	  # Commands to make compiler produce verbose output that lists
17.11079 +	  # what "hidden" libraries, object files and flags are used when
17.11080 +	  # linking a shared library.
17.11081 +	  output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep "\-L"'
17.11082 +
17.11083 +	else
17.11084 +	  # FIXME: insert proper C++ library support
17.11085 +	  ld_shlibs_CXX=no
17.11086 +	fi
17.11087 +	;;
17.11088 +    esac
17.11089 +    ;;
17.11090 +  psos*)
17.11091 +    # FIXME: insert proper C++ library support
17.11092 +    ld_shlibs_CXX=no
17.11093 +    ;;
17.11094 +  sunos4*)
17.11095 +    case $cc_basename in
17.11096 +      CC*)
17.11097 +	# Sun C++ 4.x
17.11098 +	# FIXME: insert proper C++ library support
17.11099 +	ld_shlibs_CXX=no
17.11100 +	;;
17.11101 +      lcc*)
17.11102 +	# Lucid
17.11103 +	# FIXME: insert proper C++ library support
17.11104 +	ld_shlibs_CXX=no
17.11105 +	;;
17.11106 +      *)
17.11107 +	# FIXME: insert proper C++ library support
17.11108 +	ld_shlibs_CXX=no
17.11109 +	;;
17.11110 +    esac
17.11111 +    ;;
17.11112 +  solaris*)
17.11113 +    case $cc_basename in
17.11114 +      CC*)
17.11115 +	# Sun C++ 4.2, 5.x and Centerline C++
17.11116 +        archive_cmds_need_lc_CXX=yes
17.11117 +	no_undefined_flag_CXX=' -zdefs'
17.11118 +	archive_cmds_CXX='$CC -G${allow_undefined_flag}  -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
17.11119 +	archive_expsym_cmds_CXX='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~
17.11120 +	$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'
17.11121 +
17.11122 +	hardcode_libdir_flag_spec_CXX='-R$libdir'
17.11123 +	hardcode_shlibpath_var_CXX=no
17.11124 +	case $host_os in
17.11125 +	  solaris2.[0-5] | solaris2.[0-5].*) ;;
17.11126 +	  *)
17.11127 +	    # The C++ compiler is used as linker so we must use $wl
17.11128 +	    # flag to pass the commands to the underlying system
17.11129 +	    # linker. We must also pass each convience library through
17.11130 +	    # to the system linker between allextract/defaultextract.
17.11131 +	    # The C++ compiler will combine linker options so we
17.11132 +	    # cannot just pass the convience library names through
17.11133 +	    # without $wl.
17.11134 +	    # Supported since Solaris 2.6 (maybe 2.5.1?)
17.11135 +	    whole_archive_flag_spec_CXX='${wl}-z ${wl}allextract`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $echo \"$new_convenience\"` ${wl}-z ${wl}defaultextract'
17.11136 +	    ;;
17.11137 +	esac
17.11138 +	link_all_deplibs_CXX=yes
17.11139 +
17.11140 +	output_verbose_link_cmd='echo'
17.11141 +
17.11142 +	# Archives containing C++ object files must be created using
17.11143 +	# "CC -xar", where "CC" is the Sun C++ compiler.  This is
17.11144 +	# necessary to make sure instantiated templates are included
17.11145 +	# in the archive.
17.11146 +	old_archive_cmds_CXX='$CC -xar -o $oldlib $oldobjs'
17.11147 +	;;
17.11148 +      gcx*)
17.11149 +	# Green Hills C++ Compiler
17.11150 +	archive_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib'
17.11151 +
17.11152 +	# The C++ compiler must be used to create the archive.
17.11153 +	old_archive_cmds_CXX='$CC $LDFLAGS -archive -o $oldlib $oldobjs'
17.11154 +	;;
17.11155 +      *)
17.11156 +	# GNU C++ compiler with Solaris linker
17.11157 +	if test "$GXX" = yes && test "$with_gnu_ld" = no; then
17.11158 +	  no_undefined_flag_CXX=' ${wl}-z ${wl}defs'
17.11159 +	  if $CC --version | grep -v '^2\.7' > /dev/null; then
17.11160 +	    archive_cmds_CXX='$CC -shared -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib'
17.11161 +	    archive_expsym_cmds_CXX='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~
17.11162 +		$CC -shared -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$rm $lib.exp'
17.11163 +
17.11164 +	    # Commands to make compiler produce verbose output that lists
17.11165 +	    # what "hidden" libraries, object files and flags are used when
17.11166 +	    # linking a shared library.
17.11167 +	    output_verbose_link_cmd="$CC -shared $CFLAGS -v conftest.$objext 2>&1 | grep \"\-L\""
17.11168 +	  else
17.11169 +	    # g++ 2.7 appears to require `-G' NOT `-shared' on this
17.11170 +	    # platform.
17.11171 +	    archive_cmds_CXX='$CC -G -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib'
17.11172 +	    archive_expsym_cmds_CXX='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~
17.11173 +		$CC -G -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$rm $lib.exp'
17.11174 +
17.11175 +	    # Commands to make compiler produce verbose output that lists
17.11176 +	    # what "hidden" libraries, object files and flags are used when
17.11177 +	    # linking a shared library.
17.11178 +	    output_verbose_link_cmd="$CC -G $CFLAGS -v conftest.$objext 2>&1 | grep \"\-L\""
17.11179 +	  fi
17.11180 +
17.11181 +	  hardcode_libdir_flag_spec_CXX='${wl}-R $wl$libdir'
17.11182 +	fi
17.11183 +	;;
17.11184 +    esac
17.11185 +    ;;
17.11186 +  sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7* | sco3.2v5.0.[024]*)
17.11187 +    no_undefined_flag_CXX='${wl}-z,text'
17.11188 +    archive_cmds_need_lc_CXX=no
17.11189 +    hardcode_shlibpath_var_CXX=no
17.11190 +    runpath_var='LD_RUN_PATH'
17.11191 +
17.11192 +    case $cc_basename in
17.11193 +      CC*)
17.11194 +	archive_cmds_CXX='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
17.11195 +	archive_expsym_cmds_CXX='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
17.11196 +	;;
17.11197 +      *)
17.11198 +	archive_cmds_CXX='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
17.11199 +	archive_expsym_cmds_CXX='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
17.11200 +	;;
17.11201 +    esac
17.11202 +    ;;
17.11203 +  sysv5* | sco3.2v5* | sco5v6*)
17.11204 +    # Note: We can NOT use -z defs as we might desire, because we do not
17.11205 +    # link with -lc, and that would cause any symbols used from libc to
17.11206 +    # always be unresolved, which means just about no library would
17.11207 +    # ever link correctly.  If we're not using GNU ld we use -z text
17.11208 +    # though, which does catch some bad symbols but isn't as heavy-handed
17.11209 +    # as -z defs.
17.11210 +    # For security reasons, it is highly recommended that you always
17.11211 +    # use absolute paths for naming shared libraries, and exclude the
17.11212 +    # DT_RUNPATH tag from executables and libraries.  But doing so
17.11213 +    # requires that you compile everything twice, which is a pain.
17.11214 +    # So that behaviour is only enabled if SCOABSPATH is set to a
17.11215 +    # non-empty value in the environment.  Most likely only useful for
17.11216 +    # creating official distributions of packages.
17.11217 +    # This is a hack until libtool officially supports absolute path
17.11218 +    # names for shared libraries.
17.11219 +    no_undefined_flag_CXX='${wl}-z,text'
17.11220 +    allow_undefined_flag_CXX='${wl}-z,nodefs'
17.11221 +    archive_cmds_need_lc_CXX=no
17.11222 +    hardcode_shlibpath_var_CXX=no
17.11223 +    hardcode_libdir_flag_spec_CXX='`test -z "$SCOABSPATH" && echo ${wl}-R,$libdir`'
17.11224 +    hardcode_libdir_separator_CXX=':'
17.11225 +    link_all_deplibs_CXX=yes
17.11226 +    export_dynamic_flag_spec_CXX='${wl}-Bexport'
17.11227 +    runpath_var='LD_RUN_PATH'
17.11228 +
17.11229 +    case $cc_basename in
17.11230 +      CC*)
17.11231 +	archive_cmds_CXX='$CC -G ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags'
17.11232 +	archive_expsym_cmds_CXX='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags'
17.11233 +	;;
17.11234 +      *)
17.11235 +	archive_cmds_CXX='$CC -shared ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags'
17.11236 +	archive_expsym_cmds_CXX='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags'
17.11237 +	;;
17.11238 +    esac
17.11239 +    ;;
17.11240 +  tandem*)
17.11241 +    case $cc_basename in
17.11242 +      NCC*)
17.11243 +	# NonStop-UX NCC 3.20
17.11244 +	# FIXME: insert proper C++ library support
17.11245 +	ld_shlibs_CXX=no
17.11246 +	;;
17.11247 +      *)
17.11248 +	# FIXME: insert proper C++ library support
17.11249 +	ld_shlibs_CXX=no
17.11250 +	;;
17.11251 +    esac
17.11252 +    ;;
17.11253 +  vxworks*)
17.11254 +    # FIXME: insert proper C++ library support
17.11255 +    ld_shlibs_CXX=no
17.11256 +    ;;
17.11257 +  *)
17.11258 +    # FIXME: insert proper C++ library support
17.11259 +    ld_shlibs_CXX=no
17.11260 +    ;;
17.11261 +esac
17.11262 +echo "$as_me:$LINENO: result: $ld_shlibs_CXX" >&5
17.11263 +echo "${ECHO_T}$ld_shlibs_CXX" >&6
17.11264 +test "$ld_shlibs_CXX" = no && can_build_shared=no
17.11265 +
17.11266 +GCC_CXX="$GXX"
17.11267 +LD_CXX="$LD"
17.11268 +
17.11269 +
17.11270 +cat > conftest.$ac_ext <<EOF
17.11271 +class Foo
17.11272 +{
17.11273 +public:
17.11274 +  Foo (void) { a = 0; }
17.11275 +private:
17.11276 +  int a;
17.11277 +};
17.11278 +EOF
17.11279 +
17.11280 +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
17.11281 +  (eval $ac_compile) 2>&5
17.11282 +  ac_status=$?
17.11283 +  echo "$as_me:$LINENO: \$? = $ac_status" >&5
17.11284 +  (exit $ac_status); }; then
17.11285 +  # Parse the compiler output and extract the necessary
17.11286 +  # objects, libraries and library flags.
17.11287 +
17.11288 +  # Sentinel used to keep track of whether or not we are before
17.11289 +  # the conftest object file.
17.11290 +  pre_test_object_deps_done=no
17.11291 +
17.11292 +  # The `*' in the case matches for architectures that use `case' in
17.11293 +  # $output_verbose_cmd can trigger glob expansion during the loop
17.11294 +  # eval without this substitution.
17.11295 +  output_verbose_link_cmd=`$echo "X$output_verbose_link_cmd" | $Xsed -e "$no_glob_subst"`
17.11296 +
17.11297 +  for p in `eval $output_verbose_link_cmd`; do
17.11298 +    case $p in
17.11299 +
17.11300 +    -L* | -R* | -l*)
17.11301 +       # Some compilers place space between "-{L,R}" and the path.
17.11302 +       # Remove the space.
17.11303 +       if test $p = "-L" \
17.11304 +	  || test $p = "-R"; then
17.11305 +	 prev=$p
17.11306 +	 continue
17.11307 +       else
17.11308 +	 prev=
17.11309 +       fi
17.11310 +
17.11311 +       if test "$pre_test_object_deps_done" = no; then
17.11312 +	 case $p in
17.11313 +	 -L* | -R*)
17.11314 +	   # Internal compiler library paths should come after those
17.11315 +	   # provided the user.  The postdeps already come after the
17.11316 +	   # user supplied libs so there is no need to process them.
17.11317 +	   if test -z "$compiler_lib_search_path_CXX"; then
17.11318 +	     compiler_lib_search_path_CXX="${prev}${p}"
17.11319 +	   else
17.11320 +	     compiler_lib_search_path_CXX="${compiler_lib_search_path_CXX} ${prev}${p}"
17.11321 +	   fi
17.11322 +	   ;;
17.11323 +	 # The "-l" case would never come before the object being
17.11324 +	 # linked, so don't bother handling this case.
17.11325 +	 esac
17.11326 +       else
17.11327 +	 if test -z "$postdeps_CXX"; then
17.11328 +	   postdeps_CXX="${prev}${p}"
17.11329 +	 else
17.11330 +	   postdeps_CXX="${postdeps_CXX} ${prev}${p}"
17.11331 +	 fi
17.11332 +       fi
17.11333 +       ;;
17.11334 +
17.11335 +    *.$objext)
17.11336 +       # This assumes that the test object file only shows up
17.11337 +       # once in the compiler output.
17.11338 +       if test "$p" = "conftest.$objext"; then
17.11339 +	 pre_test_object_deps_done=yes
17.11340 +	 continue
17.11341 +       fi
17.11342 +
17.11343 +       if test "$pre_test_object_deps_done" = no; then
17.11344 +	 if test -z "$predep_objects_CXX"; then
17.11345 +	   predep_objects_CXX="$p"
17.11346 +	 else
17.11347 +	   predep_objects_CXX="$predep_objects_CXX $p"
17.11348 +	 fi
17.11349 +       else
17.11350 +	 if test -z "$postdep_objects_CXX"; then
17.11351 +	   postdep_objects_CXX="$p"
17.11352 +	 else
17.11353 +	   postdep_objects_CXX="$postdep_objects_CXX $p"
17.11354 +	 fi
17.11355 +       fi
17.11356 +       ;;
17.11357 +
17.11358 +    *) ;; # Ignore the rest.
17.11359 +
17.11360 +    esac
17.11361 +  done
17.11362 +
17.11363 +  # Clean up.
17.11364 +  rm -f a.out a.exe
17.11365 +else
17.11366 +  echo "libtool.m4: error: problem compiling CXX test program"
17.11367 +fi
17.11368 +
17.11369 +$rm -f confest.$objext
17.11370 +
17.11371 +# PORTME: override above test on systems where it is broken
17.11372 +case $host_os in
17.11373 +interix3*)
17.11374 +  # Interix 3.5 installs completely hosed .la files for C++, so rather than
17.11375 +  # hack all around it, let's just trust "g++" to DTRT.
17.11376 +  predep_objects_CXX=
17.11377 +  postdep_objects_CXX=
17.11378 +  postdeps_CXX=
17.11379 +  ;;
17.11380 +
17.11381 +solaris*)
17.11382 +  case $cc_basename in
17.11383 +  CC*)
17.11384 +    # Adding this requires a known-good setup of shared libraries for
17.11385 +    # Sun compiler versions before 5.6, else PIC objects from an old
17.11386 +    # archive will be linked into the output, leading to subtle bugs.
17.11387 +    postdeps_CXX='-lCstd -lCrun'
17.11388 +    ;;
17.11389 +  esac
17.11390 +  ;;
17.11391 +esac
17.11392 +
17.11393 +
17.11394 +case " $postdeps_CXX " in
17.11395 +*" -lc "*) archive_cmds_need_lc_CXX=no ;;
17.11396 +esac
17.11397 +
17.11398 +lt_prog_compiler_wl_CXX=
17.11399 +lt_prog_compiler_pic_CXX=
17.11400 +lt_prog_compiler_static_CXX=
17.11401 +
17.11402 +echo "$as_me:$LINENO: checking for $compiler option to produce PIC" >&5
17.11403 +echo $ECHO_N "checking for $compiler option to produce PIC... $ECHO_C" >&6
17.11404 +
17.11405 +  # C++ specific cases for pic, static, wl, etc.
17.11406 +  if test "$GXX" = yes; then
17.11407 +    lt_prog_compiler_wl_CXX='-Wl,'
17.11408 +    lt_prog_compiler_static_CXX='-static'
17.11409 +
17.11410 +    case $host_os in
17.11411 +    aix*)
17.11412 +      # All AIX code is PIC.
17.11413 +      if test "$host_cpu" = ia64; then
17.11414 +	# AIX 5 now supports IA64 processor
17.11415 +	lt_prog_compiler_static_CXX='-Bstatic'
17.11416 +      fi
17.11417 +      ;;
17.11418 +    amigaos*)
17.11419 +      # FIXME: we need at least 68020 code to build shared libraries, but
17.11420 +      # adding the `-m68020' flag to GCC prevents building anything better,
17.11421 +      # like `-m68040'.
17.11422 +      lt_prog_compiler_pic_CXX='-m68020 -resident32 -malways-restore-a4'
17.11423 +      ;;
17.11424 +    beos* | cygwin* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*)
17.11425 +      # PIC is the default for these OSes.
17.11426 +      ;;
17.11427 +    mingw* | os2* | pw32*)
17.11428 +      # This hack is so that the source file can tell whether it is being
17.11429 +      # built for inclusion in a dll (and should export symbols for example).
17.11430 +      lt_prog_compiler_pic_CXX='-DDLL_EXPORT'
17.11431 +      ;;
17.11432 +    darwin* | rhapsody*)
17.11433 +      # PIC is the default on this platform
17.11434 +      # Common symbols not allowed in MH_DYLIB files
17.11435 +      lt_prog_compiler_pic_CXX='-fno-common'
17.11436 +      ;;
17.11437 +    *djgpp*)
17.11438 +      # DJGPP does not support shared libraries at all
17.11439 +      lt_prog_compiler_pic_CXX=
17.11440 +      ;;
17.11441 +    interix3*)
17.11442 +      # Interix 3.x gcc -fpic/-fPIC options generate broken code.
17.11443 +      # Instead, we relocate shared libraries at runtime.
17.11444 +      ;;
17.11445 +    sysv4*MP*)
17.11446 +      if test -d /usr/nec; then
17.11447 +	lt_prog_compiler_pic_CXX=-Kconform_pic
17.11448 +      fi
17.11449 +      ;;
17.11450 +    hpux*)
17.11451 +      # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but
17.11452 +      # not for PA HP-UX.
17.11453 +      case $host_cpu in
17.11454 +      hppa*64*|ia64*)
17.11455 +	;;
17.11456 +      *)
17.11457 +	lt_prog_compiler_pic_CXX='-fPIC'
17.11458 +	;;
17.11459 +      esac
17.11460 +      ;;
17.11461 +    *)
17.11462 +      lt_prog_compiler_pic_CXX='-fPIC'
17.11463 +      ;;
17.11464 +    esac
17.11465 +  else
17.11466 +    case $host_os in
17.11467 +      aix4* | aix5*)
17.11468 +	# All AIX code is PIC.
17.11469 +	if test "$host_cpu" = ia64; then
17.11470 +	  # AIX 5 now supports IA64 processor
17.11471 +	  lt_prog_compiler_static_CXX='-Bstatic'
17.11472 +	else
17.11473 +	  lt_prog_compiler_static_CXX='-bnso -bI:/lib/syscalls.exp'
17.11474 +	fi
17.11475 +	;;
17.11476 +      chorus*)
17.11477 +	case $cc_basename in
17.11478 +	cxch68*)
17.11479 +	  # Green Hills C++ Compiler
17.11480 +	  # _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"
17.11481 +	  ;;
17.11482 +	esac
17.11483 +	;;
17.11484 +       darwin*)
17.11485 +         # PIC is the default on this platform
17.11486 +         # Common symbols not allowed in MH_DYLIB files
17.11487 +         case $cc_basename in
17.11488 +           xlc*)
17.11489 +           lt_prog_compiler_pic_CXX='-qnocommon'
17.11490 +           lt_prog_compiler_wl_CXX='-Wl,'
17.11491 +           ;;
17.11492 +         esac
17.11493 +       ;;
17.11494 +      dgux*)
17.11495 +	case $cc_basename in
17.11496 +	  ec++*)
17.11497 +	    lt_prog_compiler_pic_CXX='-KPIC'
17.11498 +	    ;;
17.11499 +	  ghcx*)
17.11500 +	    # Green Hills C++ Compiler
17.11501 +	    lt_prog_compiler_pic_CXX='-pic'
17.11502 +	    ;;
17.11503 +	  *)
17.11504 +	    ;;
17.11505 +	esac
17.11506 +	;;
17.11507 +      freebsd* | kfreebsd*-gnu | dragonfly*)
17.11508 +	# FreeBSD uses GNU C++
17.11509 +	;;
17.11510 +      hpux9* | hpux10* | hpux11*)
17.11511 +	case $cc_basename in
17.11512 +	  CC*)
17.11513 +	    lt_prog_compiler_wl_CXX='-Wl,'
17.11514 +	    lt_prog_compiler_static_CXX='${wl}-a ${wl}archive'
17.11515 +	    if test "$host_cpu" != ia64; then
17.11516 +	      lt_prog_compiler_pic_CXX='+Z'
17.11517 +	    fi
17.11518 +	    ;;
17.11519 +	  aCC*)
17.11520 +	    lt_prog_compiler_wl_CXX='-Wl,'
17.11521 +	    lt_prog_compiler_static_CXX='${wl}-a ${wl}archive'
17.11522 +	    case $host_cpu in
17.11523 +	    hppa*64*|ia64*)
17.11524 +	      # +Z the default
17.11525 +	      ;;
17.11526 +	    *)
17.11527 +	      lt_prog_compiler_pic_CXX='+Z'
17.11528 +	      ;;
17.11529 +	    esac
17.11530 +	    ;;
17.11531 +	  *)
17.11532 +	    ;;
17.11533 +	esac
17.11534 +	;;
17.11535 +      interix*)
17.11536 +	# This is c89, which is MS Visual C++ (no shared libs)
17.11537 +	# Anyone wants to do a port?
17.11538 +	;;
17.11539 +      irix5* | irix6* | nonstopux*)
17.11540 +	case $cc_basename in
17.11541 +	  CC*)
17.11542 +	    lt_prog_compiler_wl_CXX='-Wl,'
17.11543 +	    lt_prog_compiler_static_CXX='-non_shared'
17.11544 +	    # CC pic flag -KPIC is the default.
17.11545 +	    ;;
17.11546 +	  *)
17.11547 +	    ;;
17.11548 +	esac
17.11549 +	;;
17.11550 +      linux*)
17.11551 +	case $cc_basename in
17.11552 +	  KCC*)
17.11553 +	    # KAI C++ Compiler
17.11554 +	    lt_prog_compiler_wl_CXX='--backend -Wl,'
17.11555 +	    lt_prog_compiler_pic_CXX='-fPIC'
17.11556 +	    ;;
17.11557 +	  icpc* | ecpc*)
17.11558 +	    # Intel C++
17.11559 +	    lt_prog_compiler_wl_CXX='-Wl,'
17.11560 +	    lt_prog_compiler_pic_CXX='-KPIC'
17.11561 +	    lt_prog_compiler_static_CXX='-static'
17.11562 +	    ;;
17.11563 +	  pgCC*)
17.11564 +	    # Portland Group C++ compiler.
17.11565 +	    lt_prog_compiler_wl_CXX='-Wl,'
17.11566 +	    lt_prog_compiler_pic_CXX='-fpic'
17.11567 +	    lt_prog_compiler_static_CXX='-Bstatic'
17.11568 +	    ;;
17.11569 +	  cxx*)
17.11570 +	    # Compaq C++
17.11571 +	    # Make sure the PIC flag is empty.  It appears that all Alpha
17.11572 +	    # Linux and Compaq Tru64 Unix objects are PIC.
17.11573 +	    lt_prog_compiler_pic_CXX=
17.11574 +	    lt_prog_compiler_static_CXX='-non_shared'
17.11575 +	    ;;
17.11576 +	  *)
17.11577 +	    ;;
17.11578 +	esac
17.11579 +	;;
17.11580 +      lynxos*)
17.11581 +	;;
17.11582 +      m88k*)
17.11583 +	;;
17.11584 +      mvs*)
17.11585 +	case $cc_basename in
17.11586 +	  cxx*)
17.11587 +	    lt_prog_compiler_pic_CXX='-W c,exportall'
17.11588 +	    ;;
17.11589 +	  *)
17.11590 +	    ;;
17.11591 +	esac
17.11592 +	;;
17.11593 +      netbsd* | netbsdelf*-gnu | knetbsd*-gnu)
17.11594 +	;;
17.11595 +      osf3* | osf4* | osf5*)
17.11596 +	case $cc_basename in
17.11597 +	  KCC*)
17.11598 +	    lt_prog_compiler_wl_CXX='--backend -Wl,'
17.11599 +	    ;;
17.11600 +	  RCC*)
17.11601 +	    # Rational C++ 2.4.1
17.11602 +	    lt_prog_compiler_pic_CXX='-pic'
17.11603 +	    ;;
17.11604 +	  cxx*)
17.11605 +	    # Digital/Compaq C++
17.11606 +	    lt_prog_compiler_wl_CXX='-Wl,'
17.11607 +	    # Make sure the PIC flag is empty.  It appears that all Alpha
17.11608 +	    # Linux and Compaq Tru64 Unix objects are PIC.
17.11609 +	    lt_prog_compiler_pic_CXX=
17.11610 +	    lt_prog_compiler_static_CXX='-non_shared'
17.11611 +	    ;;
17.11612 +	  *)
17.11613 +	    ;;
17.11614 +	esac
17.11615 +	;;
17.11616 +      psos*)
17.11617 +	;;
17.11618 +      solaris*)
17.11619 +	case $cc_basename in
17.11620 +	  CC*)
17.11621 +	    # Sun C++ 4.2, 5.x and Centerline C++
17.11622 +	    lt_prog_compiler_pic_CXX='-KPIC'
17.11623 +	    lt_prog_compiler_static_CXX='-Bstatic'
17.11624 +	    lt_prog_compiler_wl_CXX='-Qoption ld '
17.11625 +	    ;;
17.11626 +	  gcx*)
17.11627 +	    # Green Hills C++ Compiler
17.11628 +	    lt_prog_compiler_pic_CXX='-PIC'
17.11629 +	    ;;
17.11630 +	  *)
17.11631 +	    ;;
17.11632 +	esac
17.11633 +	;;
17.11634 +      sunos4*)
17.11635 +	case $cc_basename in
17.11636 +	  CC*)
17.11637 +	    # Sun C++ 4.x
17.11638 +	    lt_prog_compiler_pic_CXX='-pic'
17.11639 +	    lt_prog_compiler_static_CXX='-Bstatic'
17.11640 +	    ;;
17.11641 +	  lcc*)
17.11642 +	    # Lucid
17.11643 +	    lt_prog_compiler_pic_CXX='-pic'
17.11644 +	    ;;
17.11645 +	  *)
17.11646 +	    ;;
17.11647 +	esac
17.11648 +	;;
17.11649 +      tandem*)
17.11650 +	case $cc_basename in
17.11651 +	  NCC*)
17.11652 +	    # NonStop-UX NCC 3.20
17.11653 +	    lt_prog_compiler_pic_CXX='-KPIC'
17.11654 +	    ;;
17.11655 +	  *)
17.11656 +	    ;;
17.11657 +	esac
17.11658 +	;;
17.11659 +      sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*)
17.11660 +	case $cc_basename in
17.11661 +	  CC*)
17.11662 +	    lt_prog_compiler_wl_CXX='-Wl,'
17.11663 +	    lt_prog_compiler_pic_CXX='-KPIC'
17.11664 +	    lt_prog_compiler_static_CXX='-Bstatic'
17.11665 +	    ;;
17.11666 +	esac
17.11667 +	;;
17.11668 +      vxworks*)
17.11669 +	;;
17.11670 +      *)
17.11671 +	lt_prog_compiler_can_build_shared_CXX=no
17.11672 +	;;
17.11673 +    esac
17.11674 +  fi
17.11675 +
17.11676 +echo "$as_me:$LINENO: result: $lt_prog_compiler_pic_CXX" >&5
17.11677 +echo "${ECHO_T}$lt_prog_compiler_pic_CXX" >&6
17.11678 +
17.11679 +#
17.11680 +# Check to make sure the PIC flag actually works.
17.11681 +#
17.11682 +if test -n "$lt_prog_compiler_pic_CXX"; then
17.11683 +
17.11684 +echo "$as_me:$LINENO: checking if $compiler PIC flag $lt_prog_compiler_pic_CXX works" >&5
17.11685 +echo $ECHO_N "checking if $compiler PIC flag $lt_prog_compiler_pic_CXX works... $ECHO_C" >&6
17.11686 +if test "${lt_prog_compiler_pic_works_CXX+set}" = set; then
17.11687 +  echo $ECHO_N "(cached) $ECHO_C" >&6
17.11688 +else
17.11689 +  lt_prog_compiler_pic_works_CXX=no
17.11690 +  ac_outfile=conftest.$ac_objext
17.11691 +   printf "$lt_simple_compile_test_code" > conftest.$ac_ext
17.11692 +   lt_compiler_flag="$lt_prog_compiler_pic_CXX -DPIC"
17.11693 +   # Insert the option either (1) after the last *FLAGS variable, or
17.11694 +   # (2) before a word containing "conftest.", or (3) at the end.
17.11695 +   # Note that $ac_compile itself does not contain backslashes and begins
17.11696 +   # with a dollar sign (not a hyphen), so the echo should work correctly.
17.11697 +   # The option is referenced via a variable to avoid confusing sed.
17.11698 +   lt_compile=`echo "$ac_compile" | $SED \
17.11699 +   -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
17.11700 +   -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
17.11701 +   -e 's:$: $lt_compiler_flag:'`
17.11702 +   (eval echo "\"\$as_me:11699: $lt_compile\"" >&5)
17.11703 +   (eval "$lt_compile" 2>conftest.err)
17.11704 +   ac_status=$?
17.11705 +   cat conftest.err >&5
17.11706 +   echo "$as_me:11703: \$? = $ac_status" >&5
17.11707 +   if (exit $ac_status) && test -s "$ac_outfile"; then
17.11708 +     # The compiler can only warn and ignore the option if not recognized
17.11709 +     # So say no if there are warnings other than the usual output.
17.11710 +     $echo "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' >conftest.exp
17.11711 +     $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2
17.11712 +     if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then
17.11713 +       lt_prog_compiler_pic_works_CXX=yes
17.11714 +     fi
17.11715 +   fi
17.11716 +   $rm conftest*
17.11717 +
17.11718 +fi
17.11719 +echo "$as_me:$LINENO: result: $lt_prog_compiler_pic_works_CXX" >&5
17.11720 +echo "${ECHO_T}$lt_prog_compiler_pic_works_CXX" >&6
17.11721 +
17.11722 +if test x"$lt_prog_compiler_pic_works_CXX" = xyes; then
17.11723 +    case $lt_prog_compiler_pic_CXX in
17.11724 +     "" | " "*) ;;
17.11725 +     *) lt_prog_compiler_pic_CXX=" $lt_prog_compiler_pic_CXX" ;;
17.11726 +     esac
17.11727 +else
17.11728 +    lt_prog_compiler_pic_CXX=
17.11729 +     lt_prog_compiler_can_build_shared_CXX=no
17.11730 +fi
17.11731 +
17.11732 +fi
17.11733 +case $host_os in
17.11734 +  # For platforms which do not support PIC, -DPIC is meaningless:
17.11735 +  *djgpp*)
17.11736 +    lt_prog_compiler_pic_CXX=
17.11737 +    ;;
17.11738 +  *)
17.11739 +    lt_prog_compiler_pic_CXX="$lt_prog_compiler_pic_CXX -DPIC"
17.11740 +    ;;
17.11741 +esac
17.11742 +
17.11743 +#
17.11744 +# Check to make sure the static flag actually works.
17.11745 +#
17.11746 +wl=$lt_prog_compiler_wl_CXX eval lt_tmp_static_flag=\"$lt_prog_compiler_static_CXX\"
17.11747 +echo "$as_me:$LINENO: checking if $compiler static flag $lt_tmp_static_flag works" >&5
17.11748 +echo $ECHO_N "checking if $compiler static flag $lt_tmp_static_flag works... $ECHO_C" >&6
17.11749 +if test "${lt_prog_compiler_static_works_CXX+set}" = set; then
17.11750 +  echo $ECHO_N "(cached) $ECHO_C" >&6
17.11751 +else
17.11752 +  lt_prog_compiler_static_works_CXX=no
17.11753 +   save_LDFLAGS="$LDFLAGS"
17.11754 +   LDFLAGS="$LDFLAGS $lt_tmp_static_flag"
17.11755 +   printf "$lt_simple_link_test_code" > conftest.$ac_ext
17.11756 +   if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then
17.11757 +     # The linker can only warn and ignore the option if not recognized
17.11758 +     # So say no if there are warnings
17.11759 +     if test -s conftest.err; then
17.11760 +       # Append any errors to the config.log.
17.11761 +       cat conftest.err 1>&5
17.11762 +       $echo "X$_lt_linker_boilerplate" | $Xsed -e '/^$/d' > conftest.exp
17.11763 +       $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2
17.11764 +       if diff conftest.exp conftest.er2 >/dev/null; then
17.11765 +         lt_prog_compiler_static_works_CXX=yes
17.11766 +       fi
17.11767 +     else
17.11768 +       lt_prog_compiler_static_works_CXX=yes
17.11769 +     fi
17.11770 +   fi
17.11771 +   $rm conftest*
17.11772 +   LDFLAGS="$save_LDFLAGS"
17.11773 +
17.11774 +fi
17.11775 +echo "$as_me:$LINENO: result: $lt_prog_compiler_static_works_CXX" >&5
17.11776 +echo "${ECHO_T}$lt_prog_compiler_static_works_CXX" >&6
17.11777 +
17.11778 +if test x"$lt_prog_compiler_static_works_CXX" = xyes; then
17.11779 +    :
17.11780 +else
17.11781 +    lt_prog_compiler_static_CXX=
17.11782 +fi
17.11783 +
17.11784 +
17.11785 +echo "$as_me:$LINENO: checking if $compiler supports -c -o file.$ac_objext" >&5
17.11786 +echo $ECHO_N "checking if $compiler supports -c -o file.$ac_objext... $ECHO_C" >&6
17.11787 +if test "${lt_cv_prog_compiler_c_o_CXX+set}" = set; then
17.11788 +  echo $ECHO_N "(cached) $ECHO_C" >&6
17.11789 +else
17.11790 +  lt_cv_prog_compiler_c_o_CXX=no
17.11791 +   $rm -r conftest 2>/dev/null
17.11792 +   mkdir conftest
17.11793 +   cd conftest
17.11794 +   mkdir out
17.11795 +   printf "$lt_simple_compile_test_code" > conftest.$ac_ext
17.11796 +
17.11797 +   lt_compiler_flag="-o out/conftest2.$ac_objext"
17.11798 +   # Insert the option either (1) after the last *FLAGS variable, or
17.11799 +   # (2) before a word containing "conftest.", or (3) at the end.
17.11800 +   # Note that $ac_compile itself does not contain backslashes and begins
17.11801 +   # with a dollar sign (not a hyphen), so the echo should work correctly.
17.11802 +   lt_compile=`echo "$ac_compile" | $SED \
17.11803 +   -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
17.11804 +   -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
17.11805 +   -e 's:$: $lt_compiler_flag:'`
17.11806 +   (eval echo "\"\$as_me:11803: $lt_compile\"" >&5)
17.11807 +   (eval "$lt_compile" 2>out/conftest.err)
17.11808 +   ac_status=$?
17.11809 +   cat out/conftest.err >&5
17.11810 +   echo "$as_me:11807: \$? = $ac_status" >&5
17.11811 +   if (exit $ac_status) && test -s out/conftest2.$ac_objext
17.11812 +   then
17.11813 +     # The compiler can only warn and ignore the option if not recognized
17.11814 +     # So say no if there are warnings
17.11815 +     $echo "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' > out/conftest.exp
17.11816 +     $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2
17.11817 +     if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then
17.11818 +       lt_cv_prog_compiler_c_o_CXX=yes
17.11819 +     fi
17.11820 +   fi
17.11821 +   chmod u+w . 2>&5
17.11822 +   $rm conftest*
17.11823 +   # SGI C++ compiler will create directory out/ii_files/ for
17.11824 +   # template instantiation
17.11825 +   test -d out/ii_files && $rm out/ii_files/* && rmdir out/ii_files
17.11826 +   $rm out/* && rmdir out
17.11827 +   cd ..
17.11828 +   rmdir conftest
17.11829 +   $rm conftest*
17.11830 +
17.11831 +fi
17.11832 +echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_c_o_CXX" >&5
17.11833 +echo "${ECHO_T}$lt_cv_prog_compiler_c_o_CXX" >&6
17.11834 +
17.11835 +
17.11836 +hard_links="nottested"
17.11837 +if test "$lt_cv_prog_compiler_c_o_CXX" = no && test "$need_locks" != no; then
17.11838 +  # do not overwrite the value of need_locks provided by the user
17.11839 +  echo "$as_me:$LINENO: checking if we can lock with hard links" >&5
17.11840 +echo $ECHO_N "checking if we can lock with hard links... $ECHO_C" >&6
17.11841 +  hard_links=yes
17.11842 +  $rm conftest*
17.11843 +  ln conftest.a conftest.b 2>/dev/null && hard_links=no
17.11844 +  touch conftest.a
17.11845 +  ln conftest.a conftest.b 2>&5 || hard_links=no
17.11846 +  ln conftest.a conftest.b 2>/dev/null && hard_links=no
17.11847 +  echo "$as_me:$LINENO: result: $hard_links" >&5
17.11848 +echo "${ECHO_T}$hard_links" >&6
17.11849 +  if test "$hard_links" = no; then
17.11850 +    { echo "$as_me:$LINENO: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&5
17.11851 +echo "$as_me: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&2;}
17.11852 +    need_locks=warn
17.11853 +  fi
17.11854 +else
17.11855 +  need_locks=no
17.11856 +fi
17.11857 +
17.11858 +echo "$as_me:$LINENO: checking whether the $compiler linker ($LD) supports shared libraries" >&5
17.11859 +echo $ECHO_N "checking whether the $compiler linker ($LD) supports shared libraries... $ECHO_C" >&6
17.11860 +
17.11861 +  export_symbols_cmds_CXX='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols'
17.11862 +  case $host_os in
17.11863 +  aix4* | aix5*)
17.11864 +    # If we're using GNU nm, then we don't want the "-C" option.
17.11865 +    # -C means demangle to AIX nm, but means don't demangle with GNU nm
17.11866 +    if $NM -V 2>&1 | grep 'GNU' > /dev/null; then
17.11867 +      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'
17.11868 +    else
17.11869 +      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'
17.11870 +    fi
17.11871 +    ;;
17.11872 +  pw32*)
17.11873 +    export_symbols_cmds_CXX="$ltdll_cmds"
17.11874 +  ;;
17.11875 +  cygwin* | mingw*)
17.11876 +    export_symbols_cmds_CXX='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS] /s/.* \([^ ]*\)/\1 DATA/;/^.* __nm__/s/^.* __nm__\([^ ]*\) [^ ]*/\1 DATA/;/^I /d;/^[AITW] /s/.* //'\'' | sort | uniq > $export_symbols'
17.11877 +  ;;
17.11878 +  kfreebsd*-gnu)
17.11879 +    link_all_deplibs_CXX=no
17.11880 +  ;;
17.11881 +  linux*)
17.11882 +    link_all_deplibs_CXX=no
17.11883 +  ;;
17.11884 +  *)
17.11885 +    export_symbols_cmds_CXX='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols'
17.11886 +  ;;
17.11887 +  esac
17.11888 +
17.11889 +echo "$as_me:$LINENO: result: $ld_shlibs_CXX" >&5
17.11890 +echo "${ECHO_T}$ld_shlibs_CXX" >&6
17.11891 +test "$ld_shlibs_CXX" = no && can_build_shared=no
17.11892 +
17.11893 +#
17.11894 +# Do we need to explicitly link libc?
17.11895 +#
17.11896 +case "x$archive_cmds_need_lc_CXX" in
17.11897 +x|xyes)
17.11898 +  # Assume -lc should be added
17.11899 +  archive_cmds_need_lc_CXX=yes
17.11900 +
17.11901 +  if test "$enable_shared" = yes && test "$GCC" = yes; then
17.11902 +    case $archive_cmds_CXX in
17.11903 +    *'~'*)
17.11904 +      # FIXME: we may have to deal with multi-command sequences.
17.11905 +      ;;
17.11906 +    '$CC '*)
17.11907 +      # Test whether the compiler implicitly links with -lc since on some
17.11908 +      # systems, -lgcc has to come before -lc. If gcc already passes -lc
17.11909 +      # to ld, don't add -lc before -lgcc.
17.11910 +      echo "$as_me:$LINENO: checking whether -lc should be explicitly linked in" >&5
17.11911 +echo $ECHO_N "checking whether -lc should be explicitly linked in... $ECHO_C" >&6
17.11912 +      $rm conftest*
17.11913 +      printf "$lt_simple_compile_test_code" > conftest.$ac_ext
17.11914 +
17.11915 +      if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
17.11916 +  (eval $ac_compile) 2>&5
17.11917 +  ac_status=$?
17.11918 +  echo "$as_me:$LINENO: \$? = $ac_status" >&5
17.11919 +  (exit $ac_status); } 2>conftest.err; then
17.11920 +        soname=conftest
17.11921 +        lib=conftest
17.11922 +        libobjs=conftest.$ac_objext
17.11923 +        deplibs=
17.11924 +        wl=$lt_prog_compiler_wl_CXX
17.11925 +	pic_flag=$lt_prog_compiler_pic_CXX
17.11926 +        compiler_flags=-v
17.11927 +        linker_flags=-v
17.11928 +        verstring=
17.11929 +        output_objdir=.
17.11930 +        libname=conftest
17.11931 +        lt_save_allow_undefined_flag=$allow_undefined_flag_CXX
17.11932 +        allow_undefined_flag_CXX=
17.11933 +        if { (eval echo "$as_me:$LINENO: \"$archive_cmds_CXX 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1\"") >&5
17.11934 +  (eval $archive_cmds_CXX 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1) 2>&5
17.11935 +  ac_status=$?
17.11936 +  echo "$as_me:$LINENO: \$? = $ac_status" >&5
17.11937 +  (exit $ac_status); }
17.11938 +        then
17.11939 +	  archive_cmds_need_lc_CXX=no
17.11940 +        else
17.11941 +	  archive_cmds_need_lc_CXX=yes
17.11942 +        fi
17.11943 +        allow_undefined_flag_CXX=$lt_save_allow_undefined_flag
17.11944 +      else
17.11945 +        cat conftest.err 1>&5
17.11946 +      fi
17.11947 +      $rm conftest*
17.11948 +      echo "$as_me:$LINENO: result: $archive_cmds_need_lc_CXX" >&5
17.11949 +echo "${ECHO_T}$archive_cmds_need_lc_CXX" >&6
17.11950 +      ;;
17.11951 +    esac
17.11952 +  fi
17.11953 +  ;;
17.11954 +esac
17.11955 +
17.11956 +echo "$as_me:$LINENO: checking dynamic linker characteristics" >&5
17.11957 +echo $ECHO_N "checking dynamic linker characteristics... $ECHO_C" >&6
17.11958 +library_names_spec=
17.11959 +libname_spec='lib$name'
17.11960 +soname_spec=
17.11961 +shrext_cmds=".so"
17.11962 +postinstall_cmds=
17.11963 +postuninstall_cmds=
17.11964 +finish_cmds=
17.11965 +finish_eval=
17.11966 +shlibpath_var=
17.11967 +shlibpath_overrides_runpath=unknown
17.11968 +version_type=none
17.11969 +dynamic_linker="$host_os ld.so"
17.11970 +sys_lib_dlsearch_path_spec="/lib /usr/lib"
17.11971 +if test "$GCC" = yes; then
17.11972 +  sys_lib_search_path_spec=`$CC -print-search-dirs | grep "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"`
17.11973 +  if echo "$sys_lib_search_path_spec" | grep ';' >/dev/null ; then
17.11974 +    # if the path contains ";" then we assume it to be the separator
17.11975 +    # otherwise default to the standard path separator (i.e. ":") - it is
17.11976 +    # assumed that no part of a normal pathname contains ";" but that should
17.11977 +    # okay in the real world where ";" in dirpaths is itself problematic.
17.11978 +    sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'`
17.11979 +  else
17.11980 +    sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED  -e "s/$PATH_SEPARATOR/ /g"`
17.11981 +  fi
17.11982 +else
17.11983 +  sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib"
17.11984 +fi
17.11985 +need_lib_prefix=unknown
17.11986 +hardcode_into_libs=no
17.11987 +
17.11988 +# when you set need_version to no, make sure it does not cause -set_version
17.11989 +# flags to be left without arguments
17.11990 +need_version=unknown
17.11991 +
17.11992 +case $host_os in
17.11993 +aix3*)
17.11994 +  version_type=linux
17.11995 +  library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a'
17.11996 +  shlibpath_var=LIBPATH
17.11997 +
17.11998 +  # AIX 3 has no versioning support, so we append a major version to the name.
17.11999 +  soname_spec='${libname}${release}${shared_ext}$major'
17.12000 +  ;;
17.12001 +
17.12002 +aix4* | aix5*)
17.12003 +  version_type=linux
17.12004 +  need_lib_prefix=no
17.12005 +  need_version=no
17.12006 +  hardcode_into_libs=yes
17.12007 +  if test "$host_cpu" = ia64; then
17.12008 +    # AIX 5 supports IA64
17.12009 +    library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}'
17.12010 +    shlibpath_var=LD_LIBRARY_PATH
17.12011 +  else
17.12012 +    # With GCC up to 2.95.x, collect2 would create an import file
17.12013 +    # for dependence libraries.  The import file would start with
17.12014 +    # the line `#! .'.  This would cause the generated library to
17.12015 +    # depend on `.', always an invalid library.  This was fixed in
17.12016 +    # development snapshots of GCC prior to 3.0.
17.12017 +    case $host_os in
17.12018 +      aix4 | aix4.[01] | aix4.[01].*)
17.12019 +      if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)'
17.12020 +	   echo ' yes '
17.12021 +	   echo '#endif'; } | ${CC} -E - | grep yes > /dev/null; then
17.12022 +	:
17.12023 +      else
17.12024 +	can_build_shared=no
17.12025 +      fi
17.12026 +      ;;
17.12027 +    esac
17.12028 +    # AIX (on Power*) has no versioning support, so currently we can not hardcode correct
17.12029 +    # soname into executable. Probably we can add versioning support to
17.12030 +    # collect2, so additional links can be useful in future.
17.12031 +    if test "$aix_use_runtimelinking" = yes; then
17.12032 +      # If using run time linking (on AIX 4.2 or later) use lib<name>.so
17.12033 +      # instead of lib<name>.a to let people know that these are not
17.12034 +      # typical AIX shared libraries.
17.12035 +      library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
17.12036 +    else
17.12037 +      # We preserve .a as extension for shared libraries through AIX4.2
17.12038 +      # and later when we are not doing run time linking.
17.12039 +      library_names_spec='${libname}${release}.a $libname.a'
17.12040 +      soname_spec='${libname}${release}${shared_ext}$major'
17.12041 +    fi
17.12042 +    shlibpath_var=LIBPATH
17.12043 +  fi
17.12044 +  ;;
17.12045 +
17.12046 +amigaos*)
17.12047 +  library_names_spec='$libname.ixlibrary $libname.a'
17.12048 +  # Create ${libname}_ixlibrary.a entries in /sys/libs.
17.12049 +  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'
17.12050 +  ;;
17.12051 +
17.12052 +beos*)
17.12053 +  library_names_spec='${libname}${shared_ext}'
17.12054 +  dynamic_linker="$host_os ld.so"
17.12055 +  shlibpath_var=LIBRARY_PATH
17.12056 +  ;;
17.12057 +
17.12058 +bsdi[45]*)
17.12059 +  version_type=linux
17.12060 +  need_version=no
17.12061 +  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
17.12062 +  soname_spec='${libname}${release}${shared_ext}$major'
17.12063 +  finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir'
17.12064 +  shlibpath_var=LD_LIBRARY_PATH
17.12065 +  sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib"
17.12066 +  sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib"
17.12067 +  # the default ld.so.conf also contains /usr/contrib/lib and
17.12068 +  # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow
17.12069 +  # libtool to hard-code these into programs
17.12070 +  ;;
17.12071 +
17.12072 +cygwin* | mingw* | pw32*)
17.12073 +  version_type=windows
17.12074 +  shrext_cmds=".dll"
17.12075 +  need_version=no
17.12076 +  need_lib_prefix=no
17.12077 +
17.12078 +  case $GCC,$host_os in
17.12079 +  yes,cygwin* | yes,mingw* | yes,pw32*)
17.12080 +    library_names_spec='$libname.dll.a'
17.12081 +    # DLL is installed to $(libdir)/../bin by postinstall_cmds
17.12082 +    postinstall_cmds='base_file=`basename \${file}`~
17.12083 +      dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i;echo \$dlname'\''`~
17.12084 +      dldir=$destdir/`dirname \$dlpath`~
17.12085 +      test -d \$dldir || mkdir -p \$dldir~
17.12086 +      $install_prog $dir/$dlname \$dldir/$dlname~
17.12087 +      chmod a+x \$dldir/$dlname'
17.12088 +    postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~
17.12089 +      dlpath=$dir/\$dldll~
17.12090 +       $rm \$dlpath'
17.12091 +    shlibpath_overrides_runpath=yes
17.12092 +
17.12093 +    case $host_os in
17.12094 +    cygwin*)
17.12095 +      # Cygwin DLLs use 'cyg' prefix rather than 'lib'
17.12096 +      soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}'
17.12097 +      sys_lib_search_path_spec="/usr/lib /lib/w32api /lib /usr/local/lib"
17.12098 +      ;;
17.12099 +    mingw*)
17.12100 +      # MinGW DLLs use traditional 'lib' prefix
17.12101 +      soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}'
17.12102 +      sys_lib_search_path_spec=`$CC -print-search-dirs | grep "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"`
17.12103 +      if echo "$sys_lib_search_path_spec" | grep ';[c-zC-Z]:/' >/dev/null; then
17.12104 +        # It is most probably a Windows format PATH printed by
17.12105 +        # mingw gcc, but we are running on Cygwin. Gcc prints its search
17.12106 +        # path with ; separators, and with drive letters. We can handle the
17.12107 +        # drive letters (cygwin fileutils understands them), so leave them,
17.12108 +        # especially as we might pass files found there to a mingw objdump,
17.12109 +        # which wouldn't understand a cygwinified path. Ahh.
17.12110 +        sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'`
17.12111 +      else
17.12112 +        sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED  -e "s/$PATH_SEPARATOR/ /g"`
17.12113 +      fi
17.12114 +      ;;
17.12115 +    pw32*)
17.12116 +      # pw32 DLLs use 'pw' prefix rather than 'lib'
17.12117 +      library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}'
17.12118 +      ;;
17.12119 +    esac
17.12120 +    ;;
17.12121 +
17.12122 +  *)
17.12123 +    library_names_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext} $libname.lib'
17.12124 +    ;;
17.12125 +  esac
17.12126 +  dynamic_linker='Win32 ld.exe'
17.12127 +  # FIXME: first we should search . and the directory the executable is in
17.12128 +  shlibpath_var=PATH
17.12129 +  ;;
17.12130 +
17.12131 +darwin* | rhapsody*)
17.12132 +  dynamic_linker="$host_os dyld"
17.12133 +  version_type=darwin
17.12134 +  need_lib_prefix=no
17.12135 +  need_version=no
17.12136 +  library_names_spec='${libname}${release}${versuffix}$shared_ext ${libname}${release}${major}$shared_ext ${libname}$shared_ext'
17.12137 +  soname_spec='${libname}${release}${major}$shared_ext'
17.12138 +  shlibpath_overrides_runpath=yes
17.12139 +  shlibpath_var=DYLD_LIBRARY_PATH
17.12140 +  shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`'
17.12141 +  # Apple's gcc prints 'gcc -print-search-dirs' doesn't operate the same.
17.12142 +  if test "$GCC" = yes; then
17.12143 +    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"`
17.12144 +  else
17.12145 +    sys_lib_search_path_spec='/lib /usr/lib /usr/local/lib'
17.12146 +  fi
17.12147 +  sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib'
17.12148 +  ;;
17.12149 +
17.12150 +dgux*)
17.12151 +  version_type=linux
17.12152 +  need_lib_prefix=no
17.12153 +  need_version=no
17.12154 +  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext'
17.12155 +  soname_spec='${libname}${release}${shared_ext}$major'
17.12156 +  shlibpath_var=LD_LIBRARY_PATH
17.12157 +  ;;
17.12158 +
17.12159 +freebsd1*)
17.12160 +  dynamic_linker=no
17.12161 +  ;;
17.12162 +
17.12163 +kfreebsd*-gnu)
17.12164 +  version_type=linux
17.12165 +  need_lib_prefix=no
17.12166 +  need_version=no
17.12167 +  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
17.12168 +  soname_spec='${libname}${release}${shared_ext}$major'
17.12169 +  shlibpath_var=LD_LIBRARY_PATH
17.12170 +  shlibpath_overrides_runpath=no
17.12171 +  hardcode_into_libs=yes
17.12172 +  dynamic_linker='GNU ld.so'
17.12173 +  ;;
17.12174 +
17.12175 +freebsd* | dragonfly*)
17.12176 +  # DragonFly does not have aout.  When/if they implement a new
17.12177 +  # versioning mechanism, adjust this.
17.12178 +  if test -x /usr/bin/objformat; then
17.12179 +    objformat=`/usr/bin/objformat`
17.12180 +  else
17.12181 +    case $host_os in
17.12182 +    freebsd[123]*) objformat=aout ;;
17.12183 +    *) objformat=elf ;;
17.12184 +    esac
17.12185 +  fi
17.12186 +  version_type=freebsd-$objformat
17.12187 +  case $version_type in
17.12188 +    freebsd-elf*)
17.12189 +      library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}'
17.12190 +      need_version=no
17.12191 +      need_lib_prefix=no
17.12192 +      ;;
17.12193 +    freebsd-*)
17.12194 +      library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix'
17.12195 +      need_version=yes
17.12196 +      ;;
17.12197 +  esac
17.12198 +  shlibpath_var=LD_LIBRARY_PATH
17.12199 +  case $host_os in
17.12200 +  freebsd2*)
17.12201 +    shlibpath_overrides_runpath=yes
17.12202 +    ;;
17.12203 +  freebsd3.[01]* | freebsdelf3.[01]*)
17.12204 +    shlibpath_overrides_runpath=yes
17.12205 +    hardcode_into_libs=yes
17.12206 +    ;;
17.12207 +  freebsd3.[2-9]* | freebsdelf3.[2-9]* | \
17.12208 +  freebsd4.[0-5] | freebsdelf4.[0-5] | freebsd4.1.1 | freebsdelf4.1.1)
17.12209 +    shlibpath_overrides_runpath=no
17.12210 +    hardcode_into_libs=yes
17.12211 +    ;;
17.12212 +  freebsd*) # from 4.6 on
17.12213 +    shlibpath_overrides_runpath=yes
17.12214 +    hardcode_into_libs=yes
17.12215 +    ;;
17.12216 +  esac
17.12217 +  ;;
17.12218 +
17.12219 +gnu*)
17.12220 +  version_type=linux
17.12221 +  need_lib_prefix=no
17.12222 +  need_version=no
17.12223 +  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}'
17.12224 +  soname_spec='${libname}${release}${shared_ext}$major'
17.12225 +  shlibpath_var=LD_LIBRARY_PATH
17.12226 +  hardcode_into_libs=yes
17.12227 +  ;;
17.12228 +
17.12229 +hpux9* | hpux10* | hpux11*)
17.12230 +  # Give a soname corresponding to the major version so that dld.sl refuses to
17.12231 +  # link against other versions.
17.12232 +  version_type=sunos
17.12233 +  need_lib_prefix=no
17.12234 +  need_version=no
17.12235 +  case $host_cpu in
17.12236 +  ia64*)
17.12237 +    shrext_cmds='.so'
17.12238 +    hardcode_into_libs=yes
17.12239 +    dynamic_linker="$host_os dld.so"
17.12240 +    shlibpath_var=LD_LIBRARY_PATH
17.12241 +    shlibpath_overrides_runpath=yes # Unless +noenvvar is specified.
17.12242 +    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
17.12243 +    soname_spec='${libname}${release}${shared_ext}$major'
17.12244 +    if test "X$HPUX_IA64_MODE" = X32; then
17.12245 +      sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib"
17.12246 +    else
17.12247 +      sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64"
17.12248 +    fi
17.12249 +    sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec
17.12250 +    ;;
17.12251 +   hppa*64*)
17.12252 +     shrext_cmds='.sl'
17.12253 +     hardcode_into_libs=yes
17.12254 +     dynamic_linker="$host_os dld.sl"
17.12255 +     shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH
17.12256 +     shlibpath_overrides_runpath=yes # Unless +noenvvar is specified.
17.12257 +     library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
17.12258 +     soname_spec='${libname}${release}${shared_ext}$major'
17.12259 +     sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64"
17.12260 +     sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec
17.12261 +     ;;
17.12262 +   *)
17.12263 +    shrext_cmds='.sl'
17.12264 +    dynamic_linker="$host_os dld.sl"
17.12265 +    shlibpath_var=SHLIB_PATH
17.12266 +    shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH
17.12267 +    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
17.12268 +    soname_spec='${libname}${release}${shared_ext}$major'
17.12269 +    ;;
17.12270 +  esac
17.12271 +  # HP-UX runs *really* slowly unless shared libraries are mode 555.
17.12272 +  postinstall_cmds='chmod 555 $lib'
17.12273 +  ;;
17.12274 +
17.12275 +interix3*)
17.12276 +  version_type=linux
17.12277 +  need_lib_prefix=no
17.12278 +  need_version=no
17.12279 +  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
17.12280 +  soname_spec='${libname}${release}${shared_ext}$major'
17.12281 +  dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)'
17.12282 +  shlibpath_var=LD_LIBRARY_PATH
17.12283 +  shlibpath_overrides_runpath=no
17.12284 +  hardcode_into_libs=yes
17.12285 +  ;;
17.12286 +
17.12287 +irix5* | irix6* | nonstopux*)
17.12288 +  case $host_os in
17.12289 +    nonstopux*) version_type=nonstopux ;;
17.12290 +    *)
17.12291 +	if test "$lt_cv_prog_gnu_ld" = yes; then
17.12292 +		version_type=linux
17.12293 +	else
17.12294 +		version_type=irix
17.12295 +	fi ;;
17.12296 +  esac
17.12297 +  need_lib_prefix=no
17.12298 +  need_version=no
17.12299 +  soname_spec='${libname}${release}${shared_ext}$major'
17.12300 +  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}'
17.12301 +  case $host_os in
17.12302 +  irix5* | nonstopux*)
17.12303 +    libsuff= shlibsuff=
17.12304 +    ;;
17.12305 +  *)
17.12306 +    case $LD in # libtool.m4 will add one of these switches to LD
17.12307 +    *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ")
17.12308 +      libsuff= shlibsuff= libmagic=32-bit;;
17.12309 +    *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ")
17.12310 +      libsuff=32 shlibsuff=N32 libmagic=N32;;
17.12311 +    *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ")
17.12312 +      libsuff=64 shlibsuff=64 libmagic=64-bit;;
17.12313 +    *) libsuff= shlibsuff= libmagic=never-match;;
17.12314 +    esac
17.12315 +    ;;
17.12316 +  esac
17.12317 +  shlibpath_var=LD_LIBRARY${shlibsuff}_PATH
17.12318 +  shlibpath_overrides_runpath=no
17.12319 +  sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}"
17.12320 +  sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}"
17.12321 +  hardcode_into_libs=yes
17.12322 +  ;;
17.12323 +
17.12324 +# No shared lib support for Linux oldld, aout, or coff.
17.12325 +linux*oldld* | linux*aout* | linux*coff*)
17.12326 +  dynamic_linker=no
17.12327 +  ;;
17.12328 +
17.12329 +# This must be Linux ELF.
17.12330 +linux*)
17.12331 +  version_type=linux
17.12332 +  need_lib_prefix=no
17.12333 +  need_version=no
17.12334 +  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
17.12335 +  soname_spec='${libname}${release}${shared_ext}$major'
17.12336 +  finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir'
17.12337 +  shlibpath_var=LD_LIBRARY_PATH
17.12338 +  shlibpath_overrides_runpath=no
17.12339 +  # This implies no fast_install, which is unacceptable.
17.12340 +  # Some rework will be needed to allow for fast_install
17.12341 +  # before this can be enabled.
17.12342 +  hardcode_into_libs=yes
17.12343 +
17.12344 +  # Append ld.so.conf contents to the search path
17.12345 +  if test -f /etc/ld.so.conf; then
17.12346 +    lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;s/[:,	]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;/^$/d' | tr '\n' ' '`
17.12347 +    sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra"
17.12348 +  fi
17.12349 +
17.12350 +  # We used to test for /lib/ld.so.1 and disable shared libraries on
17.12351 +  # powerpc, because MkLinux only supported shared libraries with the
17.12352 +  # GNU dynamic linker.  Since this was broken with cross compilers,
17.12353 +  # most powerpc-linux boxes support dynamic linking these days and
17.12354 +  # people can always --disable-shared, the test was removed, and we
17.12355 +  # assume the GNU/Linux dynamic linker is in use.
17.12356 +  dynamic_linker='GNU/Linux ld.so'
17.12357 +  ;;
17.12358 +
17.12359 +netbsdelf*-gnu)
17.12360 +  version_type=linux
17.12361 +  need_lib_prefix=no
17.12362 +  need_version=no
17.12363 +  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
17.12364 +  soname_spec='${libname}${release}${shared_ext}$major'
17.12365 +  shlibpath_var=LD_LIBRARY_PATH
17.12366 +  shlibpath_overrides_runpath=no
17.12367 +  hardcode_into_libs=yes
17.12368 +  dynamic_linker='NetBSD ld.elf_so'
17.12369 +  ;;
17.12370 +
17.12371 +knetbsd*-gnu)
17.12372 +  version_type=linux
17.12373 +  need_lib_prefix=no
17.12374 +  need_version=no
17.12375 +  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
17.12376 +  soname_spec='${libname}${release}${shared_ext}$major'
17.12377 +  shlibpath_var=LD_LIBRARY_PATH
17.12378 +  shlibpath_overrides_runpath=no
17.12379 +  hardcode_into_libs=yes
17.12380 +  dynamic_linker='GNU ld.so'
17.12381 +  ;;
17.12382 +
17.12383 +netbsd*)
17.12384 +  version_type=sunos
17.12385 +  need_lib_prefix=no
17.12386 +  need_version=no
17.12387 +  if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then
17.12388 +    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
17.12389 +    finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir'
17.12390 +    dynamic_linker='NetBSD (a.out) ld.so'
17.12391 +  else
17.12392 +    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
17.12393 +    soname_spec='${libname}${release}${shared_ext}$major'
17.12394 +    dynamic_linker='NetBSD ld.elf_so'
17.12395 +  fi
17.12396 +  shlibpath_var=LD_LIBRARY_PATH
17.12397 +  shlibpath_overrides_runpath=yes
17.12398 +  hardcode_into_libs=yes
17.12399 +  ;;
17.12400 +
17.12401 +newsos6)
17.12402 +  version_type=linux
17.12403 +  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
17.12404 +  shlibpath_var=LD_LIBRARY_PATH
17.12405 +  shlibpath_overrides_runpath=yes
17.12406 +  ;;
17.12407 +
17.12408 +nto-qnx*)
17.12409 +  version_type=linux
17.12410 +  need_lib_prefix=no
17.12411 +  need_version=no
17.12412 +  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
17.12413 +  soname_spec='${libname}${release}${shared_ext}$major'
17.12414 +  shlibpath_var=LD_LIBRARY_PATH
17.12415 +  shlibpath_overrides_runpath=yes
17.12416 +  ;;
17.12417 +
17.12418 +openbsd*)
17.12419 +  version_type=sunos
17.12420 +  sys_lib_dlsearch_path_spec="/usr/lib"
17.12421 +  need_lib_prefix=no
17.12422 +  # Some older versions of OpenBSD (3.3 at least) *do* need versioned libs.
17.12423 +  case $host_os in
17.12424 +    openbsd3.3 | openbsd3.3.*) need_version=yes ;;
17.12425 +    *)                         need_version=no  ;;
17.12426 +  esac
17.12427 +  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
17.12428 +  finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir'
17.12429 +  shlibpath_var=LD_LIBRARY_PATH
17.12430 +  if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
17.12431 +    case $host_os in
17.12432 +      openbsd2.[89] | openbsd2.[89].*)
17.12433 +	shlibpath_overrides_runpath=no
17.12434 +	;;
17.12435 +      *)
17.12436 +	shlibpath_overrides_runpath=yes
17.12437 +	;;
17.12438 +      esac
17.12439 +  else
17.12440 +    shlibpath_overrides_runpath=yes
17.12441 +  fi
17.12442 +  ;;
17.12443 +
17.12444 +os2*)
17.12445 +  libname_spec='$name'
17.12446 +  shrext_cmds=".dll"
17.12447 +  need_lib_prefix=no
17.12448 +  library_names_spec='$libname${shared_ext} $libname.a'
17.12449 +  dynamic_linker='OS/2 ld.exe'
17.12450 +  shlibpath_var=LIBPATH
17.12451 +  ;;
17.12452 +
17.12453 +osf3* | osf4* | osf5*)
17.12454 +  version_type=osf
17.12455 +  need_lib_prefix=no
17.12456 +  need_version=no
17.12457 +  soname_spec='${libname}${release}${shared_ext}$major'
17.12458 +  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
17.12459 +  shlibpath_var=LD_LIBRARY_PATH
17.12460 +  sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib"
17.12461 +  sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec"
17.12462 +  ;;
17.12463 +
17.12464 +solaris*)
17.12465 +  version_type=linux
17.12466 +  need_lib_prefix=no
17.12467 +  need_version=no
17.12468 +  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
17.12469 +  soname_spec='${libname}${release}${shared_ext}$major'
17.12470 +  shlibpath_var=LD_LIBRARY_PATH
17.12471 +  shlibpath_overrides_runpath=yes
17.12472 +  hardcode_into_libs=yes
17.12473 +  # ldd complains unless libraries are executable
17.12474 +  postinstall_cmds='chmod +x $lib'
17.12475 +  ;;
17.12476 +
17.12477 +sunos4*)
17.12478 +  version_type=sunos
17.12479 +  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
17.12480 +  finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir'
17.12481 +  shlibpath_var=LD_LIBRARY_PATH
17.12482 +  shlibpath_overrides_runpath=yes
17.12483 +  if test "$with_gnu_ld" = yes; then
17.12484 +    need_lib_prefix=no
17.12485 +  fi
17.12486 +  need_version=yes
17.12487 +  ;;
17.12488 +
17.12489 +sysv4 | sysv4.3*)
17.12490 +  version_type=linux
17.12491 +  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
17.12492 +  soname_spec='${libname}${release}${shared_ext}$major'
17.12493 +  shlibpath_var=LD_LIBRARY_PATH
17.12494 +  case $host_vendor in
17.12495 +    sni)
17.12496 +      shlibpath_overrides_runpath=no
17.12497 +      need_lib_prefix=no
17.12498 +      export_dynamic_flag_spec='${wl}-Blargedynsym'
17.12499 +      runpath_var=LD_RUN_PATH
17.12500 +      ;;
17.12501 +    siemens)
17.12502 +      need_lib_prefix=no
17.12503 +      ;;
17.12504 +    motorola)
17.12505 +      need_lib_prefix=no
17.12506 +      need_version=no
17.12507 +      shlibpath_overrides_runpath=no
17.12508 +      sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib'
17.12509 +      ;;
17.12510 +  esac
17.12511 +  ;;
17.12512 +
17.12513 +sysv4*MP*)
17.12514 +  if test -d /usr/nec ;then
17.12515 +    version_type=linux
17.12516 +    library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}'
17.12517 +    soname_spec='$libname${shared_ext}.$major'
17.12518 +    shlibpath_var=LD_LIBRARY_PATH
17.12519 +  fi
17.12520 +  ;;
17.12521 +
17.12522 +sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*)
17.12523 +  version_type=freebsd-elf
17.12524 +  need_lib_prefix=no
17.12525 +  need_version=no
17.12526 +  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}'
17.12527 +  soname_spec='${libname}${release}${shared_ext}$major'
17.12528 +  shlibpath_var=LD_LIBRARY_PATH
17.12529 +  hardcode_into_libs=yes
17.12530 +  if test "$with_gnu_ld" = yes; then
17.12531 +    sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib'
17.12532 +    shlibpath_overrides_runpath=no
17.12533 +  else
17.12534 +    sys_lib_search_path_spec='/usr/ccs/lib /usr/lib'
17.12535 +    shlibpath_overrides_runpath=yes
17.12536 +    case $host_os in
17.12537 +      sco3.2v5*)
17.12538 +        sys_lib_search_path_spec="$sys_lib_search_path_spec /lib"
17.12539 +	;;
17.12540 +    esac
17.12541 +  fi
17.12542 +  sys_lib_dlsearch_path_spec='/usr/lib'
17.12543 +  ;;
17.12544 +
17.12545 +uts4*)
17.12546 +  version_type=linux
17.12547 +  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
17.12548 +  soname_spec='${libname}${release}${shared_ext}$major'
17.12549 +  shlibpath_var=LD_LIBRARY_PATH
17.12550 +  ;;
17.12551 +
17.12552 +*)
17.12553 +  dynamic_linker=no
17.12554 +  ;;
17.12555 +esac
17.12556 +echo "$as_me:$LINENO: result: $dynamic_linker" >&5
17.12557 +echo "${ECHO_T}$dynamic_linker" >&6
17.12558 +test "$dynamic_linker" = no && can_build_shared=no
17.12559 +
17.12560 +variables_saved_for_relink="PATH $shlibpath_var $runpath_var"
17.12561 +if test "$GCC" = yes; then
17.12562 +  variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH"
17.12563 +fi
17.12564 +
17.12565 +echo "$as_me:$LINENO: checking how to hardcode library paths into programs" >&5
17.12566 +echo $ECHO_N "checking how to hardcode library paths into programs... $ECHO_C" >&6
17.12567 +hardcode_action_CXX=
17.12568 +if test -n "$hardcode_libdir_flag_spec_CXX" || \
17.12569 +   test -n "$runpath_var_CXX" || \
17.12570 +   test "X$hardcode_automatic_CXX" = "Xyes" ; then
17.12571 +
17.12572 +  # We can hardcode non-existant directories.
17.12573 +  if test "$hardcode_direct_CXX" != no &&
17.12574 +     # If the only mechanism to avoid hardcoding is shlibpath_var, we
17.12575 +     # have to relink, otherwise we might link with an installed library
17.12576 +     # when we should be linking with a yet-to-be-installed one
17.12577 +     ## test "$_LT_AC_TAGVAR(hardcode_shlibpath_var, CXX)" != no &&
17.12578 +     test "$hardcode_minus_L_CXX" != no; then
17.12579 +    # Linking always hardcodes the temporary library directory.
17.12580 +    hardcode_action_CXX=relink
17.12581 +  else
17.12582 +    # We can link without hardcoding, and we can hardcode nonexisting dirs.
17.12583 +    hardcode_action_CXX=immediate
17.12584 +  fi
17.12585 +else
17.12586 +  # We cannot hardcode anything, or else we can only hardcode existing
17.12587 +  # directories.
17.12588 +  hardcode_action_CXX=unsupported
17.12589 +fi
17.12590 +echo "$as_me:$LINENO: result: $hardcode_action_CXX" >&5
17.12591 +echo "${ECHO_T}$hardcode_action_CXX" >&6
17.12592 +
17.12593 +if test "$hardcode_action_CXX" = relink; then
17.12594 +  # Fast installation is not supported
17.12595 +  enable_fast_install=no
17.12596 +elif test "$shlibpath_overrides_runpath" = yes ||
17.12597 +     test "$enable_shared" = no; then
17.12598 +  # Fast installation is not necessary
17.12599 +  enable_fast_install=needless
17.12600 +fi
17.12601 +
17.12602 +
17.12603 +# The else clause should only fire when bootstrapping the
17.12604 +# libtool distribution, otherwise you forgot to ship ltmain.sh
17.12605 +# with your package, and you will get complaints that there are
17.12606 +# no rules to generate ltmain.sh.
17.12607 +if test -f "$ltmain"; then
17.12608 +  # See if we are running on zsh, and set the options which allow our commands through
17.12609 +  # without removal of \ escapes.
17.12610 +  if test -n "${ZSH_VERSION+set}" ; then
17.12611 +    setopt NO_GLOB_SUBST
17.12612 +  fi
17.12613 +  # Now quote all the things that may contain metacharacters while being
17.12614 +  # careful not to overquote the AC_SUBSTed values.  We take copies of the
17.12615 +  # variables and quote the copies for generation of the libtool script.
17.12616 +  for var in echo old_CC old_CFLAGS AR AR_FLAGS EGREP RANLIB LN_S LTCC LTCFLAGS NM \
17.12617 +    SED SHELL STRIP \
17.12618 +    libname_spec library_names_spec soname_spec extract_expsyms_cmds \
17.12619 +    old_striplib striplib file_magic_cmd finish_cmds finish_eval \
17.12620 +    deplibs_check_method reload_flag reload_cmds need_locks \
17.12621 +    lt_cv_sys_global_symbol_pipe lt_cv_sys_global_symbol_to_cdecl \
17.12622 +    lt_cv_sys_global_symbol_to_c_name_address \
17.12623 +    sys_lib_search_path_spec sys_lib_dlsearch_path_spec \
17.12624 +    old_postinstall_cmds old_postuninstall_cmds \
17.12625 +    compiler_CXX \
17.12626 +    CC_CXX \
17.12627 +    LD_CXX \
17.12628 +    lt_prog_compiler_wl_CXX \
17.12629 +    lt_prog_compiler_pic_CXX \
17.12630 +    lt_prog_compiler_static_CXX \
17.12631 +    lt_prog_compiler_no_builtin_flag_CXX \
17.12632 +    export_dynamic_flag_spec_CXX \
17.12633 +    thread_safe_flag_spec_CXX \
17.12634 +    whole_archive_flag_spec_CXX \
17.12635 +    enable_shared_with_static_runtimes_CXX \
17.12636 +    old_archive_cmds_CXX \
17.12637 +    old_archive_from_new_cmds_CXX \
17.12638 +    predep_objects_CXX \
17.12639 +    postdep_objects_CXX \
17.12640 +    predeps_CXX \
17.12641 +    postdeps_CXX \
17.12642 +    compiler_lib_search_path_CXX \
17.12643 +    archive_cmds_CXX \
17.12644 +    archive_expsym_cmds_CXX \
17.12645 +    postinstall_cmds_CXX \
17.12646 +    postuninstall_cmds_CXX \
17.12647 +    old_archive_from_expsyms_cmds_CXX \
17.12648 +    allow_undefined_flag_CXX \
17.12649 +    no_undefined_flag_CXX \
17.12650 +    export_symbols_cmds_CXX \
17.12651 +    hardcode_libdir_flag_spec_CXX \
17.12652 +    hardcode_libdir_flag_spec_ld_CXX \
17.12653 +    hardcode_libdir_separator_CXX \
17.12654 +    hardcode_automatic_CXX \
17.12655 +    module_cmds_CXX \
17.12656 +    module_expsym_cmds_CXX \
17.12657 +    lt_cv_prog_compiler_c_o_CXX \
17.12658 +    exclude_expsyms_CXX \
17.12659 +    include_expsyms_CXX; do
17.12660 +
17.12661 +    case $var in
17.12662 +    old_archive_cmds_CXX | \
17.12663 +    old_archive_from_new_cmds_CXX | \
17.12664 +    archive_cmds_CXX | \
17.12665 +    archive_expsym_cmds_CXX | \
17.12666 +    module_cmds_CXX | \
17.12667 +    module_expsym_cmds_CXX | \
17.12668 +    old_archive_from_expsyms_cmds_CXX | \
17.12669 +    export_symbols_cmds_CXX | \
17.12670 +    extract_expsyms_cmds | reload_cmds | finish_cmds | \
17.12671 +    postinstall_cmds | postuninstall_cmds | \
17.12672 +    old_postinstall_cmds | old_postuninstall_cmds | \
17.12673 +    sys_lib_search_path_spec | sys_lib_dlsearch_path_spec)
17.12674 +      # Double-quote double-evaled strings.
17.12675 +      eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$double_quote_subst\" -e \"\$sed_quote_subst\" -e \"\$delay_variable_subst\"\`\\\""
17.12676 +      ;;
17.12677 +    *)
17.12678 +      eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$sed_quote_subst\"\`\\\""
17.12679 +      ;;
17.12680 +    esac
17.12681 +  done
17.12682 +
17.12683 +  case $lt_echo in
17.12684 +  *'\$0 --fallback-echo"')
17.12685 +    lt_echo=`$echo "X$lt_echo" | $Xsed -e 's/\\\\\\\$0 --fallback-echo"$/$0 --fallback-echo"/'`
17.12686 +    ;;
17.12687 +  esac
17.12688 +
17.12689 +cfgfile="$ofile"
17.12690 +
17.12691 +  cat <<__EOF__ >> "$cfgfile"
17.12692 +# ### BEGIN LIBTOOL TAG CONFIG: $tagname
17.12693 +
17.12694 +# Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`:
17.12695 +
17.12696 +# Shell to use when invoking shell scripts.
17.12697 +SHELL=$lt_SHELL
17.12698 +
17.12699 +# Whether or not to build shared libraries.
17.12700 +build_libtool_libs=$enable_shared
17.12701 +
17.12702 +# Whether or not to build static libraries.
17.12703 +build_old_libs=$enable_static
17.12704 +
17.12705 +# Whether or not to add -lc for building shared libraries.
17.12706 +build_libtool_need_lc=$archive_cmds_need_lc_CXX
17.12707 +
17.12708 +# Whether or not to disallow shared libs when runtime libs are static
17.12709 +allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes_CXX
17.12710 +
17.12711 +# Whether or not to optimize for fast installation.
17.12712 +fast_install=$enable_fast_install
17.12713 +
17.12714 +# The host system.
17.12715 +host_alias=$host_alias
17.12716 +host=$host
17.12717 +host_os=$host_os
17.12718 +
17.12719 +# The build system.
17.12720 +build_alias=$build_alias
17.12721 +build=$build
17.12722 +build_os=$build_os
17.12723 +
17.12724 +# An echo program that does not interpret backslashes.
17.12725 +echo=$lt_echo
17.12726 +
17.12727 +# The archiver.
17.12728 +AR=$lt_AR
17.12729 +AR_FLAGS=$lt_AR_FLAGS
17.12730 +
17.12731 +# A C compiler.
17.12732 +LTCC=$lt_LTCC
17.12733 +
17.12734 +# LTCC compiler flags.
17.12735 +LTCFLAGS=$lt_LTCFLAGS
17.12736 +
17.12737 +# A language-specific compiler.
17.12738 +CC=$lt_compiler_CXX
17.12739 +
17.12740 +# Is the compiler the GNU C compiler?
17.12741 +with_gcc=$GCC_CXX
17.12742 +
17.12743 +# An ERE matcher.
17.12744 +EGREP=$lt_EGREP
17.12745 +
17.12746 +# The linker used to build libraries.
17.12747 +LD=$lt_LD_CXX
17.12748 +
17.12749 +# Whether we need hard or soft links.
17.12750 +LN_S=$lt_LN_S
17.12751 +
17.12752 +# A BSD-compatible nm program.
17.12753 +NM=$lt_NM
17.12754 +
17.12755 +# A symbol stripping program
17.12756 +STRIP=$lt_STRIP
17.12757 +
17.12758 +# Used to examine libraries when file_magic_cmd begins "file"
17.12759 +MAGIC_CMD=$MAGIC_CMD
17.12760 +
17.12761 +# Used on cygwin: DLL creation program.
17.12762 +DLLTOOL="$DLLTOOL"
17.12763 +
17.12764 +# Used on cygwin: object dumper.
17.12765 +OBJDUMP="$OBJDUMP"
17.12766 +
17.12767 +# Used on cygwin: assembler.
17.12768 +AS="$AS"
17.12769 +
17.12770 +# The name of the directory that contains temporary libtool files.
17.12771 +objdir=$objdir
17.12772 +
17.12773 +# How to create reloadable object files.
17.12774 +reload_flag=$lt_reload_flag
17.12775 +reload_cmds=$lt_reload_cmds
17.12776 +
17.12777 +# How to pass a linker flag through the compiler.
17.12778 +wl=$lt_lt_prog_compiler_wl_CXX
17.12779 +
17.12780 +# Object file suffix (normally "o").
17.12781 +objext="$ac_objext"
17.12782 +
17.12783 +# Old archive suffix (normally "a").
17.12784 +libext="$libext"
17.12785 +
17.12786 +# Shared library suffix (normally ".so").
17.12787 +shrext_cmds='$shrext_cmds'
17.12788 +
17.12789 +# Executable file suffix (normally "").
17.12790 +exeext="$exeext"
17.12791 +
17.12792 +# Additional compiler flags for building library objects.
17.12793 +pic_flag=$lt_lt_prog_compiler_pic_CXX
17.12794 +pic_mode=$pic_mode
17.12795 +
17.12796 +# What is the maximum length of a command?
17.12797 +max_cmd_len=$lt_cv_sys_max_cmd_len
17.12798 +
17.12799 +# Does compiler simultaneously support -c and -o options?
17.12800 +compiler_c_o=$lt_lt_cv_prog_compiler_c_o_CXX
17.12801 +
17.12802 +# Must we lock files when doing compilation?
17.12803 +need_locks=$lt_need_locks
17.12804 +
17.12805 +# Do we need the lib prefix for modules?
17.12806 +need_lib_prefix=$need_lib_prefix
17.12807 +
17.12808 +# Do we need a version for libraries?
17.12809 +need_version=$need_version
17.12810 +
17.12811 +# Whether dlopen is supported.
17.12812 +dlopen_support=$enable_dlopen
17.12813 +
17.12814 +# Whether dlopen of programs is supported.
17.12815 +dlopen_self=$enable_dlopen_self
17.12816 +
17.12817 +# Whether dlopen of statically linked programs is supported.
17.12818 +dlopen_self_static=$enable_dlopen_self_static
17.12819 +
17.12820 +# Compiler flag to prevent dynamic linking.
17.12821 +link_static_flag=$lt_lt_prog_compiler_static_CXX
17.12822 +
17.12823 +# Compiler flag to turn off builtin functions.
17.12824 +no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag_CXX
17.12825 +
17.12826 +# Compiler flag to allow reflexive dlopens.
17.12827 +export_dynamic_flag_spec=$lt_export_dynamic_flag_spec_CXX
17.12828 +
17.12829 +# Compiler flag to generate shared objects directly from archives.
17.12830 +whole_archive_flag_spec=$lt_whole_archive_flag_spec_CXX
17.12831 +
17.12832 +# Compiler flag to generate thread-safe objects.
17.12833 +thread_safe_flag_spec=$lt_thread_safe_flag_spec_CXX
17.12834 +
17.12835 +# Library versioning type.
17.12836 +version_type=$version_type
17.12837 +
17.12838 +# Format of library name prefix.
17.12839 +libname_spec=$lt_libname_spec
17.12840 +
17.12841 +# List of archive names.  First name is the real one, the rest are links.
17.12842 +# The last name is the one that the linker finds with -lNAME.
17.12843 +library_names_spec=$lt_library_names_spec
17.12844 +
17.12845 +# The coded name of the library, if different from the real name.
17.12846 +soname_spec=$lt_soname_spec
17.12847 +
17.12848 +# Commands used to build and install an old-style archive.
17.12849 +RANLIB=$lt_RANLIB
17.12850 +old_archive_cmds=$lt_old_archive_cmds_CXX
17.12851 +old_postinstall_cmds=$lt_old_postinstall_cmds
17.12852 +old_postuninstall_cmds=$lt_old_postuninstall_cmds
17.12853 +
17.12854 +# Create an old-style archive from a shared archive.
17.12855 +old_archive_from_new_cmds=$lt_old_archive_from_new_cmds_CXX
17.12856 +
17.12857 +# Create a temporary old-style archive to link instead of a shared archive.
17.12858 +old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds_CXX
17.12859 +
17.12860 +# Commands used to build and install a shared archive.
17.12861 +archive_cmds=$lt_archive_cmds_CXX
17.12862 +archive_expsym_cmds=$lt_archive_expsym_cmds_CXX
17.12863 +postinstall_cmds=$lt_postinstall_cmds
17.12864 +postuninstall_cmds=$lt_postuninstall_cmds
17.12865 +
17.12866 +# Commands used to build a loadable module (assumed same as above if empty)
17.12867 +module_cmds=$lt_module_cmds_CXX
17.12868 +module_expsym_cmds=$lt_module_expsym_cmds_CXX
17.12869 +
17.12870 +# Commands to strip libraries.
17.12871 +old_striplib=$lt_old_striplib
17.12872 +striplib=$lt_striplib
17.12873 +
17.12874 +# Dependencies to place before the objects being linked to create a
17.12875 +# shared library.
17.12876 +predep_objects=$lt_predep_objects_CXX
17.12877 +
17.12878 +# Dependencies to place after the objects being linked to create a
17.12879 +# shared library.
17.12880 +postdep_objects=$lt_postdep_objects_CXX
17.12881 +
17.12882 +# Dependencies to place before the objects being linked to create a
17.12883 +# shared library.
17.12884 +predeps=$lt_predeps_CXX
17.12885 +
17.12886 +# Dependencies to place after the objects being linked to create a
17.12887 +# shared library.
17.12888 +postdeps=$lt_postdeps_CXX
17.12889 +
17.12890 +# The library search path used internally by the compiler when linking
17.12891 +# a shared library.
17.12892 +compiler_lib_search_path=$lt_compiler_lib_search_path_CXX
17.12893 +
17.12894 +# Method to check whether dependent libraries are shared objects.
17.12895 +deplibs_check_method=$lt_deplibs_check_method
17.12896 +
17.12897 +# Command to use when deplibs_check_method == file_magic.
17.12898 +file_magic_cmd=$lt_file_magic_cmd
17.12899 +
17.12900 +# Flag that allows shared libraries with undefined symbols to be built.
17.12901 +allow_undefined_flag=$lt_allow_undefined_flag_CXX
17.12902 +
17.12903 +# Flag that forces no undefined symbols.
17.12904 +no_undefined_flag=$lt_no_undefined_flag_CXX
17.12905 +
17.12906 +# Commands used to finish a libtool library installation in a directory.
17.12907 +finish_cmds=$lt_finish_cmds
17.12908 +
17.12909 +# Same as above, but a single script fragment to be evaled but not shown.
17.12910 +finish_eval=$lt_finish_eval
17.12911 +
17.12912 +# Take the output of nm and produce a listing of raw symbols and C names.
17.12913 +global_symbol_pipe=$lt_lt_cv_sys_global_symbol_pipe
17.12914 +
17.12915 +# Transform the output of nm in a proper C declaration
17.12916 +global_symbol_to_cdecl=$lt_lt_cv_sys_global_symbol_to_cdecl
17.12917 +
17.12918 +# Transform the output of nm in a C name address pair
17.12919 +global_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address
17.12920 +
17.12921 +# This is the shared library runtime path variable.
17.12922 +runpath_var=$runpath_var
17.12923 +
17.12924 +# This is the shared library path variable.
17.12925 +shlibpath_var=$shlibpath_var
17.12926 +
17.12927 +# Is shlibpath searched before the hard-coded library search path?
17.12928 +shlibpath_overrides_runpath=$shlibpath_overrides_runpath
17.12929 +
17.12930 +# How to hardcode a shared library path into an executable.
17.12931 +hardcode_action=$hardcode_action_CXX
17.12932 +
17.12933 +# Whether we should hardcode library paths into libraries.
17.12934 +hardcode_into_libs=$hardcode_into_libs
17.12935 +
17.12936 +# Flag to hardcode \$libdir into a binary during linking.
17.12937 +# This must work even if \$libdir does not exist.
17.12938 +hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec_CXX
17.12939 +
17.12940 +# If ld is used when linking, flag to hardcode \$libdir into
17.12941 +# a binary during linking. This must work even if \$libdir does
17.12942 +# not exist.
17.12943 +hardcode_libdir_flag_spec_ld=$lt_hardcode_libdir_flag_spec_ld_CXX
17.12944 +
17.12945 +# Whether we need a single -rpath flag with a separated argument.
17.12946 +hardcode_libdir_separator=$lt_hardcode_libdir_separator_CXX
17.12947 +
17.12948 +# Set to yes if using DIR/libNAME${shared_ext} during linking hardcodes DIR into the
17.12949 +# resulting binary.
17.12950 +hardcode_direct=$hardcode_direct_CXX
17.12951 +
17.12952 +# Set to yes if using the -LDIR flag during linking hardcodes DIR into the
17.12953 +# resulting binary.
17.12954 +hardcode_minus_L=$hardcode_minus_L_CXX
17.12955 +
17.12956 +# Set to yes if using SHLIBPATH_VAR=DIR during linking hardcodes DIR into
17.12957 +# the resulting binary.
17.12958 +hardcode_shlibpath_var=$hardcode_shlibpath_var_CXX
17.12959 +
17.12960 +# Set to yes if building a shared library automatically hardcodes DIR into the library
17.12961 +# and all subsequent libraries and executables linked against it.
17.12962 +hardcode_automatic=$hardcode_automatic_CXX
17.12963 +
17.12964 +# Variables whose values should be saved in libtool wrapper scripts and
17.12965 +# restored at relink time.
17.12966 +variables_saved_for_relink="$variables_saved_for_relink"
17.12967 +
17.12968 +# Whether libtool must link a program against all its dependency libraries.
17.12969 +link_all_deplibs=$link_all_deplibs_CXX
17.12970 +
17.12971 +# Compile-time system search path for libraries
17.12972 +sys_lib_search_path_spec=$lt_sys_lib_search_path_spec
17.12973 +
17.12974 +# Run-time system search path for libraries
17.12975 +sys_lib_dlsearch_path_spec=$lt_sys_lib_dlsearch_path_spec
17.12976 +
17.12977 +# Fix the shell variable \$srcfile for the compiler.
17.12978 +fix_srcfile_path="$fix_srcfile_path_CXX"
17.12979 +
17.12980 +# Set to yes if exported symbols are required.
17.12981 +always_export_symbols=$always_export_symbols_CXX
17.12982 +
17.12983 +# The commands to list exported symbols.
17.12984 +export_symbols_cmds=$lt_export_symbols_cmds_CXX
17.12985 +
17.12986 +# The commands to extract the exported symbol list from a shared archive.
17.12987 +extract_expsyms_cmds=$lt_extract_expsyms_cmds
17.12988 +
17.12989 +# Symbols that should not be listed in the preloaded symbols.
17.12990 +exclude_expsyms=$lt_exclude_expsyms_CXX
17.12991 +
17.12992 +# Symbols that must always be exported.
17.12993 +include_expsyms=$lt_include_expsyms_CXX
17.12994 +
17.12995 +# ### END LIBTOOL TAG CONFIG: $tagname
17.12996 +
17.12997 +__EOF__
17.12998 +
17.12999 +
17.13000 +else
17.13001 +  # If there is no Makefile yet, we rely on a make rule to execute
17.13002 +  # `config.status --recheck' to rerun these tests and create the
17.13003 +  # libtool script then.
17.13004 +  ltmain_in=`echo $ltmain | sed -e 's/\.sh$/.in/'`
17.13005 +  if test -f "$ltmain_in"; then
17.13006 +    test -f Makefile && make "$ltmain"
17.13007 +  fi
17.13008 +fi
17.13009 +
17.13010 +
17.13011 +ac_ext=c
17.13012 +ac_cpp='$CPP $CPPFLAGS'
17.13013 +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
17.13014 +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
17.13015 +ac_compiler_gnu=$ac_cv_c_compiler_gnu
17.13016 +
17.13017 +CC=$lt_save_CC
17.13018 +LDCXX=$LD
17.13019 +LD=$lt_save_LD
17.13020 +GCC=$lt_save_GCC
17.13021 +with_gnu_ldcxx=$with_gnu_ld
17.13022 +with_gnu_ld=$lt_save_with_gnu_ld
17.13023 +lt_cv_path_LDCXX=$lt_cv_path_LD
17.13024 +lt_cv_path_LD=$lt_save_path_LD
17.13025 +lt_cv_prog_gnu_ldcxx=$lt_cv_prog_gnu_ld
17.13026 +lt_cv_prog_gnu_ld=$lt_save_with_gnu_ld
17.13027 +
17.13028 +	else
17.13029 +	  tagname=""
17.13030 +	fi
17.13031 +	;;
17.13032 +
17.13033 +      F77)
17.13034 +	if test -n "$F77" && test "X$F77" != "Xno"; then
17.13035 +
17.13036 +ac_ext=f
17.13037 +ac_compile='$F77 -c $FFLAGS conftest.$ac_ext >&5'
17.13038 +ac_link='$F77 -o conftest$ac_exeext $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
17.13039 +ac_compiler_gnu=$ac_cv_f77_compiler_gnu
17.13040 +
17.13041 +
17.13042 +archive_cmds_need_lc_F77=no
17.13043 +allow_undefined_flag_F77=
17.13044 +always_export_symbols_F77=no
17.13045 +archive_expsym_cmds_F77=
17.13046 +export_dynamic_flag_spec_F77=
17.13047 +hardcode_direct_F77=no
17.13048 +hardcode_libdir_flag_spec_F77=
17.13049 +hardcode_libdir_flag_spec_ld_F77=
17.13050 +hardcode_libdir_separator_F77=
17.13051 +hardcode_minus_L_F77=no
17.13052 +hardcode_automatic_F77=no
17.13053 +module_cmds_F77=
17.13054 +module_expsym_cmds_F77=
17.13055 +link_all_deplibs_F77=unknown
17.13056 +old_archive_cmds_F77=$old_archive_cmds
17.13057 +no_undefined_flag_F77=
17.13058 +whole_archive_flag_spec_F77=
17.13059 +enable_shared_with_static_runtimes_F77=no
17.13060 +
17.13061 +# Source file extension for f77 test sources.
17.13062 +ac_ext=f
17.13063 +
17.13064 +# Object file extension for compiled f77 test sources.
17.13065 +objext=o
17.13066 +objext_F77=$objext
17.13067 +
17.13068 +# Code to be used in simple compile tests
17.13069 +lt_simple_compile_test_code="      subroutine t\n      return\n      end\n"
17.13070 +
17.13071 +# Code to be used in simple link tests
17.13072 +lt_simple_link_test_code="      program t\n      end\n"
17.13073 +
17.13074 +# ltmain only uses $CC for tagged configurations so make sure $CC is set.
17.13075 +
17.13076 +# If no C compiler was specified, use CC.
17.13077 +LTCC=${LTCC-"$CC"}
17.13078 +
17.13079 +# If no C compiler flags were specified, use CFLAGS.
17.13080 +LTCFLAGS=${LTCFLAGS-"$CFLAGS"}
17.13081 +
17.13082 +# Allow CC to be a program name with arguments.
17.13083 +compiler=$CC
17.13084 +
17.13085 +
17.13086 +# save warnings/boilerplate of simple test code
17.13087 +ac_outfile=conftest.$ac_objext
17.13088 +printf "$lt_simple_compile_test_code" >conftest.$ac_ext
17.13089 +eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err
17.13090 +_lt_compiler_boilerplate=`cat conftest.err`
17.13091 +$rm conftest*
17.13092 +
17.13093 +ac_outfile=conftest.$ac_objext
17.13094 +printf "$lt_simple_link_test_code" >conftest.$ac_ext
17.13095 +eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err
17.13096 +_lt_linker_boilerplate=`cat conftest.err`
17.13097 +$rm conftest*
17.13098 +
17.13099 +
17.13100 +# Allow CC to be a program name with arguments.
17.13101 +lt_save_CC="$CC"
17.13102 +CC=${F77-"f77"}
17.13103 +compiler=$CC
17.13104 +compiler_F77=$CC
17.13105 +for cc_temp in $compiler""; do
17.13106 +  case $cc_temp in
17.13107 +    compile | *[\\/]compile | ccache | *[\\/]ccache ) ;;
17.13108 +    distcc | *[\\/]distcc | purify | *[\\/]purify ) ;;
17.13109 +    \-*) ;;
17.13110 +    *) break;;
17.13111 +  esac
17.13112 +done
17.13113 +cc_basename=`$echo "X$cc_temp" | $Xsed -e 's%.*/%%' -e "s%^$host_alias-%%"`
17.13114 +
17.13115 +
17.13116 +echo "$as_me:$LINENO: checking if libtool supports shared libraries" >&5
17.13117 +echo $ECHO_N "checking if libtool supports shared libraries... $ECHO_C" >&6
17.13118 +echo "$as_me:$LINENO: result: $can_build_shared" >&5
17.13119 +echo "${ECHO_T}$can_build_shared" >&6
17.13120 +
17.13121 +echo "$as_me:$LINENO: checking whether to build shared libraries" >&5
17.13122 +echo $ECHO_N "checking whether to build shared libraries... $ECHO_C" >&6
17.13123 +test "$can_build_shared" = "no" && enable_shared=no
17.13124 +
17.13125 +# On AIX, shared libraries and static libraries use the same namespace, and
17.13126 +# are all built from PIC.
17.13127 +case $host_os in
17.13128 +aix3*)
17.13129 +  test "$enable_shared" = yes && enable_static=no
17.13130 +  if test -n "$RANLIB"; then
17.13131 +    archive_cmds="$archive_cmds~\$RANLIB \$lib"
17.13132 +    postinstall_cmds='$RANLIB $lib'
17.13133 +  fi
17.13134 +  ;;
17.13135 +aix4* | aix5*)
17.13136 +  if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then
17.13137 +    test "$enable_shared" = yes && enable_static=no
17.13138 +  fi
17.13139 +  ;;
17.13140 +esac
17.13141 +echo "$as_me:$LINENO: result: $enable_shared" >&5
17.13142 +echo "${ECHO_T}$enable_shared" >&6
17.13143 +
17.13144 +echo "$as_me:$LINENO: checking whether to build static libraries" >&5
17.13145 +echo $ECHO_N "checking whether to build static libraries... $ECHO_C" >&6
17.13146 +# Make sure either enable_shared or enable_static is yes.
17.13147 +test "$enable_shared" = yes || enable_static=yes
17.13148 +echo "$as_me:$LINENO: result: $enable_static" >&5
17.13149 +echo "${ECHO_T}$enable_static" >&6
17.13150 +
17.13151 +GCC_F77="$G77"
17.13152 +LD_F77="$LD"
17.13153 +
17.13154 +lt_prog_compiler_wl_F77=
17.13155 +lt_prog_compiler_pic_F77=
17.13156 +lt_prog_compiler_static_F77=
17.13157 +
17.13158 +echo "$as_me:$LINENO: checking for $compiler option to produce PIC" >&5
17.13159 +echo $ECHO_N "checking for $compiler option to produce PIC... $ECHO_C" >&6
17.13160 +
17.13161 +  if test "$GCC" = yes; then
17.13162 +    lt_prog_compiler_wl_F77='-Wl,'
17.13163 +    lt_prog_compiler_static_F77='-static'
17.13164 +
17.13165 +    case $host_os in
17.13166 +      aix*)
17.13167 +      # All AIX code is PIC.
17.13168 +      if test "$host_cpu" = ia64; then
17.13169 +	# AIX 5 now supports IA64 processor
17.13170 +	lt_prog_compiler_static_F77='-Bstatic'
17.13171 +      fi
17.13172 +      ;;
17.13173 +
17.13174 +    amigaos*)
17.13175 +      # FIXME: we need at least 68020 code to build shared libraries, but
17.13176 +      # adding the `-m68020' flag to GCC prevents building anything better,
17.13177 +      # like `-m68040'.
17.13178 +      lt_prog_compiler_pic_F77='-m68020 -resident32 -malways-restore-a4'
17.13179 +      ;;
17.13180 +
17.13181 +    beos* | cygwin* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*)
17.13182 +      # PIC is the default for these OSes.
17.13183 +      ;;
17.13184 +
17.13185 +    mingw* | pw32* | os2*)
17.13186 +      # This hack is so that the source file can tell whether it is being
17.13187 +      # built for inclusion in a dll (and should export symbols for example).
17.13188 +      lt_prog_compiler_pic_F77='-DDLL_EXPORT'
17.13189 +      ;;
17.13190 +
17.13191 +    darwin* | rhapsody*)
17.13192 +      # PIC is the default on this platform
17.13193 +      # Common symbols not allowed in MH_DYLIB files
17.13194 +      lt_prog_compiler_pic_F77='-fno-common'
17.13195 +      ;;
17.13196 +
17.13197 +    interix3*)
17.13198 +      # Interix 3.x gcc -fpic/-fPIC options generate broken code.
17.13199 +      # Instead, we relocate shared libraries at runtime.
17.13200 +      ;;
17.13201 +
17.13202 +    msdosdjgpp*)
17.13203 +      # Just because we use GCC doesn't mean we suddenly get shared libraries
17.13204 +      # on systems that don't support them.
17.13205 +      lt_prog_compiler_can_build_shared_F77=no
17.13206 +      enable_shared=no
17.13207 +      ;;
17.13208 +
17.13209 +    sysv4*MP*)
17.13210 +      if test -d /usr/nec; then
17.13211 +	lt_prog_compiler_pic_F77=-Kconform_pic
17.13212 +      fi
17.13213 +      ;;
17.13214 +
17.13215 +    hpux*)
17.13216 +      # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but
17.13217 +      # not for PA HP-UX.
17.13218 +      case $host_cpu in
17.13219 +      hppa*64*|ia64*)
17.13220 +	# +Z the default
17.13221 +	;;
17.13222 +      *)
17.13223 +	lt_prog_compiler_pic_F77='-fPIC'
17.13224 +	;;
17.13225 +      esac
17.13226 +      ;;
17.13227 +
17.13228 +    *)
17.13229 +      lt_prog_compiler_pic_F77='-fPIC'
17.13230 +      ;;
17.13231 +    esac
17.13232 +  else
17.13233 +    # PORTME Check for flag to pass linker flags through the system compiler.
17.13234 +    case $host_os in
17.13235 +    aix*)
17.13236 +      lt_prog_compiler_wl_F77='-Wl,'
17.13237 +      if test "$host_cpu" = ia64; then
17.13238 +	# AIX 5 now supports IA64 processor
17.13239 +	lt_prog_compiler_static_F77='-Bstatic'
17.13240 +      else
17.13241 +	lt_prog_compiler_static_F77='-bnso -bI:/lib/syscalls.exp'
17.13242 +      fi
17.13243 +      ;;
17.13244 +      darwin*)
17.13245 +        # PIC is the default on this platform
17.13246 +        # Common symbols not allowed in MH_DYLIB files
17.13247 +       case $cc_basename in
17.13248 +         xlc*)
17.13249 +         lt_prog_compiler_pic_F77='-qnocommon'
17.13250 +         lt_prog_compiler_wl_F77='-Wl,'
17.13251 +         ;;
17.13252 +       esac
17.13253 +       ;;
17.13254 +
17.13255 +    mingw* | pw32* | os2*)
17.13256 +      # This hack is so that the source file can tell whether it is being
17.13257 +      # built for inclusion in a dll (and should export symbols for example).
17.13258 +      lt_prog_compiler_pic_F77='-DDLL_EXPORT'
17.13259 +      ;;
17.13260 +
17.13261 +    hpux9* | hpux10* | hpux11*)
17.13262 +      lt_prog_compiler_wl_F77='-Wl,'
17.13263 +      # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but
17.13264 +      # not for PA HP-UX.
17.13265 +      case $host_cpu in
17.13266 +      hppa*64*|ia64*)
17.13267 +	# +Z the default
17.13268 +	;;
17.13269 +      *)
17.13270 +	lt_prog_compiler_pic_F77='+Z'
17.13271 +	;;
17.13272 +      esac
17.13273 +      # Is there a better lt_prog_compiler_static that works with the bundled CC?
17.13274 +      lt_prog_compiler_static_F77='${wl}-a ${wl}archive'
17.13275 +      ;;
17.13276 +
17.13277 +    irix5* | irix6* | nonstopux*)
17.13278 +      lt_prog_compiler_wl_F77='-Wl,'
17.13279 +      # PIC (with -KPIC) is the default.
17.13280 +      lt_prog_compiler_static_F77='-non_shared'
17.13281 +      ;;
17.13282 +
17.13283 +    newsos6)
17.13284 +      lt_prog_compiler_pic_F77='-KPIC'
17.13285 +      lt_prog_compiler_static_F77='-Bstatic'
17.13286 +      ;;
17.13287 +
17.13288 +    linux*)
17.13289 +      case $cc_basename in
17.13290 +      icc* | ecc*)
17.13291 +	lt_prog_compiler_wl_F77='-Wl,'
17.13292 +	lt_prog_compiler_pic_F77='-KPIC'
17.13293 +	lt_prog_compiler_static_F77='-static'
17.13294 +        ;;
17.13295 +      pgcc* | pgf77* | pgf90* | pgf95*)
17.13296 +        # Portland Group compilers (*not* the Pentium gcc compiler,
17.13297 +	# which looks to be a dead project)
17.13298 +	lt_prog_compiler_wl_F77='-Wl,'
17.13299 +	lt_prog_compiler_pic_F77='-fpic'
17.13300 +	lt_prog_compiler_static_F77='-Bstatic'
17.13301 +        ;;
17.13302 +      ccc*)
17.13303 +        lt_prog_compiler_wl_F77='-Wl,'
17.13304 +        # All Alpha code is PIC.
17.13305 +        lt_prog_compiler_static_F77='-non_shared'
17.13306 +        ;;
17.13307 +      esac
17.13308 +      ;;
17.13309 +
17.13310 +    osf3* | osf4* | osf5*)
17.13311 +      lt_prog_compiler_wl_F77='-Wl,'
17.13312 +      # All OSF/1 code is PIC.
17.13313 +      lt_prog_compiler_static_F77='-non_shared'
17.13314 +      ;;
17.13315 +
17.13316 +    solaris*)
17.13317 +      lt_prog_compiler_pic_F77='-KPIC'
17.13318 +      lt_prog_compiler_static_F77='-Bstatic'
17.13319 +      case $cc_basename in
17.13320 +      f77* | f90* | f95*)
17.13321 +	lt_prog_compiler_wl_F77='-Qoption ld ';;
17.13322 +      *)
17.13323 +	lt_prog_compiler_wl_F77='-Wl,';;
17.13324 +      esac
17.13325 +      ;;
17.13326 +
17.13327 +    sunos4*)
17.13328 +      lt_prog_compiler_wl_F77='-Qoption ld '
17.13329 +      lt_prog_compiler_pic_F77='-PIC'
17.13330 +      lt_prog_compiler_static_F77='-Bstatic'
17.13331 +      ;;
17.13332 +
17.13333 +    sysv4 | sysv4.2uw2* | sysv4.3*)
17.13334 +      lt_prog_compiler_wl_F77='-Wl,'
17.13335 +      lt_prog_compiler_pic_F77='-KPIC'
17.13336 +      lt_prog_compiler_static_F77='-Bstatic'
17.13337 +      ;;
17.13338 +
17.13339 +    sysv4*MP*)
17.13340 +      if test -d /usr/nec ;then
17.13341 +	lt_prog_compiler_pic_F77='-Kconform_pic'
17.13342 +	lt_prog_compiler_static_F77='-Bstatic'
17.13343 +      fi
17.13344 +      ;;
17.13345 +
17.13346 +    sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*)
17.13347 +      lt_prog_compiler_wl_F77='-Wl,'
17.13348 +      lt_prog_compiler_pic_F77='-KPIC'
17.13349 +      lt_prog_compiler_static_F77='-Bstatic'
17.13350 +      ;;
17.13351 +
17.13352 +    unicos*)
17.13353 +      lt_prog_compiler_wl_F77='-Wl,'
17.13354 +      lt_prog_compiler_can_build_shared_F77=no
17.13355 +      ;;
17.13356 +
17.13357 +    uts4*)
17.13358 +      lt_prog_compiler_pic_F77='-pic'
17.13359 +      lt_prog_compiler_static_F77='-Bstatic'
17.13360 +      ;;
17.13361 +
17.13362 +    *)
17.13363 +      lt_prog_compiler_can_build_shared_F77=no
17.13364 +      ;;
17.13365 +    esac
17.13366 +  fi
17.13367 +
17.13368 +echo "$as_me:$LINENO: result: $lt_prog_compiler_pic_F77" >&5
17.13369 +echo "${ECHO_T}$lt_prog_compiler_pic_F77" >&6
17.13370 +
17.13371 +#
17.13372 +# Check to make sure the PIC flag actually works.
17.13373 +#
17.13374 +if test -n "$lt_prog_compiler_pic_F77"; then
17.13375 +
17.13376 +echo "$as_me:$LINENO: checking if $compiler PIC flag $lt_prog_compiler_pic_F77 works" >&5
17.13377 +echo $ECHO_N "checking if $compiler PIC flag $lt_prog_compiler_pic_F77 works... $ECHO_C" >&6
17.13378 +if test "${lt_prog_compiler_pic_works_F77+set}" = set; then
17.13379 +  echo $ECHO_N "(cached) $ECHO_C" >&6
17.13380 +else
17.13381 +  lt_prog_compiler_pic_works_F77=no
17.13382 +  ac_outfile=conftest.$ac_objext
17.13383 +   printf "$lt_simple_compile_test_code" > conftest.$ac_ext
17.13384 +   lt_compiler_flag="$lt_prog_compiler_pic_F77"
17.13385 +   # Insert the option either (1) after the last *FLAGS variable, or
17.13386 +   # (2) before a word containing "conftest.", or (3) at the end.
17.13387 +   # Note that $ac_compile itself does not contain backslashes and begins
17.13388 +   # with a dollar sign (not a hyphen), so the echo should work correctly.
17.13389 +   # The option is referenced via a variable to avoid confusing sed.
17.13390 +   lt_compile=`echo "$ac_compile" | $SED \
17.13391 +   -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
17.13392 +   -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
17.13393 +   -e 's:$: $lt_compiler_flag:'`
17.13394 +   (eval echo "\"\$as_me:13391: $lt_compile\"" >&5)
17.13395 +   (eval "$lt_compile" 2>conftest.err)
17.13396 +   ac_status=$?
17.13397 +   cat conftest.err >&5
17.13398 +   echo "$as_me:13395: \$? = $ac_status" >&5
17.13399 +   if (exit $ac_status) && test -s "$ac_outfile"; then
17.13400 +     # The compiler can only warn and ignore the option if not recognized
17.13401 +     # So say no if there are warnings other than the usual output.
17.13402 +     $echo "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' >conftest.exp
17.13403 +     $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2
17.13404 +     if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then
17.13405 +       lt_prog_compiler_pic_works_F77=yes
17.13406 +     fi
17.13407 +   fi
17.13408 +   $rm conftest*
17.13409 +
17.13410 +fi
17.13411 +echo "$as_me:$LINENO: result: $lt_prog_compiler_pic_works_F77" >&5
17.13412 +echo "${ECHO_T}$lt_prog_compiler_pic_works_F77" >&6
17.13413 +
17.13414 +if test x"$lt_prog_compiler_pic_works_F77" = xyes; then
17.13415 +    case $lt_prog_compiler_pic_F77 in
17.13416 +     "" | " "*) ;;
17.13417 +     *) lt_prog_compiler_pic_F77=" $lt_prog_compiler_pic_F77" ;;
17.13418 +     esac
17.13419 +else
17.13420 +    lt_prog_compiler_pic_F77=
17.13421 +     lt_prog_compiler_can_build_shared_F77=no
17.13422 +fi
17.13423 +
17.13424 +fi
17.13425 +case $host_os in
17.13426 +  # For platforms which do not support PIC, -DPIC is meaningless:
17.13427 +  *djgpp*)
17.13428 +    lt_prog_compiler_pic_F77=
17.13429 +    ;;
17.13430 +  *)
17.13431 +    lt_prog_compiler_pic_F77="$lt_prog_compiler_pic_F77"
17.13432 +    ;;
17.13433 +esac
17.13434 +
17.13435 +#
17.13436 +# Check to make sure the static flag actually works.
17.13437 +#
17.13438 +wl=$lt_prog_compiler_wl_F77 eval lt_tmp_static_flag=\"$lt_prog_compiler_static_F77\"
17.13439 +echo "$as_me:$LINENO: checking if $compiler static flag $lt_tmp_static_flag works" >&5
17.13440 +echo $ECHO_N "checking if $compiler static flag $lt_tmp_static_flag works... $ECHO_C" >&6
17.13441 +if test "${lt_prog_compiler_static_works_F77+set}" = set; then
17.13442 +  echo $ECHO_N "(cached) $ECHO_C" >&6
17.13443 +else
17.13444 +  lt_prog_compiler_static_works_F77=no
17.13445 +   save_LDFLAGS="$LDFLAGS"
17.13446 +   LDFLAGS="$LDFLAGS $lt_tmp_static_flag"
17.13447 +   printf "$lt_simple_link_test_code" > conftest.$ac_ext
17.13448 +   if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then
17.13449 +     # The linker can only warn and ignore the option if not recognized
17.13450 +     # So say no if there are warnings
17.13451 +     if test -s conftest.err; then
17.13452 +       # Append any errors to the config.log.
17.13453 +       cat conftest.err 1>&5
17.13454 +       $echo "X$_lt_linker_boilerplate" | $Xsed -e '/^$/d' > conftest.exp
17.13455 +       $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2
17.13456 +       if diff conftest.exp conftest.er2 >/dev/null; then
17.13457 +         lt_prog_compiler_static_works_F77=yes
17.13458 +       fi
17.13459 +     else
17.13460 +       lt_prog_compiler_static_works_F77=yes
17.13461 +     fi
17.13462 +   fi
17.13463 +   $rm conftest*
17.13464 +   LDFLAGS="$save_LDFLAGS"
17.13465 +
17.13466 +fi
17.13467 +echo "$as_me:$LINENO: result: $lt_prog_compiler_static_works_F77" >&5
17.13468 +echo "${ECHO_T}$lt_prog_compiler_static_works_F77" >&6
17.13469 +
17.13470 +if test x"$lt_prog_compiler_static_works_F77" = xyes; then
17.13471 +    :
17.13472 +else
17.13473 +    lt_prog_compiler_static_F77=
17.13474 +fi
17.13475 +
17.13476 +
17.13477 +echo "$as_me:$LINENO: checking if $compiler supports -c -o file.$ac_objext" >&5
17.13478 +echo $ECHO_N "checking if $compiler supports -c -o file.$ac_objext... $ECHO_C" >&6
17.13479 +if test "${lt_cv_prog_compiler_c_o_F77+set}" = set; then
17.13480 +  echo $ECHO_N "(cached) $ECHO_C" >&6
17.13481 +else
17.13482 +  lt_cv_prog_compiler_c_o_F77=no
17.13483 +   $rm -r conftest 2>/dev/null
17.13484 +   mkdir conftest
17.13485 +   cd conftest
17.13486 +   mkdir out
17.13487 +   printf "$lt_simple_compile_test_code" > conftest.$ac_ext
17.13488 +
17.13489 +   lt_compiler_flag="-o out/conftest2.$ac_objext"
17.13490 +   # Insert the option either (1) after the last *FLAGS variable, or
17.13491 +   # (2) before a word containing "conftest.", or (3) at the end.
17.13492 +   # Note that $ac_compile itself does not contain backslashes and begins
17.13493 +   # with a dollar sign (not a hyphen), so the echo should work correctly.
17.13494 +   lt_compile=`echo "$ac_compile" | $SED \
17.13495 +   -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
17.13496 +   -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
17.13497 +   -e 's:$: $lt_compiler_flag:'`
17.13498 +   (eval echo "\"\$as_me:13495: $lt_compile\"" >&5)
17.13499 +   (eval "$lt_compile" 2>out/conftest.err)
17.13500 +   ac_status=$?
17.13501 +   cat out/conftest.err >&5
17.13502 +   echo "$as_me:13499: \$? = $ac_status" >&5
17.13503 +   if (exit $ac_status) && test -s out/conftest2.$ac_objext
17.13504 +   then
17.13505 +     # The compiler can only warn and ignore the option if not recognized
17.13506 +     # So say no if there are warnings
17.13507 +     $echo "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' > out/conftest.exp
17.13508 +     $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2
17.13509 +     if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then
17.13510 +       lt_cv_prog_compiler_c_o_F77=yes
17.13511 +     fi
17.13512 +   fi
17.13513 +   chmod u+w . 2>&5
17.13514 +   $rm conftest*
17.13515 +   # SGI C++ compiler will create directory out/ii_files/ for
17.13516 +   # template instantiation
17.13517 +   test -d out/ii_files && $rm out/ii_files/* && rmdir out/ii_files
17.13518 +   $rm out/* && rmdir out
17.13519 +   cd ..
17.13520 +   rmdir conftest
17.13521 +   $rm conftest*
17.13522 +
17.13523 +fi
17.13524 +echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_c_o_F77" >&5
17.13525 +echo "${ECHO_T}$lt_cv_prog_compiler_c_o_F77" >&6
17.13526 +
17.13527 +
17.13528 +hard_links="nottested"
17.13529 +if test "$lt_cv_prog_compiler_c_o_F77" = no && test "$need_locks" != no; then
17.13530 +  # do not overwrite the value of need_locks provided by the user
17.13531 +  echo "$as_me:$LINENO: checking if we can lock with hard links" >&5
17.13532 +echo $ECHO_N "checking if we can lock with hard links... $ECHO_C" >&6
17.13533 +  hard_links=yes
17.13534 +  $rm conftest*
17.13535 +  ln conftest.a conftest.b 2>/dev/null && hard_links=no
17.13536 +  touch conftest.a
17.13537 +  ln conftest.a conftest.b 2>&5 || hard_links=no
17.13538 +  ln conftest.a conftest.b 2>/dev/null && hard_links=no
17.13539 +  echo "$as_me:$LINENO: result: $hard_links" >&5
17.13540 +echo "${ECHO_T}$hard_links" >&6
17.13541 +  if test "$hard_links" = no; then
17.13542 +    { echo "$as_me:$LINENO: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&5
17.13543 +echo "$as_me: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&2;}
17.13544 +    need_locks=warn
17.13545 +  fi
17.13546 +else
17.13547 +  need_locks=no
17.13548 +fi
17.13549 +
17.13550 +echo "$as_me:$LINENO: checking whether the $compiler linker ($LD) supports shared libraries" >&5
17.13551 +echo $ECHO_N "checking whether the $compiler linker ($LD) supports shared libraries... $ECHO_C" >&6
17.13552 +
17.13553 +  runpath_var=
17.13554 +  allow_undefined_flag_F77=
17.13555 +  enable_shared_with_static_runtimes_F77=no
17.13556 +  archive_cmds_F77=
17.13557 +  archive_expsym_cmds_F77=
17.13558 +  old_archive_From_new_cmds_F77=
17.13559 +  old_archive_from_expsyms_cmds_F77=
17.13560 +  export_dynamic_flag_spec_F77=
17.13561 +  whole_archive_flag_spec_F77=
17.13562 +  thread_safe_flag_spec_F77=
17.13563 +  hardcode_libdir_flag_spec_F77=
17.13564 +  hardcode_libdir_flag_spec_ld_F77=
17.13565 +  hardcode_libdir_separator_F77=
17.13566 +  hardcode_direct_F77=no
17.13567 +  hardcode_minus_L_F77=no
17.13568 +  hardcode_shlibpath_var_F77=unsupported
17.13569 +  link_all_deplibs_F77=unknown
17.13570 +  hardcode_automatic_F77=no
17.13571 +  module_cmds_F77=
17.13572 +  module_expsym_cmds_F77=
17.13573 +  always_export_symbols_F77=no
17.13574 +  export_symbols_cmds_F77='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols'
17.13575 +  # include_expsyms should be a list of space-separated symbols to be *always*
17.13576 +  # included in the symbol list
17.13577 +  include_expsyms_F77=
17.13578 +  # exclude_expsyms can be an extended regexp of symbols to exclude
17.13579 +  # it will be wrapped by ` (' and `)$', so one must not match beginning or
17.13580 +  # end of line.  Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc',
17.13581 +  # as well as any symbol that contains `d'.
17.13582 +  exclude_expsyms_F77="_GLOBAL_OFFSET_TABLE_"
17.13583 +  # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out
17.13584 +  # platforms (ab)use it in PIC code, but their linkers get confused if
17.13585 +  # the symbol is explicitly referenced.  Since portable code cannot
17.13586 +  # rely on this symbol name, it's probably fine to never include it in
17.13587 +  # preloaded symbol tables.
17.13588 +  extract_expsyms_cmds=
17.13589 +  # Just being paranoid about ensuring that cc_basename is set.
17.13590 +  for cc_temp in $compiler""; do
17.13591 +  case $cc_temp in
17.13592 +    compile | *[\\/]compile | ccache | *[\\/]ccache ) ;;
17.13593 +    distcc | *[\\/]distcc | purify | *[\\/]purify ) ;;
17.13594 +    \-*) ;;
17.13595 +    *) break;;
17.13596 +  esac
17.13597 +done
17.13598 +cc_basename=`$echo "X$cc_temp" | $Xsed -e 's%.*/%%' -e "s%^$host_alias-%%"`
17.13599 +
17.13600 +  case $host_os in
17.13601 +  cygwin* | mingw* | pw32*)
17.13602 +    # FIXME: the MSVC++ port hasn't been tested in a loooong time
17.13603 +    # When not using gcc, we currently assume that we are using
17.13604 +    # Microsoft Visual C++.
17.13605 +    if test "$GCC" != yes; then
17.13606 +      with_gnu_ld=no
17.13607 +    fi
17.13608 +    ;;
17.13609 +  interix*)
17.13610 +    # we just hope/assume this is gcc and not c89 (= MSVC++)
17.13611 +    with_gnu_ld=yes
17.13612 +    ;;
17.13613 +  openbsd*)
17.13614 +    with_gnu_ld=no
17.13615 +    ;;
17.13616 +  esac
17.13617 +
17.13618 +  ld_shlibs_F77=yes
17.13619 +  if test "$with_gnu_ld" = yes; then
17.13620 +    # If archive_cmds runs LD, not CC, wlarc should be empty
17.13621 +    wlarc='${wl}'
17.13622 +
17.13623 +    # Set some defaults for GNU ld with shared library support. These
17.13624 +    # are reset later if shared libraries are not supported. Putting them
17.13625 +    # here allows them to be overridden if necessary.
17.13626 +    runpath_var=LD_RUN_PATH
17.13627 +    hardcode_libdir_flag_spec_F77='${wl}--rpath ${wl}$libdir'
17.13628 +    export_dynamic_flag_spec_F77='${wl}--export-dynamic'
17.13629 +    # ancient GNU ld didn't support --whole-archive et. al.
17.13630 +    if $LD --help 2>&1 | grep 'no-whole-archive' > /dev/null; then
17.13631 +	whole_archive_flag_spec_F77="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive'
17.13632 +      else
17.13633 +  	whole_archive_flag_spec_F77=
17.13634 +    fi
17.13635 +    supports_anon_versioning=no
17.13636 +    case `$LD -v 2>/dev/null` in
17.13637 +      *\ [01].* | *\ 2.[0-9].* | *\ 2.10.*) ;; # catch versions < 2.11
17.13638 +      *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ...
17.13639 +      *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ...
17.13640 +      *\ 2.11.*) ;; # other 2.11 versions
17.13641 +      *) supports_anon_versioning=yes ;;
17.13642 +    esac
17.13643 +
17.13644 +    # See if GNU ld supports shared libraries.
17.13645 +    case $host_os in
17.13646 +    aix3* | aix4* | aix5*)
17.13647 +      # On AIX/PPC, the GNU linker is very broken
17.13648 +      if test "$host_cpu" != ia64; then
17.13649 +	ld_shlibs_F77=no
17.13650 +	cat <<EOF 1>&2
17.13651 +
17.13652 +*** Warning: the GNU linker, at least up to release 2.9.1, is reported
17.13653 +*** to be unable to reliably create shared libraries on AIX.
17.13654 +*** Therefore, libtool is disabling shared libraries support.  If you
17.13655 +*** really care for shared libraries, you may want to modify your PATH
17.13656 +*** so that a non-GNU linker is found, and then restart.
17.13657 +
17.13658 +EOF
17.13659 +      fi
17.13660 +      ;;
17.13661 +
17.13662 +    amigaos*)
17.13663 +      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)'
17.13664 +      hardcode_libdir_flag_spec_F77='-L$libdir'
17.13665 +      hardcode_minus_L_F77=yes
17.13666 +
17.13667 +      # Samuel A. Falvo II <kc5tja@dolphin.openprojects.net> reports
17.13668 +      # that the semantics of dynamic libraries on AmigaOS, at least up
17.13669 +      # to version 4, is to share data among multiple programs linked
17.13670 +      # with the same dynamic library.  Since this doesn't match the
17.13671 +      # behavior of shared libraries on other platforms, we can't use
17.13672 +      # them.
17.13673 +      ld_shlibs_F77=no
17.13674 +      ;;
17.13675 +
17.13676 +    beos*)
17.13677 +      if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
17.13678 +	allow_undefined_flag_F77=unsupported
17.13679 +	# Joseph Beckenbach <jrb3@best.com> says some releases of gcc
17.13680 +	# support --undefined.  This deserves some investigation.  FIXME
17.13681 +	archive_cmds_F77='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
17.13682 +      else
17.13683 +	ld_shlibs_F77=no
17.13684 +      fi
17.13685 +      ;;
17.13686 +
17.13687 +    cygwin* | mingw* | pw32*)
17.13688 +      # _LT_AC_TAGVAR(hardcode_libdir_flag_spec, F77) is actually meaningless,
17.13689 +      # as there is no search path for DLLs.
17.13690 +      hardcode_libdir_flag_spec_F77='-L$libdir'
17.13691 +      allow_undefined_flag_F77=unsupported
17.13692 +      always_export_symbols_F77=no
17.13693 +      enable_shared_with_static_runtimes_F77=yes
17.13694 +      export_symbols_cmds_F77='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS] /s/.* \([^ ]*\)/\1 DATA/'\'' | $SED -e '\''/^[AITW] /s/.* //'\'' | sort | uniq > $export_symbols'
17.13695 +
17.13696 +      if $LD --help 2>&1 | grep 'auto-import' > /dev/null; then
17.13697 +        archive_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
17.13698 +	# If the export-symbols file already is a .def file (1st line
17.13699 +	# is EXPORTS), use it as is; otherwise, prepend...
17.13700 +	archive_expsym_cmds_F77='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then
17.13701 +	  cp $export_symbols $output_objdir/$soname.def;
17.13702 +	else
17.13703 +	  echo EXPORTS > $output_objdir/$soname.def;
17.13704 +	  cat $export_symbols >> $output_objdir/$soname.def;
17.13705 +	fi~
17.13706 +	$CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
17.13707 +      else
17.13708 +	ld_shlibs_F77=no
17.13709 +      fi
17.13710 +      ;;
17.13711 +
17.13712 +    interix3*)
17.13713 +      hardcode_direct_F77=no
17.13714 +      hardcode_shlibpath_var_F77=no
17.13715 +      hardcode_libdir_flag_spec_F77='${wl}-rpath,$libdir'
17.13716 +      export_dynamic_flag_spec_F77='${wl}-E'
17.13717 +      # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc.
17.13718 +      # Instead, shared libraries are loaded at an image base (0x10000000 by
17.13719 +      # default) and relocated if they conflict, which is a slow very memory
17.13720 +      # consuming and fragmenting process.  To avoid this, we pick a random,
17.13721 +      # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link
17.13722 +      # time.  Moving up from 0x10000000 also allows more sbrk(2) space.
17.13723 +      archive_cmds_F77='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
17.13724 +      archive_expsym_cmds_F77='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'
17.13725 +      ;;
17.13726 +
17.13727 +    linux*)
17.13728 +      if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
17.13729 +	tmp_addflag=
17.13730 +	case $cc_basename,$host_cpu in
17.13731 +	pgcc*)				# Portland Group C compiler
17.13732 +	  whole_archive_flag_spec_F77='${wl}--whole-archive`for conv in $convenience\"\"; do test  -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $echo \"$new_convenience\"` ${wl}--no-whole-archive'
17.13733 +	  tmp_addflag=' $pic_flag'
17.13734 +	  ;;
17.13735 +	pgf77* | pgf90* | pgf95*)	# Portland Group f77 and f90 compilers
17.13736 +	  whole_archive_flag_spec_F77='${wl}--whole-archive`for conv in $convenience\"\"; do test  -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $echo \"$new_convenience\"` ${wl}--no-whole-archive'
17.13737 +	  tmp_addflag=' $pic_flag -Mnomain' ;;
17.13738 +	ecc*,ia64* | icc*,ia64*)		# Intel C compiler on ia64
17.13739 +	  tmp_addflag=' -i_dynamic' ;;
17.13740 +	efc*,ia64* | ifort*,ia64*)	# Intel Fortran compiler on ia64
17.13741 +	  tmp_addflag=' -i_dynamic -nofor_main' ;;
17.13742 +	ifc* | ifort*)			# Intel Fortran compiler
17.13743 +	  tmp_addflag=' -nofor_main' ;;
17.13744 +	esac
17.13745 +	archive_cmds_F77='$CC -shared'"$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
17.13746 +
17.13747 +	if test $supports_anon_versioning = yes; then
17.13748 +	  archive_expsym_cmds_F77='$echo "{ global:" > $output_objdir/$libname.ver~
17.13749 +  cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~
17.13750 +  $echo "local: *; };" >> $output_objdir/$libname.ver~
17.13751 +	  $CC -shared'"$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib'
17.13752 +	fi
17.13753 +	link_all_deplibs_F77=no
17.13754 +      else
17.13755 +	ld_shlibs_F77=no
17.13756 +      fi
17.13757 +      ;;
17.13758 +
17.13759 +    netbsd* | netbsdelf*-gnu | knetbsd*-gnu)
17.13760 +      if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then
17.13761 +	archive_cmds_F77='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib'
17.13762 +	wlarc=
17.13763 +      else
17.13764 +	archive_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
17.13765 +	archive_expsym_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
17.13766 +      fi
17.13767 +      ;;
17.13768 +
17.13769 +    solaris*)
17.13770 +      if $LD -v 2>&1 | grep 'BFD 2\.8' > /dev/null; then
17.13771 +	ld_shlibs_F77=no
17.13772 +	cat <<EOF 1>&2
17.13773 +
17.13774 +*** Warning: The releases 2.8.* of the GNU linker cannot reliably
17.13775 +*** create shared libraries on Solaris systems.  Therefore, libtool
17.13776 +*** is disabling shared libraries support.  We urge you to upgrade GNU
17.13777 +*** binutils to release 2.9.1 or newer.  Another option is to modify
17.13778 +*** your PATH or compiler configuration so that the native linker is
17.13779 +*** used, and then restart.
17.13780 +
17.13781 +EOF
17.13782 +      elif $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
17.13783 +	archive_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
17.13784 +	archive_expsym_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
17.13785 +      else
17.13786 +	ld_shlibs_F77=no
17.13787 +      fi
17.13788 +      ;;
17.13789 +
17.13790 +    sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*)
17.13791 +      case `$LD -v 2>&1` in
17.13792 +        *\ [01].* | *\ 2.[0-9].* | *\ 2.1[0-5].*)
17.13793 +	ld_shlibs_F77=no
17.13794 +	cat <<_LT_EOF 1>&2
17.13795 +
17.13796 +*** Warning: Releases of the GNU linker prior to 2.16.91.0.3 can not
17.13797 +*** reliably create shared libraries on SCO systems.  Therefore, libtool
17.13798 +*** is disabling shared libraries support.  We urge you to upgrade GNU
17.13799 +*** binutils to release 2.16.91.0.3 or newer.  Another option is to modify
17.13800 +*** your PATH or compiler configuration so that the native linker is
17.13801 +*** used, and then restart.
17.13802 +
17.13803 +_LT_EOF
17.13804 +	;;
17.13805 +	*)
17.13806 +	  if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
17.13807 +	    hardcode_libdir_flag_spec_F77='`test -z "$SCOABSPATH" && echo ${wl}-rpath,$libdir`'
17.13808 +	    archive_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib'
17.13809 +	    archive_expsym_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname,\${SCOABSPATH:+${install_libdir}/}$soname,-retain-symbols-file,$export_symbols -o $lib'
17.13810 +	  else
17.13811 +	    ld_shlibs_F77=no
17.13812 +	  fi
17.13813 +	;;
17.13814 +      esac
17.13815 +      ;;
17.13816 +
17.13817 +    sunos4*)
17.13818 +      archive_cmds_F77='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags'
17.13819 +      wlarc=
17.13820 +      hardcode_direct_F77=yes
17.13821 +      hardcode_shlibpath_var_F77=no
17.13822 +      ;;
17.13823 +
17.13824 +    *)
17.13825 +      if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
17.13826 +	archive_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
17.13827 +	archive_expsym_cmds_F77='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
17.13828 +      else
17.13829 +	ld_shlibs_F77=no
17.13830 +      fi
17.13831 +      ;;
17.13832 +    esac
17.13833 +
17.13834 +    if test "$ld_shlibs_F77" = no; then
17.13835 +      runpath_var=
17.13836 +      hardcode_libdir_flag_spec_F77=
17.13837 +      export_dynamic_flag_spec_F77=
17.13838 +      whole_archive_flag_spec_F77=
17.13839 +    fi
17.13840 +  else
17.13841 +    # PORTME fill in a description of your system's linker (not GNU ld)
17.13842 +    case $host_os in
17.13843 +    aix3*)
17.13844 +      allow_undefined_flag_F77=unsupported
17.13845 +      always_export_symbols_F77=yes
17.13846 +      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'
17.13847 +      # Note: this linker hardcodes the directories in LIBPATH if there
17.13848 +      # are no directories specified by -L.
17.13849 +      hardcode_minus_L_F77=yes
17.13850 +      if test "$GCC" = yes && test -z "$lt_prog_compiler_static"; then
17.13851 +	# Neither direct hardcoding nor static linking is supported with a
17.13852 +	# broken collect2.
17.13853 +	hardcode_direct_F77=unsupported
17.13854 +      fi
17.13855 +      ;;
17.13856 +
17.13857 +    aix4* | aix5*)
17.13858 +      if test "$host_cpu" = ia64; then
17.13859 +	# On IA64, the linker does run time linking by default, so we don't
17.13860 +	# have to do anything special.
17.13861 +	aix_use_runtimelinking=no
17.13862 +	exp_sym_flag='-Bexport'
17.13863 +	no_entry_flag=""
17.13864 +      else
17.13865 +	# If we're using GNU nm, then we don't want the "-C" option.
17.13866 +	# -C means demangle to AIX nm, but means don't demangle with GNU nm
17.13867 +	if $NM -V 2>&1 | grep 'GNU' > /dev/null; then
17.13868 +	  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'
17.13869 +	else
17.13870 +	  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'
17.13871 +	fi
17.13872 +	aix_use_runtimelinking=no
17.13873 +
17.13874 +	# Test if we are trying to use run time linking or normal
17.13875 +	# AIX style linking. If -brtl is somewhere in LDFLAGS, we
17.13876 +	# need to do runtime linking.
17.13877 +	case $host_os in aix4.[23]|aix4.[23].*|aix5*)
17.13878 +	  for ld_flag in $LDFLAGS; do
17.13879 +  	  if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then
17.13880 +  	    aix_use_runtimelinking=yes
17.13881 +  	    break
17.13882 +  	  fi
17.13883 +	  done
17.13884 +	  ;;
17.13885 +	esac
17.13886 +
17.13887 +	exp_sym_flag='-bexport'
17.13888 +	no_entry_flag='-bnoentry'
17.13889 +      fi
17.13890 +
17.13891 +      # When large executables or shared objects are built, AIX ld can
17.13892 +      # have problems creating the table of contents.  If linking a library
17.13893 +      # or program results in "error TOC overflow" add -mminimal-toc to
17.13894 +      # CXXFLAGS/CFLAGS for g++/gcc.  In the cases where that is not
17.13895 +      # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS.
17.13896 +
17.13897 +      archive_cmds_F77=''
17.13898 +      hardcode_direct_F77=yes
17.13899 +      hardcode_libdir_separator_F77=':'
17.13900 +      link_all_deplibs_F77=yes
17.13901 +
17.13902 +      if test "$GCC" = yes; then
17.13903 +	case $host_os in aix4.[012]|aix4.[012].*)
17.13904 +	# We only want to do this on AIX 4.2 and lower, the check
17.13905 +	# below for broken collect2 doesn't work under 4.3+
17.13906 +	  collect2name=`${CC} -print-prog-name=collect2`
17.13907 +	  if test -f "$collect2name" && \
17.13908 +  	   strings "$collect2name" | grep resolve_lib_name >/dev/null
17.13909 +	  then
17.13910 +  	  # We have reworked collect2
17.13911 +  	  hardcode_direct_F77=yes
17.13912 +	  else
17.13913 +  	  # We have old collect2
17.13914 +  	  hardcode_direct_F77=unsupported
17.13915 +  	  # It fails to find uninstalled libraries when the uninstalled
17.13916 +  	  # path is not listed in the libpath.  Setting hardcode_minus_L
17.13917 +  	  # to unsupported forces relinking
17.13918 +  	  hardcode_minus_L_F77=yes
17.13919 +  	  hardcode_libdir_flag_spec_F77='-L$libdir'
17.13920 +  	  hardcode_libdir_separator_F77=
17.13921 +	  fi
17.13922 +	  ;;
17.13923 +	esac
17.13924 +	shared_flag='-shared'
17.13925 +	if test "$aix_use_runtimelinking" = yes; then
17.13926 +	  shared_flag="$shared_flag "'${wl}-G'
17.13927 +	fi
17.13928 +      else
17.13929 +	# not using gcc
17.13930 +	if test "$host_cpu" = ia64; then
17.13931 +  	# VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release
17.13932 +  	# chokes on -Wl,-G. The following line is correct:
17.13933 +	  shared_flag='-G'
17.13934 +	else
17.13935 +	  if test "$aix_use_runtimelinking" = yes; then
17.13936 +	    shared_flag='${wl}-G'
17.13937 +	  else
17.13938 +	    shared_flag='${wl}-bM:SRE'
17.13939 +	  fi
17.13940 +	fi
17.13941 +      fi
17.13942 +
17.13943 +      # It seems that -bexpall does not export symbols beginning with
17.13944 +      # underscore (_), so it is better to generate a list of symbols to export.
17.13945 +      always_export_symbols_F77=yes
17.13946 +      if test "$aix_use_runtimelinking" = yes; then
17.13947 +	# Warning - without using the other runtime loading flags (-brtl),
17.13948 +	# -berok will link without error, but may produce a broken library.
17.13949 +	allow_undefined_flag_F77='-berok'
17.13950 +       # Determine the default libpath from the value encoded in an empty executable.
17.13951 +       cat >conftest.$ac_ext <<_ACEOF
17.13952 +      program main
17.13953 +
17.13954 +      end
17.13955 +_ACEOF
17.13956 +rm -f conftest.$ac_objext conftest$ac_exeext
17.13957 +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
17.13958 +  (eval $ac_link) 2>conftest.er1
17.13959 +  ac_status=$?
17.13960 +  grep -v '^ *+' conftest.er1 >conftest.err
17.13961 +  rm -f conftest.er1
17.13962 +  cat conftest.err >&5
17.13963 +  echo "$as_me:$LINENO: \$? = $ac_status" >&5
17.13964 +  (exit $ac_status); } &&
17.13965 +	 { ac_try='test -z "$ac_f77_werror_flag"			 || test ! -s conftest.err'
17.13966 +  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
17.13967 +  (eval $ac_try) 2>&5
17.13968 +  ac_status=$?
17.13969 +  echo "$as_me:$LINENO: \$? = $ac_status" >&5
17.13970 +  (exit $ac_status); }; } &&
17.13971 +	 { ac_try='test -s conftest$ac_exeext'
17.13972 +  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
17.13973 +  (eval $ac_try) 2>&5
17.13974 +  ac_status=$?
17.13975 +  echo "$as_me:$LINENO: \$? = $ac_status" >&5
17.13976 +  (exit $ac_status); }; }; then
17.13977 +
17.13978 +aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0  *\(.*\)$/\1/; p; }
17.13979 +}'`
17.13980 +# Check for a 64-bit object if we didn't find anything.
17.13981 +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; }
17.13982 +}'`; fi
17.13983 +else
17.13984 +  echo "$as_me: failed program was:" >&5
17.13985 +sed 's/^/| /' conftest.$ac_ext >&5
17.13986 +
17.13987 +fi
17.13988 +rm -f conftest.err conftest.$ac_objext \
17.13989 +      conftest$ac_exeext conftest.$ac_ext
17.13990 +if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
17.13991 +
17.13992 +       hardcode_libdir_flag_spec_F77='${wl}-blibpath:$libdir:'"$aix_libpath"
17.13993 +	archive_expsym_cmds_F77="\$CC"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then echo "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag"
17.13994 +       else
17.13995 +	if test "$host_cpu" = ia64; then
17.13996 +	  hardcode_libdir_flag_spec_F77='${wl}-R $libdir:/usr/lib:/lib'
17.13997 +	  allow_undefined_flag_F77="-z nodefs"
17.13998 +	  archive_expsym_cmds_F77="\$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"
17.13999 +	else
17.14000 +	 # Determine the default libpath from the value encoded in an empty executable.
17.14001 +	 cat >conftest.$ac_ext <<_ACEOF
17.14002 +      program main
17.14003 +
17.14004 +      end
17.14005 +_ACEOF
17.14006 +rm -f conftest.$ac_objext conftest$ac_exeext
17.14007 +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
17.14008 +  (eval $ac_link) 2>conftest.er1
17.14009 +  ac_status=$?
17.14010 +  grep -v '^ *+' conftest.er1 >conftest.err
17.14011 +  rm -f conftest.er1
17.14012 +  cat conftest.err >&5
17.14013 +  echo "$as_me:$LINENO: \$? = $ac_status" >&5
17.14014 +  (exit $ac_status); } &&
17.14015 +	 { ac_try='test -z "$ac_f77_werror_flag"			 || test ! -s conftest.err'
17.14016 +  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
17.14017 +  (eval $ac_try) 2>&5
17.14018 +  ac_status=$?
17.14019 +  echo "$as_me:$LINENO: \$? = $ac_status" >&5
17.14020 +  (exit $ac_status); }; } &&
17.14021 +	 { ac_try='test -s conftest$ac_exeext'
17.14022 +  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
17.14023 +  (eval $ac_try) 2>&5
17.14024 +  ac_status=$?
17.14025 +  echo "$as_me:$LINENO: \$? = $ac_status" >&5
17.14026 +  (exit $ac_status); }; }; then
17.14027 +
17.14028 +aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0  *\(.*\)$/\1/; p; }
17.14029 +}'`
17.14030 +# Check for a 64-bit object if we didn't find anything.
17.14031 +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; }
17.14032 +}'`; fi
17.14033 +else
17.14034 +  echo "$as_me: failed program was:" >&5
17.14035 +sed 's/^/| /' conftest.$ac_ext >&5
17.14036 +
17.14037 +fi
17.14038 +rm -f conftest.err conftest.$ac_objext \
17.14039 +      conftest$ac_exeext conftest.$ac_ext
17.14040 +if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
17.14041 +
17.14042 +	 hardcode_libdir_flag_spec_F77='${wl}-blibpath:$libdir:'"$aix_libpath"
17.14043 +	  # Warning - without using the other run time loading flags,
17.14044 +	  # -berok will link without error, but may produce a broken library.
17.14045 +	  no_undefined_flag_F77=' ${wl}-bernotok'
17.14046 +	  allow_undefined_flag_F77=' ${wl}-berok'
17.14047 +	  # Exported symbols can be pulled into shared objects from archives
17.14048 +	  whole_archive_flag_spec_F77='$convenience'
17.14049 +	  archive_cmds_need_lc_F77=yes
17.14050 +	  # This is similar to how AIX traditionally builds its shared libraries.
17.14051 +	  archive_expsym_cmds_F77="\$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'
17.14052 +	fi
17.14053 +      fi
17.14054 +      ;;
17.14055 +
17.14056 +    amigaos*)
17.14057 +      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)'
17.14058 +      hardcode_libdir_flag_spec_F77='-L$libdir'
17.14059 +      hardcode_minus_L_F77=yes
17.14060 +      # see comment about different semantics on the GNU ld section
17.14061 +      ld_shlibs_F77=no
17.14062 +      ;;
17.14063 +
17.14064 +    bsdi[45]*)
17.14065 +      export_dynamic_flag_spec_F77=-rdynamic
17.14066 +      ;;
17.14067 +
17.14068 +    cygwin* | mingw* | pw32*)
17.14069 +      # When not using gcc, we currently assume that we are using
17.14070 +      # Microsoft Visual C++.
17.14071 +      # hardcode_libdir_flag_spec is actually meaningless, as there is
17.14072 +      # no search path for DLLs.
17.14073 +      hardcode_libdir_flag_spec_F77=' '
17.14074 +      allow_undefined_flag_F77=unsupported
17.14075 +      # Tell ltmain to make .lib files, not .a files.
17.14076 +      libext=lib
17.14077 +      # Tell ltmain to make .dll files, not .so files.
17.14078 +      shrext_cmds=".dll"
17.14079 +      # FIXME: Setting linknames here is a bad hack.
17.14080 +      archive_cmds_F77='$CC -o $lib $libobjs $compiler_flags `echo "$deplibs" | $SED -e '\''s/ -lc$//'\''` -link -dll~linknames='
17.14081 +      # The linker will automatically build a .lib file if we build a DLL.
17.14082 +      old_archive_From_new_cmds_F77='true'
17.14083 +      # FIXME: Should let the user specify the lib program.
17.14084 +      old_archive_cmds_F77='lib /OUT:$oldlib$oldobjs$old_deplibs'
17.14085 +      fix_srcfile_path_F77='`cygpath -w "$srcfile"`'
17.14086 +      enable_shared_with_static_runtimes_F77=yes
17.14087 +      ;;
17.14088 +
17.14089 +    darwin* | rhapsody*)
17.14090 +      case $host_os in
17.14091 +        rhapsody* | darwin1.[012])
17.14092 +         allow_undefined_flag_F77='${wl}-undefined ${wl}suppress'
17.14093 +         ;;
17.14094 +       *) # Darwin 1.3 on
17.14095 +         if test -z ${MACOSX_DEPLOYMENT_TARGET} ; then
17.14096 +           allow_undefined_flag_F77='${wl}-flat_namespace ${wl}-undefined ${wl}suppress'
17.14097 +         else
17.14098 +           case ${MACOSX_DEPLOYMENT_TARGET} in
17.14099 +             10.[012])
17.14100 +               allow_undefined_flag_F77='${wl}-flat_namespace ${wl}-undefined ${wl}suppress'
17.14101 +               ;;
17.14102 +             10.*)
17.14103 +               allow_undefined_flag_F77='${wl}-undefined ${wl}dynamic_lookup'
17.14104 +               ;;
17.14105 +           esac
17.14106 +         fi
17.14107 +         ;;
17.14108 +      esac
17.14109 +      archive_cmds_need_lc_F77=no
17.14110 +      hardcode_direct_F77=no
17.14111 +      hardcode_automatic_F77=yes
17.14112 +      hardcode_shlibpath_var_F77=unsupported
17.14113 +      whole_archive_flag_spec_F77=''
17.14114 +      link_all_deplibs_F77=yes
17.14115 +    if test "$GCC" = yes ; then
17.14116 +    	output_verbose_link_cmd='echo'
17.14117 +        archive_cmds_F77='$CC -dynamiclib $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring'
17.14118 +      module_cmds_F77='$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags'
17.14119 +      # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin lds
17.14120 +      archive_expsym_cmds_F77='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}'
17.14121 +      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}'
17.14122 +    else
17.14123 +      case $cc_basename in
17.14124 +        xlc*)
17.14125 +         output_verbose_link_cmd='echo'
17.14126 +         archive_cmds_F77='$CC -qmkshrobj $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}`echo $rpath/$soname` $verstring'
17.14127 +         module_cmds_F77='$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags'
17.14128 +          # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin lds
17.14129 +         archive_expsym_cmds_F77='sed -e "s,#.*,," -e "s,^[    ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -qmkshrobj $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}$rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
17.14130 +          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}'
17.14131 +          ;;
17.14132 +       *)
17.14133 +         ld_shlibs_F77=no
17.14134 +          ;;
17.14135 +      esac
17.14136 +    fi
17.14137 +      ;;
17.14138 +
17.14139 +    dgux*)
17.14140 +      archive_cmds_F77='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
17.14141 +      hardcode_libdir_flag_spec_F77='-L$libdir'
17.14142 +      hardcode_shlibpath_var_F77=no
17.14143 +      ;;
17.14144 +
17.14145 +    freebsd1*)
17.14146 +      ld_shlibs_F77=no
17.14147 +      ;;
17.14148 +
17.14149 +    # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor
17.14150 +    # support.  Future versions do this automatically, but an explicit c++rt0.o
17.14151 +    # does not break anything, and helps significantly (at the cost of a little
17.14152 +    # extra space).
17.14153 +    freebsd2.2*)
17.14154 +      archive_cmds_F77='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o'
17.14155 +      hardcode_libdir_flag_spec_F77='-R$libdir'
17.14156 +      hardcode_direct_F77=yes
17.14157 +      hardcode_shlibpath_var_F77=no
17.14158 +      ;;
17.14159 +
17.14160 +    # Unfortunately, older versions of FreeBSD 2 do not have this feature.
17.14161 +    freebsd2*)
17.14162 +      archive_cmds_F77='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'
17.14163 +      hardcode_direct_F77=yes
17.14164 +      hardcode_minus_L_F77=yes
17.14165 +      hardcode_shlibpath_var_F77=no
17.14166 +      ;;
17.14167 +
17.14168 +    # FreeBSD 3 and greater uses gcc -shared to do shared libraries.
17.14169 +    freebsd* | dragonfly*)
17.14170 +      archive_cmds_F77='$CC -shared -o $lib $libobjs $deplibs $compiler_flags'
17.14171 +      hardcode_libdir_flag_spec_F77='-R$libdir'
17.14172 +      hardcode_direct_F77=yes
17.14173 +      hardcode_shlibpath_var_F77=no
17.14174 +      ;;
17.14175 +
17.14176 +    # GNU/kFreeBSD uses gcc -shared to do shared libraries.
17.14177 +    kfreebsd*-gnu)
17.14178 +      archive_cmds_F77='$CC -shared -o $lib $libobjs $deplibs $compiler_flags'
17.14179 +      hardcode_libdir_flag_spec_F77='-R$libdir'
17.14180 +      hardcode_direct_F77=yes
17.14181 +      hardcode_shlibpath_var_F77=no
17.14182 +      link_all_deplibs_F77=no
17.14183 +      ;;
17.14184 +
17.14185 +    hpux9*)
17.14186 +      if test "$GCC" = yes; then
17.14187 +	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'
17.14188 +      else
17.14189 +	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'
17.14190 +      fi
17.14191 +      hardcode_libdir_flag_spec_F77='${wl}+b ${wl}$libdir'
17.14192 +      hardcode_libdir_separator_F77=:
17.14193 +      hardcode_direct_F77=yes
17.14194 +
17.14195 +      # hardcode_minus_L: Not really in the search PATH,
17.14196 +      # but as the default location of the library.
17.14197 +      hardcode_minus_L_F77=yes
17.14198 +      export_dynamic_flag_spec_F77='${wl}-E'
17.14199 +      ;;
17.14200 +
17.14201 +    hpux10*)
17.14202 +      if test "$GCC" = yes -a "$with_gnu_ld" = no; then
17.14203 +	archive_cmds_F77='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
17.14204 +      else
17.14205 +	archive_cmds_F77='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags'
17.14206 +      fi
17.14207 +      if test "$with_gnu_ld" = no; then
17.14208 +	hardcode_libdir_flag_spec_F77='${wl}+b ${wl}$libdir'
17.14209 +	hardcode_libdir_separator_F77=:
17.14210 +
17.14211 +	hardcode_direct_F77=yes
17.14212 +	export_dynamic_flag_spec_F77='${wl}-E'
17.14213 +
17.14214 +	# hardcode_minus_L: Not really in the search PATH,
17.14215 +	# but as the default location of the library.
17.14216 +	hardcode_minus_L_F77=yes
17.14217 +      fi
17.14218 +      ;;
17.14219 +
17.14220 +    hpux11*)
17.14221 +      if test "$GCC" = yes -a "$with_gnu_ld" = no; then
17.14222 +	case $host_cpu in
17.14223 +	hppa*64*)
17.14224 +	  archive_cmds_F77='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
17.14225 +	  ;;
17.14226 +	ia64*)
17.14227 +	  archive_cmds_F77='$CC -shared ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags'
17.14228 +	  ;;
17.14229 +	*)
17.14230 +	  archive_cmds_F77='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
17.14231 +	  ;;
17.14232 +	esac
17.14233 +      else
17.14234 +	case $host_cpu in
17.14235 +	hppa*64*)
17.14236 +	  archive_cmds_F77='$CC -b ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
17.14237 +	  ;;
17.14238 +	ia64*)
17.14239 +	  archive_cmds_F77='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags'
17.14240 +	  ;;
17.14241 +	*)
17.14242 +	  archive_cmds_F77='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
17.14243 +	  ;;
17.14244 +	esac
17.14245 +      fi
17.14246 +      if test "$with_gnu_ld" = no; then
17.14247 +	hardcode_libdir_flag_spec_F77='${wl}+b ${wl}$libdir'
17.14248 +	hardcode_libdir_separator_F77=:
17.14249 +
17.14250 +	case $host_cpu in
17.14251 +	hppa*64*|ia64*)
17.14252 +	  hardcode_libdir_flag_spec_ld_F77='+b $libdir'
17.14253 +	  hardcode_direct_F77=no
17.14254 +	  hardcode_shlibpath_var_F77=no
17.14255 +	  ;;
17.14256 +	*)
17.14257 +	  hardcode_direct_F77=yes
17.14258 +	  export_dynamic_flag_spec_F77='${wl}-E'
17.14259 +
17.14260 +	  # hardcode_minus_L: Not really in the search PATH,
17.14261 +	  # but as the default location of the library.
17.14262 +	  hardcode_minus_L_F77=yes
17.14263 +	  ;;
17.14264 +	esac
17.14265 +      fi
17.14266 +      ;;
17.14267 +
17.14268 +    irix5* | irix6* | nonstopux*)
17.14269 +      if test "$GCC" = yes; then
17.14270 +	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'
17.14271 +      else
17.14272 +	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'
17.14273 +	hardcode_libdir_flag_spec_ld_F77='-rpath $libdir'
17.14274 +      fi
17.14275 +      hardcode_libdir_flag_spec_F77='${wl}-rpath ${wl}$libdir'
17.14276 +      hardcode_libdir_separator_F77=:
17.14277 +      link_all_deplibs_F77=yes
17.14278 +      ;;
17.14279 +
17.14280 +    netbsd* | netbsdelf*-gnu | knetbsd*-gnu)
17.14281 +      if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then
17.14282 +	archive_cmds_F77='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'  # a.out
17.14283 +      else
17.14284 +	archive_cmds_F77='$LD -shared -o $lib $libobjs $deplibs $linker_flags'      # ELF
17.14285 +      fi
17.14286 +      hardcode_libdir_flag_spec_F77='-R$libdir'
17.14287 +      hardcode_direct_F77=yes
17.14288 +      hardcode_shlibpath_var_F77=no
17.14289 +      ;;
17.14290 +
17.14291 +    newsos6)
17.14292 +      archive_cmds_F77='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
17.14293 +      hardcode_direct_F77=yes
17.14294 +      hardcode_libdir_flag_spec_F77='${wl}-rpath ${wl}$libdir'
17.14295 +      hardcode_libdir_separator_F77=:
17.14296 +      hardcode_shlibpath_var_F77=no
17.14297 +      ;;
17.14298 +
17.14299 +    openbsd*)
17.14300 +      hardcode_direct_F77=yes
17.14301 +      hardcode_shlibpath_var_F77=no
17.14302 +      if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
17.14303 +	archive_cmds_F77='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
17.14304 +	archive_expsym_cmds_F77='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-retain-symbols-file,$export_symbols'
17.14305 +	hardcode_libdir_flag_spec_F77='${wl}-rpath,$libdir'
17.14306 +	export_dynamic_flag_spec_F77='${wl}-E'
17.14307 +      else
17.14308 +       case $host_os in
17.14309 +	 openbsd[01].* | openbsd2.[0-7] | openbsd2.[0-7].*)
17.14310 +	   archive_cmds_F77='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'
17.14311 +	   hardcode_libdir_flag_spec_F77='-R$libdir'
17.14312 +	   ;;
17.14313 +	 *)
17.14314 +	   archive_cmds_F77='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
17.14315 +	   hardcode_libdir_flag_spec_F77='${wl}-rpath,$libdir'
17.14316 +	   ;;
17.14317 +       esac
17.14318 +      fi
17.14319 +      ;;
17.14320 +
17.14321 +    os2*)
17.14322 +      hardcode_libdir_flag_spec_F77='-L$libdir'
17.14323 +      hardcode_minus_L_F77=yes
17.14324 +      allow_undefined_flag_F77=unsupported
17.14325 +      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'
17.14326 +      old_archive_From_new_cmds_F77='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def'
17.14327 +      ;;
17.14328 +
17.14329 +    osf3*)
17.14330 +      if test "$GCC" = yes; then
17.14331 +	allow_undefined_flag_F77=' ${wl}-expect_unresolved ${wl}\*'
17.14332 +	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'
17.14333 +      else
17.14334 +	allow_undefined_flag_F77=' -expect_unresolved \*'
17.14335 +	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'
17.14336 +      fi
17.14337 +      hardcode_libdir_flag_spec_F77='${wl}-rpath ${wl}$libdir'
17.14338 +      hardcode_libdir_separator_F77=:
17.14339 +      ;;
17.14340 +
17.14341 +    osf4* | osf5*)	# as osf3* with the addition of -msym flag
17.14342 +      if test "$GCC" = yes; then
17.14343 +	allow_undefined_flag_F77=' ${wl}-expect_unresolved ${wl}\*'
17.14344 +	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'
17.14345 +	hardcode_libdir_flag_spec_F77='${wl}-rpath ${wl}$libdir'
17.14346 +      else
17.14347 +	allow_undefined_flag_F77=' -expect_unresolved \*'
17.14348 +	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'
17.14349 +	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~
17.14350 +	$LD -shared${allow_undefined_flag} -input $lib.exp $linker_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib~$rm $lib.exp'
17.14351 +
17.14352 +	# Both c and cxx compiler support -rpath directly
17.14353 +	hardcode_libdir_flag_spec_F77='-rpath $libdir'
17.14354 +      fi
17.14355 +      hardcode_libdir_separator_F77=:
17.14356 +      ;;
17.14357 +
17.14358 +    solaris*)
17.14359 +      no_undefined_flag_F77=' -z text'
17.14360 +      if test "$GCC" = yes; then
17.14361 +	wlarc='${wl}'
17.14362 +	archive_cmds_F77='$CC -shared ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
17.14363 +	archive_expsym_cmds_F77='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~
17.14364 +	  $CC -shared ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$rm $lib.exp'
17.14365 +      else
17.14366 +	wlarc=''
17.14367 +	archive_cmds_F77='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags'
17.14368 +	archive_expsym_cmds_F77='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~
17.14369 +  	$LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$rm $lib.exp'
17.14370 +      fi
17.14371 +      hardcode_libdir_flag_spec_F77='-R$libdir'
17.14372 +      hardcode_shlibpath_var_F77=no
17.14373 +      case $host_os in
17.14374 +      solaris2.[0-5] | solaris2.[0-5].*) ;;
17.14375 +      *)
17.14376 + 	# The compiler driver will combine linker options so we
17.14377 + 	# cannot just pass the convience library names through
17.14378 + 	# without $wl, iff we do not link with $LD.
17.14379 + 	# Luckily, gcc supports the same syntax we need for Sun Studio.
17.14380 + 	# Supported since Solaris 2.6 (maybe 2.5.1?)
17.14381 + 	case $wlarc in
17.14382 + 	'')
17.14383 + 	  whole_archive_flag_spec_F77='-z allextract$convenience -z defaultextract' ;;
17.14384 + 	*)
17.14385 + 	  whole_archive_flag_spec_F77='${wl}-z ${wl}allextract`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $echo \"$new_convenience\"` ${wl}-z ${wl}defaultextract' ;;
17.14386 + 	esac ;;
17.14387 +      esac
17.14388 +      link_all_deplibs_F77=yes
17.14389 +      ;;
17.14390 +
17.14391 +    sunos4*)
17.14392 +      if test "x$host_vendor" = xsequent; then
17.14393 +	# Use $CC to link under sequent, because it throws in some extra .o
17.14394 +	# files that make .init and .fini sections work.
17.14395 +	archive_cmds_F77='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags'
17.14396 +      else
17.14397 +	archive_cmds_F77='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags'
17.14398 +      fi
17.14399 +      hardcode_libdir_flag_spec_F77='-L$libdir'
17.14400 +      hardcode_direct_F77=yes
17.14401 +      hardcode_minus_L_F77=yes
17.14402 +      hardcode_shlibpath_var_F77=no
17.14403 +      ;;
17.14404 +
17.14405 +    sysv4)
17.14406 +      case $host_vendor in
17.14407 +	sni)
17.14408 +	  archive_cmds_F77='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
17.14409 +	  hardcode_direct_F77=yes # is this really true???
17.14410 +	;;
17.14411 +	siemens)
17.14412 +	  ## LD is ld it makes a PLAMLIB
17.14413 +	  ## CC just makes a GrossModule.
17.14414 +	  archive_cmds_F77='$LD -G -o $lib $libobjs $deplibs $linker_flags'
17.14415 +	  reload_cmds_F77='$CC -r -o $output$reload_objs'
17.14416 +	  hardcode_direct_F77=no
17.14417 +        ;;
17.14418 +	motorola)
17.14419 +	  archive_cmds_F77='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
17.14420 +	  hardcode_direct_F77=no #Motorola manual says yes, but my tests say they lie
17.14421 +	;;
17.14422 +      esac
17.14423 +      runpath_var='LD_RUN_PATH'
17.14424 +      hardcode_shlibpath_var_F77=no
17.14425 +      ;;
17.14426 +
17.14427 +    sysv4.3*)
17.14428 +      archive_cmds_F77='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
17.14429 +      hardcode_shlibpath_var_F77=no
17.14430 +      export_dynamic_flag_spec_F77='-Bexport'
17.14431 +      ;;
17.14432 +
17.14433 +    sysv4*MP*)
17.14434 +      if test -d /usr/nec; then
17.14435 +	archive_cmds_F77='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
17.14436 +	hardcode_shlibpath_var_F77=no
17.14437 +	runpath_var=LD_RUN_PATH
17.14438 +	hardcode_runpath_var=yes
17.14439 +	ld_shlibs_F77=yes
17.14440 +      fi
17.14441 +      ;;
17.14442 +
17.14443 +    sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7*)
17.14444 +      no_undefined_flag_F77='${wl}-z,text'
17.14445 +      archive_cmds_need_lc_F77=no
17.14446 +      hardcode_shlibpath_var_F77=no
17.14447 +      runpath_var='LD_RUN_PATH'
17.14448 +
17.14449 +      if test "$GCC" = yes; then
17.14450 +	archive_cmds_F77='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
17.14451 +	archive_expsym_cmds_F77='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
17.14452 +      else
17.14453 +	archive_cmds_F77='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
17.14454 +	archive_expsym_cmds_F77='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
17.14455 +      fi
17.14456 +      ;;
17.14457 +
17.14458 +    sysv5* | sco3.2v5* | sco5v6*)
17.14459 +      # Note: We can NOT use -z defs as we might desire, because we do not
17.14460 +      # link with -lc, and that would cause any symbols used from libc to
17.14461 +      # always be unresolved, which means just about no library would
17.14462 +      # ever link correctly.  If we're not using GNU ld we use -z text
17.14463 +      # though, which does catch some bad symbols but isn't as heavy-handed
17.14464 +      # as -z defs.
17.14465 +      no_undefined_flag_F77='${wl}-z,text'
17.14466 +      allow_undefined_flag_F77='${wl}-z,nodefs'
17.14467 +      archive_cmds_need_lc_F77=no
17.14468 +      hardcode_shlibpath_var_F77=no
17.14469 +      hardcode_libdir_flag_spec_F77='`test -z "$SCOABSPATH" && echo ${wl}-R,$libdir`'
17.14470 +      hardcode_libdir_separator_F77=':'
17.14471 +      link_all_deplibs_F77=yes
17.14472 +      export_dynamic_flag_spec_F77='${wl}-Bexport'
17.14473 +      runpath_var='LD_RUN_PATH'
17.14474 +
17.14475 +      if test "$GCC" = yes; then
17.14476 +	archive_cmds_F77='$CC -shared ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags'
17.14477 +	archive_expsym_cmds_F77='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags'
17.14478 +      else
17.14479 +	archive_cmds_F77='$CC -G ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags'
17.14480 +	archive_expsym_cmds_F77='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags'
17.14481 +      fi
17.14482 +      ;;
17.14483 +
17.14484 +    uts4*)
17.14485 +      archive_cmds_F77='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
17.14486 +      hardcode_libdir_flag_spec_F77='-L$libdir'
17.14487 +      hardcode_shlibpath_var_F77=no
17.14488 +      ;;
17.14489 +
17.14490 +    *)
17.14491 +      ld_shlibs_F77=no
17.14492 +      ;;
17.14493 +    esac
17.14494 +  fi
17.14495 +
17.14496 +echo "$as_me:$LINENO: result: $ld_shlibs_F77" >&5
17.14497 +echo "${ECHO_T}$ld_shlibs_F77" >&6
17.14498 +test "$ld_shlibs_F77" = no && can_build_shared=no
17.14499 +
17.14500 +#
17.14501 +# Do we need to explicitly link libc?
17.14502 +#
17.14503 +case "x$archive_cmds_need_lc_F77" in
17.14504 +x|xyes)
17.14505 +  # Assume -lc should be added
17.14506 +  archive_cmds_need_lc_F77=yes
17.14507 +
17.14508 +  if test "$enable_shared" = yes && test "$GCC" = yes; then
17.14509 +    case $archive_cmds_F77 in
17.14510 +    *'~'*)
17.14511 +      # FIXME: we may have to deal with multi-command sequences.
17.14512 +      ;;
17.14513 +    '$CC '*)
17.14514 +      # Test whether the compiler implicitly links with -lc since on some
17.14515 +      # systems, -lgcc has to come before -lc. If gcc already passes -lc
17.14516 +      # to ld, don't add -lc before -lgcc.
17.14517 +      echo "$as_me:$LINENO: checking whether -lc should be explicitly linked in" >&5
17.14518 +echo $ECHO_N "checking whether -lc should be explicitly linked in... $ECHO_C" >&6
17.14519 +      $rm conftest*
17.14520 +      printf "$lt_simple_compile_test_code" > conftest.$ac_ext
17.14521 +
17.14522 +      if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
17.14523 +  (eval $ac_compile) 2>&5
17.14524 +  ac_status=$?
17.14525 +  echo "$as_me:$LINENO: \$? = $ac_status" >&5
17.14526 +  (exit $ac_status); } 2>conftest.err; then
17.14527 +        soname=conftest
17.14528 +        lib=conftest
17.14529 +        libobjs=conftest.$ac_objext
17.14530 +        deplibs=
17.14531 +        wl=$lt_prog_compiler_wl_F77
17.14532 +	pic_flag=$lt_prog_compiler_pic_F77
17.14533 +        compiler_flags=-v
17.14534 +        linker_flags=-v
17.14535 +        verstring=
17.14536 +        output_objdir=.
17.14537 +        libname=conftest
17.14538 +        lt_save_allow_undefined_flag=$allow_undefined_flag_F77
17.14539 +        allow_undefined_flag_F77=
17.14540 +        if { (eval echo "$as_me:$LINENO: \"$archive_cmds_F77 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1\"") >&5
17.14541 +  (eval $archive_cmds_F77 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1) 2>&5
17.14542 +  ac_status=$?
17.14543 +  echo "$as_me:$LINENO: \$? = $ac_status" >&5
17.14544 +  (exit $ac_status); }
17.14545 +        then
17.14546 +	  archive_cmds_need_lc_F77=no
17.14547 +        else
17.14548 +	  archive_cmds_need_lc_F77=yes
17.14549 +        fi
17.14550 +        allow_undefined_flag_F77=$lt_save_allow_undefined_flag
17.14551 +      else
17.14552 +        cat conftest.err 1>&5
17.14553 +      fi
17.14554 +      $rm conftest*
17.14555 +      echo "$as_me:$LINENO: result: $archive_cmds_need_lc_F77" >&5
17.14556 +echo "${ECHO_T}$archive_cmds_need_lc_F77" >&6
17.14557 +      ;;
17.14558 +    esac
17.14559 +  fi
17.14560 +  ;;
17.14561 +esac
17.14562 +
17.14563 +echo "$as_me:$LINENO: checking dynamic linker characteristics" >&5
17.14564 +echo $ECHO_N "checking dynamic linker characteristics... $ECHO_C" >&6
17.14565 +library_names_spec=
17.14566 +libname_spec='lib$name'
17.14567 +soname_spec=
17.14568 +shrext_cmds=".so"
17.14569 +postinstall_cmds=
17.14570 +postuninstall_cmds=
17.14571 +finish_cmds=
17.14572 +finish_eval=
17.14573 +shlibpath_var=
17.14574 +shlibpath_overrides_runpath=unknown
17.14575 +version_type=none
17.14576 +dynamic_linker="$host_os ld.so"
17.14577 +sys_lib_dlsearch_path_spec="/lib /usr/lib"
17.14578 +if test "$GCC" = yes; then
17.14579 +  sys_lib_search_path_spec=`$CC -print-search-dirs | grep "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"`
17.14580 +  if echo "$sys_lib_search_path_spec" | grep ';' >/dev/null ; then
17.14581 +    # if the path contains ";" then we assume it to be the separator
17.14582 +    # otherwise default to the standard path separator (i.e. ":") - it is
17.14583 +    # assumed that no part of a normal pathname contains ";" but that should
17.14584 +    # okay in the real world where ";" in dirpaths is itself problematic.
17.14585 +    sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'`
17.14586 +  else
17.14587 +    sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED  -e "s/$PATH_SEPARATOR/ /g"`
17.14588 +  fi
17.14589 +else
17.14590 +  sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib"
17.14591 +fi
17.14592 +need_lib_prefix=unknown
17.14593 +hardcode_into_libs=no
17.14594 +
17.14595 +# when you set need_version to no, make sure it does not cause -set_version
17.14596 +# flags to be left without arguments
17.14597 +need_version=unknown
17.14598 +
17.14599 +case $host_os in
17.14600 +aix3*)
17.14601 +  version_type=linux
17.14602 +  library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a'
17.14603 +  shlibpath_var=LIBPATH
17.14604 +
17.14605 +  # AIX 3 has no versioning support, so we append a major version to the name.
17.14606 +  soname_spec='${libname}${release}${shared_ext}$major'
17.14607 +  ;;
17.14608 +
17.14609 +aix4* | aix5*)
17.14610 +  version_type=linux
17.14611 +  need_lib_prefix=no
17.14612 +  need_version=no
17.14613 +  hardcode_into_libs=yes
17.14614 +  if test "$host_cpu" = ia64; then
17.14615 +    # AIX 5 supports IA64
17.14616 +    library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}'
17.14617 +    shlibpath_var=LD_LIBRARY_PATH
17.14618 +  else
17.14619 +    # With GCC up to 2.95.x, collect2 would create an import file
17.14620 +    # for dependence libraries.  The import file would start with
17.14621 +    # the line `#! .'.  This would cause the generated library to
17.14622 +    # depend on `.', always an invalid library.  This was fixed in
17.14623 +    # development snapshots of GCC prior to 3.0.
17.14624 +    case $host_os in
17.14625 +      aix4 | aix4.[01] | aix4.[01].*)
17.14626 +      if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)'
17.14627 +	   echo ' yes '
17.14628 +	   echo '#endif'; } | ${CC} -E - | grep yes > /dev/null; then
17.14629 +	:
17.14630 +      else
17.14631 +	can_build_shared=no
17.14632 +      fi
17.14633 +      ;;
17.14634 +    esac
17.14635 +    # AIX (on Power*) has no versioning support, so currently we can not hardcode correct
17.14636 +    # soname into executable. Probably we can add versioning support to
17.14637 +    # collect2, so additional links can be useful in future.
17.14638 +    if test "$aix_use_runtimelinking" = yes; then
17.14639 +      # If using run time linking (on AIX 4.2 or later) use lib<name>.so
17.14640 +      # instead of lib<name>.a to let people know that these are not
17.14641 +      # typical AIX shared libraries.
17.14642 +      library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
17.14643 +    else
17.14644 +      # We preserve .a as extension for shared libraries through AIX4.2
17.14645 +      # and later when we are not doing run time linking.
17.14646 +      library_names_spec='${libname}${release}.a $libname.a'
17.14647 +      soname_spec='${libname}${release}${shared_ext}$major'
17.14648 +    fi
17.14649 +    shlibpath_var=LIBPATH
17.14650 +  fi
17.14651 +  ;;
17.14652 +
17.14653 +amigaos*)
17.14654 +  library_names_spec='$libname.ixlibrary $libname.a'
17.14655 +  # Create ${libname}_ixlibrary.a entries in /sys/libs.
17.14656 +  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'
17.14657 +  ;;
17.14658 +
17.14659 +beos*)
17.14660 +  library_names_spec='${libname}${shared_ext}'
17.14661 +  dynamic_linker="$host_os ld.so"
17.14662 +  shlibpath_var=LIBRARY_PATH
17.14663 +  ;;
17.14664 +
17.14665 +bsdi[45]*)
17.14666 +  version_type=linux
17.14667 +  need_version=no
17.14668 +  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
17.14669 +  soname_spec='${libname}${release}${shared_ext}$major'
17.14670 +  finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir'
17.14671 +  shlibpath_var=LD_LIBRARY_PATH
17.14672 +  sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib"
17.14673 +  sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib"
17.14674 +  # the default ld.so.conf also contains /usr/contrib/lib and
17.14675 +  # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow
17.14676 +  # libtool to hard-code these into programs
17.14677 +  ;;
17.14678 +
17.14679 +cygwin* | mingw* | pw32*)
17.14680 +  version_type=windows
17.14681 +  shrext_cmds=".dll"
17.14682 +  need_version=no
17.14683 +  need_lib_prefix=no
17.14684 +
17.14685 +  case $GCC,$host_os in
17.14686 +  yes,cygwin* | yes,mingw* | yes,pw32*)
17.14687 +    library_names_spec='$libname.dll.a'
17.14688 +    # DLL is installed to $(libdir)/../bin by postinstall_cmds
17.14689 +    postinstall_cmds='base_file=`basename \${file}`~
17.14690 +      dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i;echo \$dlname'\''`~
17.14691 +      dldir=$destdir/`dirname \$dlpath`~
17.14692 +      test -d \$dldir || mkdir -p \$dldir~
17.14693 +      $install_prog $dir/$dlname \$dldir/$dlname~
17.14694 +      chmod a+x \$dldir/$dlname'
17.14695 +    postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~
17.14696 +      dlpath=$dir/\$dldll~
17.14697 +       $rm \$dlpath'
17.14698 +    shlibpath_overrides_runpath=yes
17.14699 +
17.14700 +    case $host_os in
17.14701 +    cygwin*)
17.14702 +      # Cygwin DLLs use 'cyg' prefix rather than 'lib'
17.14703 +      soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}'
17.14704 +      sys_lib_search_path_spec="/usr/lib /lib/w32api /lib /usr/local/lib"
17.14705 +      ;;
17.14706 +    mingw*)
17.14707 +      # MinGW DLLs use traditional 'lib' prefix
17.14708 +      soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}'
17.14709 +      sys_lib_search_path_spec=`$CC -print-search-dirs | grep "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"`
17.14710 +      if echo "$sys_lib_search_path_spec" | grep ';[c-zC-Z]:/' >/dev/null; then
17.14711 +        # It is most probably a Windows format PATH printed by
17.14712 +        # mingw gcc, but we are running on Cygwin. Gcc prints its search
17.14713 +        # path with ; separators, and with drive letters. We can handle the
17.14714 +        # drive letters (cygwin fileutils understands them), so leave them,
17.14715 +        # especially as we might pass files found there to a mingw objdump,
17.14716 +        # which wouldn't understand a cygwinified path. Ahh.
17.14717 +        sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'`
17.14718 +      else
17.14719 +        sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED  -e "s/$PATH_SEPARATOR/ /g"`
17.14720 +      fi
17.14721 +      ;;
17.14722 +    pw32*)
17.14723 +      # pw32 DLLs use 'pw' prefix rather than 'lib'
17.14724 +      library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}'
17.14725 +      ;;
17.14726 +    esac
17.14727 +    ;;
17.14728 +
17.14729 +  *)
17.14730 +    library_names_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext} $libname.lib'
17.14731 +    ;;
17.14732 +  esac
17.14733 +  dynamic_linker='Win32 ld.exe'
17.14734 +  # FIXME: first we should search . and the directory the executable is in
17.14735 +  shlibpath_var=PATH
17.14736 +  ;;
17.14737 +
17.14738 +darwin* | rhapsody*)
17.14739 +  dynamic_linker="$host_os dyld"
17.14740 +  version_type=darwin
17.14741 +  need_lib_prefix=no
17.14742 +  need_version=no
17.14743 +  library_names_spec='${libname}${release}${versuffix}$shared_ext ${libname}${release}${major}$shared_ext ${libname}$shared_ext'
17.14744 +  soname_spec='${libname}${release}${major}$shared_ext'
17.14745 +  shlibpath_overrides_runpath=yes
17.14746 +  shlibpath_var=DYLD_LIBRARY_PATH
17.14747 +  shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`'
17.14748 +  # Apple's gcc prints 'gcc -print-search-dirs' doesn't operate the same.
17.14749 +  if test "$GCC" = yes; then
17.14750 +    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"`
17.14751 +  else
17.14752 +    sys_lib_search_path_spec='/lib /usr/lib /usr/local/lib'
17.14753 +  fi
17.14754 +  sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib'
17.14755 +  ;;
17.14756 +
17.14757 +dgux*)
17.14758 +  version_type=linux
17.14759 +  need_lib_prefix=no
17.14760 +  need_version=no
17.14761 +  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext'
17.14762 +  soname_spec='${libname}${release}${shared_ext}$major'
17.14763 +  shlibpath_var=LD_LIBRARY_PATH
17.14764 +  ;;
17.14765 +
17.14766 +freebsd1*)
17.14767 +  dynamic_linker=no
17.14768 +  ;;
17.14769 +
17.14770 +kfreebsd*-gnu)
17.14771 +  version_type=linux
17.14772 +  need_lib_prefix=no
17.14773 +  need_version=no
17.14774 +  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
17.14775 +  soname_spec='${libname}${release}${shared_ext}$major'
17.14776 +  shlibpath_var=LD_LIBRARY_PATH
17.14777 +  shlibpath_overrides_runpath=no
17.14778 +  hardcode_into_libs=yes
17.14779 +  dynamic_linker='GNU ld.so'
17.14780 +  ;;
17.14781 +
17.14782 +freebsd* | dragonfly*)
17.14783 +  # DragonFly does not have aout.  When/if they implement a new
17.14784 +  # versioning mechanism, adjust this.
17.14785 +  if test -x /usr/bin/objformat; then
17.14786 +    objformat=`/usr/bin/objformat`
17.14787 +  else
17.14788 +    case $host_os in
17.14789 +    freebsd[123]*) objformat=aout ;;
17.14790 +    *) objformat=elf ;;
17.14791 +    esac
17.14792 +  fi
17.14793 +  version_type=freebsd-$objformat
17.14794 +  case $version_type in
17.14795 +    freebsd-elf*)
17.14796 +      library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}'
17.14797 +      need_version=no
17.14798 +      need_lib_prefix=no
17.14799 +      ;;
17.14800 +    freebsd-*)
17.14801 +      library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix'
17.14802 +      need_version=yes
17.14803 +      ;;
17.14804 +  esac
17.14805 +  shlibpath_var=LD_LIBRARY_PATH
17.14806 +  case $host_os in
17.14807 +  freebsd2*)
17.14808 +    shlibpath_overrides_runpath=yes
17.14809 +    ;;
17.14810 +  freebsd3.[01]* | freebsdelf3.[01]*)
17.14811 +    shlibpath_overrides_runpath=yes
17.14812 +    hardcode_into_libs=yes
17.14813 +    ;;
17.14814 +  freebsd3.[2-9]* | freebsdelf3.[2-9]* | \
17.14815 +  freebsd4.[0-5] | freebsdelf4.[0-5] | freebsd4.1.1 | freebsdelf4.1.1)
17.14816 +    shlibpath_overrides_runpath=no
17.14817 +    hardcode_into_libs=yes
17.14818 +    ;;
17.14819 +  freebsd*) # from 4.6 on
17.14820 +    shlibpath_overrides_runpath=yes
17.14821 +    hardcode_into_libs=yes
17.14822 +    ;;
17.14823 +  esac
17.14824 +  ;;
17.14825 +
17.14826 +gnu*)
17.14827 +  version_type=linux
17.14828 +  need_lib_prefix=no
17.14829 +  need_version=no
17.14830 +  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}'
17.14831 +  soname_spec='${libname}${release}${shared_ext}$major'
17.14832 +  shlibpath_var=LD_LIBRARY_PATH
17.14833 +  hardcode_into_libs=yes
17.14834 +  ;;
17.14835 +
17.14836 +hpux9* | hpux10* | hpux11*)
17.14837 +  # Give a soname corresponding to the major version so that dld.sl refuses to
17.14838 +  # link against other versions.
17.14839 +  version_type=sunos
17.14840 +  need_lib_prefix=no
17.14841 +  need_version=no
17.14842 +  case $host_cpu in
17.14843 +  ia64*)
17.14844 +    shrext_cmds='.so'
17.14845 +    hardcode_into_libs=yes
17.14846 +    dynamic_linker="$host_os dld.so"
17.14847 +    shlibpath_var=LD_LIBRARY_PATH
17.14848 +    shlibpath_overrides_runpath=yes # Unless +noenvvar is specified.
17.14849 +    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
17.14850 +    soname_spec='${libname}${release}${shared_ext}$major'
17.14851 +    if test "X$HPUX_IA64_MODE" = X32; then
17.14852 +      sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib"
17.14853 +    else
17.14854 +      sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64"
17.14855 +    fi
17.14856 +    sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec
17.14857 +    ;;
17.14858 +   hppa*64*)
17.14859 +     shrext_cmds='.sl'
17.14860 +     hardcode_into_libs=yes
17.14861 +     dynamic_linker="$host_os dld.sl"
17.14862 +     shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH
17.14863 +     shlibpath_overrides_runpath=yes # Unless +noenvvar is specified.
17.14864 +     library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
17.14865 +     soname_spec='${libname}${release}${shared_ext}$major'
17.14866 +     sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64"
17.14867 +     sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec
17.14868 +     ;;
17.14869 +   *)
17.14870 +    shrext_cmds='.sl'
17.14871 +    dynamic_linker="$host_os dld.sl"
17.14872 +    shlibpath_var=SHLIB_PATH
17.14873 +    shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH
17.14874 +    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
17.14875 +    soname_spec='${libname}${release}${shared_ext}$major'
17.14876 +    ;;
17.14877 +  esac
17.14878 +  # HP-UX runs *really* slowly unless shared libraries are mode 555.
17.14879 +  postinstall_cmds='chmod 555 $lib'
17.14880 +  ;;
17.14881 +
17.14882 +interix3*)
17.14883 +  version_type=linux
17.14884 +  need_lib_prefix=no
17.14885 +  need_version=no
17.14886 +  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
17.14887 +  soname_spec='${libname}${release}${shared_ext}$major'
17.14888 +  dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)'
17.14889 +  shlibpath_var=LD_LIBRARY_PATH
17.14890 +  shlibpath_overrides_runpath=no
17.14891 +  hardcode_into_libs=yes
17.14892 +  ;;
17.14893 +
17.14894 +irix5* | irix6* | nonstopux*)
17.14895 +  case $host_os in
17.14896 +    nonstopux*) version_type=nonstopux ;;
17.14897 +    *)
17.14898 +	if test "$lt_cv_prog_gnu_ld" = yes; then
17.14899 +		version_type=linux
17.14900 +	else
17.14901 +		version_type=irix
17.14902 +	fi ;;
17.14903 +  esac
17.14904 +  need_lib_prefix=no
17.14905 +  need_version=no
17.14906 +  soname_spec='${libname}${release}${shared_ext}$major'
17.14907 +  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}'
17.14908 +  case $host_os in
17.14909 +  irix5* | nonstopux*)
17.14910 +    libsuff= shlibsuff=
17.14911 +    ;;
17.14912 +  *)
17.14913 +    case $LD in # libtool.m4 will add one of these switches to LD
17.14914 +    *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ")
17.14915 +      libsuff= shlibsuff= libmagic=32-bit;;
17.14916 +    *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ")
17.14917 +      libsuff=32 shlibsuff=N32 libmagic=N32;;
17.14918 +    *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ")
17.14919 +      libsuff=64 shlibsuff=64 libmagic=64-bit;;
17.14920 +    *) libsuff= shlibsuff= libmagic=never-match;;
17.14921 +    esac
17.14922 +    ;;
17.14923 +  esac
17.14924 +  shlibpath_var=LD_LIBRARY${shlibsuff}_PATH
17.14925 +  shlibpath_overrides_runpath=no
17.14926 +  sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}"
17.14927 +  sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}"
17.14928 +  hardcode_into_libs=yes
17.14929 +  ;;
17.14930 +
17.14931 +# No shared lib support for Linux oldld, aout, or coff.
17.14932 +linux*oldld* | linux*aout* | linux*coff*)
17.14933 +  dynamic_linker=no
17.14934 +  ;;
17.14935 +
17.14936 +# This must be Linux ELF.
17.14937 +linux*)
17.14938 +  version_type=linux
17.14939 +  need_lib_prefix=no
17.14940 +  need_version=no
17.14941 +  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
17.14942 +  soname_spec='${libname}${release}${shared_ext}$major'
17.14943 +  finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir'
17.14944 +  shlibpath_var=LD_LIBRARY_PATH
17.14945 +  shlibpath_overrides_runpath=no
17.14946 +  # This implies no fast_install, which is unacceptable.
17.14947 +  # Some rework will be needed to allow for fast_install
17.14948 +  # before this can be enabled.
17.14949 +  hardcode_into_libs=yes
17.14950 +
17.14951 +  # Append ld.so.conf contents to the search path
17.14952 +  if test -f /etc/ld.so.conf; then
17.14953 +    lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;s/[:,	]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;/^$/d' | tr '\n' ' '`
17.14954 +    sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra"
17.14955 +  fi
17.14956 +
17.14957 +  # We used to test for /lib/ld.so.1 and disable shared libraries on
17.14958 +  # powerpc, because MkLinux only supported shared libraries with the
17.14959 +  # GNU dynamic linker.  Since this was broken with cross compilers,
17.14960 +  # most powerpc-linux boxes support dynamic linking these days and
17.14961 +  # people can always --disable-shared, the test was removed, and we
17.14962 +  # assume the GNU/Linux dynamic linker is in use.
17.14963 +  dynamic_linker='GNU/Linux ld.so'
17.14964 +  ;;
17.14965 +
17.14966 +netbsdelf*-gnu)
17.14967 +  version_type=linux
17.14968 +  need_lib_prefix=no
17.14969 +  need_version=no
17.14970 +  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
17.14971 +  soname_spec='${libname}${release}${shared_ext}$major'
17.14972 +  shlibpath_var=LD_LIBRARY_PATH
17.14973 +  shlibpath_overrides_runpath=no
17.14974 +  hardcode_into_libs=yes
17.14975 +  dynamic_linker='NetBSD ld.elf_so'
17.14976 +  ;;
17.14977 +
17.14978 +knetbsd*-gnu)
17.14979 +  version_type=linux
17.14980 +  need_lib_prefix=no
17.14981 +  need_version=no
17.14982 +  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
17.14983 +  soname_spec='${libname}${release}${shared_ext}$major'
17.14984 +  shlibpath_var=LD_LIBRARY_PATH
17.14985 +  shlibpath_overrides_runpath=no
17.14986 +  hardcode_into_libs=yes
17.14987 +  dynamic_linker='GNU ld.so'
17.14988 +  ;;
17.14989 +
17.14990 +netbsd*)
17.14991 +  version_type=sunos
17.14992 +  need_lib_prefix=no
17.14993 +  need_version=no
17.14994 +  if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then
17.14995 +    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
17.14996 +    finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir'
17.14997 +    dynamic_linker='NetBSD (a.out) ld.so'
17.14998 +  else
17.14999 +    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
17.15000 +    soname_spec='${libname}${release}${shared_ext}$major'
17.15001 +    dynamic_linker='NetBSD ld.elf_so'
17.15002 +  fi
17.15003 +  shlibpath_var=LD_LIBRARY_PATH
17.15004 +  shlibpath_overrides_runpath=yes
17.15005 +  hardcode_into_libs=yes
17.15006 +  ;;
17.15007 +
17.15008 +newsos6)
17.15009 +  version_type=linux
17.15010 +  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
17.15011 +  shlibpath_var=LD_LIBRARY_PATH
17.15012 +  shlibpath_overrides_runpath=yes
17.15013 +  ;;
17.15014 +
17.15015 +nto-qnx*)
17.15016 +  version_type=linux
17.15017 +  need_lib_prefix=no
17.15018 +  need_version=no
17.15019 +  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
17.15020 +  soname_spec='${libname}${release}${shared_ext}$major'
17.15021 +  shlibpath_var=LD_LIBRARY_PATH
17.15022 +  shlibpath_overrides_runpath=yes
17.15023 +  ;;
17.15024 +
17.15025 +openbsd*)
17.15026 +  version_type=sunos
17.15027 +  sys_lib_dlsearch_path_spec="/usr/lib"
17.15028 +  need_lib_prefix=no
17.15029 +  # Some older versions of OpenBSD (3.3 at least) *do* need versioned libs.
17.15030 +  case $host_os in
17.15031 +    openbsd3.3 | openbsd3.3.*) need_version=yes ;;
17.15032 +    *)                         need_version=no  ;;
17.15033 +  esac
17.15034 +  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
17.15035 +  finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir'
17.15036 +  shlibpath_var=LD_LIBRARY_PATH
17.15037 +  if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
17.15038 +    case $host_os in
17.15039 +      openbsd2.[89] | openbsd2.[89].*)
17.15040 +	shlibpath_overrides_runpath=no
17.15041 +	;;
17.15042 +      *)
17.15043 +	shlibpath_overrides_runpath=yes
17.15044 +	;;
17.15045 +      esac
17.15046 +  else
17.15047 +    shlibpath_overrides_runpath=yes
17.15048 +  fi
17.15049 +  ;;
17.15050 +
17.15051 +os2*)
17.15052 +  libname_spec='$name'
17.15053 +  shrext_cmds=".dll"
17.15054 +  need_lib_prefix=no
17.15055 +  library_names_spec='$libname${shared_ext} $libname.a'
17.15056 +  dynamic_linker='OS/2 ld.exe'
17.15057 +  shlibpath_var=LIBPATH
17.15058 +  ;;
17.15059 +
17.15060 +osf3* | osf4* | osf5*)
17.15061 +  version_type=osf
17.15062 +  need_lib_prefix=no
17.15063 +  need_version=no
17.15064 +  soname_spec='${libname}${release}${shared_ext}$major'
17.15065 +  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
17.15066 +  shlibpath_var=LD_LIBRARY_PATH
17.15067 +  sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib"
17.15068 +  sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec"
17.15069 +  ;;
17.15070 +
17.15071 +solaris*)
17.15072 +  version_type=linux
17.15073 +  need_lib_prefix=no
17.15074 +  need_version=no
17.15075 +  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
17.15076 +  soname_spec='${libname}${release}${shared_ext}$major'
17.15077 +  shlibpath_var=LD_LIBRARY_PATH
17.15078 +  shlibpath_overrides_runpath=yes
17.15079 +  hardcode_into_libs=yes
17.15080 +  # ldd complains unless libraries are executable
17.15081 +  postinstall_cmds='chmod +x $lib'
17.15082 +  ;;
17.15083 +
17.15084 +sunos4*)
17.15085 +  version_type=sunos
17.15086 +  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
17.15087 +  finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir'
17.15088 +  shlibpath_var=LD_LIBRARY_PATH
17.15089 +  shlibpath_overrides_runpath=yes
17.15090 +  if test "$with_gnu_ld" = yes; then
17.15091 +    need_lib_prefix=no
17.15092 +  fi
17.15093 +  need_version=yes
17.15094 +  ;;
17.15095 +
17.15096 +sysv4 | sysv4.3*)
17.15097 +  version_type=linux
17.15098 +  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
17.15099 +  soname_spec='${libname}${release}${shared_ext}$major'
17.15100 +  shlibpath_var=LD_LIBRARY_PATH
17.15101 +  case $host_vendor in
17.15102 +    sni)
17.15103 +      shlibpath_overrides_runpath=no
17.15104 +      need_lib_prefix=no
17.15105 +      export_dynamic_flag_spec='${wl}-Blargedynsym'
17.15106 +      runpath_var=LD_RUN_PATH
17.15107 +      ;;
17.15108 +    siemens)
17.15109 +      need_lib_prefix=no
17.15110 +      ;;
17.15111 +    motorola)
17.15112 +      need_lib_prefix=no
17.15113 +      need_version=no
17.15114 +      shlibpath_overrides_runpath=no
17.15115 +      sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib'
17.15116 +      ;;
17.15117 +  esac
17.15118 +  ;;
17.15119 +
17.15120 +sysv4*MP*)
17.15121 +  if test -d /usr/nec ;then
17.15122 +    version_type=linux
17.15123 +    library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}'
17.15124 +    soname_spec='$libname${shared_ext}.$major'
17.15125 +    shlibpath_var=LD_LIBRARY_PATH
17.15126 +  fi
17.15127 +  ;;
17.15128 +
17.15129 +sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*)
17.15130 +  version_type=freebsd-elf
17.15131 +  need_lib_prefix=no
17.15132 +  need_version=no
17.15133 +  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}'
17.15134 +  soname_spec='${libname}${release}${shared_ext}$major'
17.15135 +  shlibpath_var=LD_LIBRARY_PATH
17.15136 +  hardcode_into_libs=yes
17.15137 +  if test "$with_gnu_ld" = yes; then
17.15138 +    sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib'
17.15139 +    shlibpath_overrides_runpath=no
17.15140 +  else
17.15141 +    sys_lib_search_path_spec='/usr/ccs/lib /usr/lib'
17.15142 +    shlibpath_overrides_runpath=yes
17.15143 +    case $host_os in
17.15144 +      sco3.2v5*)
17.15145 +        sys_lib_search_path_spec="$sys_lib_search_path_spec /lib"
17.15146 +	;;
17.15147 +    esac
17.15148 +  fi
17.15149 +  sys_lib_dlsearch_path_spec='/usr/lib'
17.15150 +  ;;
17.15151 +
17.15152 +uts4*)
17.15153 +  version_type=linux
17.15154 +  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
17.15155 +  soname_spec='${libname}${release}${shared_ext}$major'
17.15156 +  shlibpath_var=LD_LIBRARY_PATH
17.15157 +  ;;
17.15158 +
17.15159 +*)
17.15160 +  dynamic_linker=no
17.15161 +  ;;
17.15162 +esac
17.15163 +echo "$as_me:$LINENO: result: $dynamic_linker" >&5
17.15164 +echo "${ECHO_T}$dynamic_linker" >&6
17.15165 +test "$dynamic_linker" = no && can_build_shared=no
17.15166 +
17.15167 +variables_saved_for_relink="PATH $shlibpath_var $runpath_var"
17.15168 +if test "$GCC" = yes; then
17.15169 +  variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH"
17.15170 +fi
17.15171 +
17.15172 +echo "$as_me:$LINENO: checking how to hardcode library paths into programs" >&5
17.15173 +echo $ECHO_N "checking how to hardcode library paths into programs... $ECHO_C" >&6
17.15174 +hardcode_action_F77=
17.15175 +if test -n "$hardcode_libdir_flag_spec_F77" || \
17.15176 +   test -n "$runpath_var_F77" || \
17.15177 +   test "X$hardcode_automatic_F77" = "Xyes" ; then
17.15178 +
17.15179 +  # We can hardcode non-existant directories.
17.15180 +  if test "$hardcode_direct_F77" != no &&
17.15181 +     # If the only mechanism to avoid hardcoding is shlibpath_var, we
17.15182 +     # have to relink, otherwise we might link with an installed library
17.15183 +     # when we should be linking with a yet-to-be-installed one
17.15184 +     ## test "$_LT_AC_TAGVAR(hardcode_shlibpath_var, F77)" != no &&
17.15185 +     test "$hardcode_minus_L_F77" != no; then
17.15186 +    # Linking always hardcodes the temporary library directory.
17.15187 +    hardcode_action_F77=relink
17.15188 +  else
17.15189 +    # We can link without hardcoding, and we can hardcode nonexisting dirs.
17.15190 +    hardcode_action_F77=immediate
17.15191 +  fi
17.15192 +else
17.15193 +  # We cannot hardcode anything, or else we can only hardcode existing
17.15194 +  # directories.
17.15195 +  hardcode_action_F77=unsupported
17.15196 +fi
17.15197 +echo "$as_me:$LINENO: result: $hardcode_action_F77" >&5
17.15198 +echo "${ECHO_T}$hardcode_action_F77" >&6
17.15199 +
17.15200 +if test "$hardcode_action_F77" = relink; then
17.15201 +  # Fast installation is not supported
17.15202 +  enable_fast_install=no
17.15203 +elif test "$shlibpath_overrides_runpath" = yes ||
17.15204 +     test "$enable_shared" = no; then
17.15205 +  # Fast installation is not necessary
17.15206 +  enable_fast_install=needless
17.15207 +fi
17.15208 +
17.15209 +
17.15210 +# The else clause should only fire when bootstrapping the
17.15211 +# libtool distribution, otherwise you forgot to ship ltmain.sh
17.15212 +# with your package, and you will get complaints that there are
17.15213 +# no rules to generate ltmain.sh.
17.15214 +if test -f "$ltmain"; then
17.15215 +  # See if we are running on zsh, and set the options which allow our commands through
17.15216 +  # without removal of \ escapes.
17.15217 +  if test -n "${ZSH_VERSION+set}" ; then
17.15218 +    setopt NO_GLOB_SUBST
17.15219 +  fi
17.15220 +  # Now quote all the things that may contain metacharacters while being
17.15221 +  # careful not to overquote the AC_SUBSTed values.  We take copies of the
17.15222 +  # variables and quote the copies for generation of the libtool script.
17.15223 +  for var in echo old_CC old_CFLAGS AR AR_FLAGS EGREP RANLIB LN_S LTCC LTCFLAGS NM \
17.15224 +    SED SHELL STRIP \
17.15225 +    libname_spec library_names_spec soname_spec extract_expsyms_cmds \
17.15226 +    old_striplib striplib file_magic_cmd finish_cmds finish_eval \
17.15227 +    deplibs_check_method reload_flag reload_cmds need_locks \
17.15228 +    lt_cv_sys_global_symbol_pipe lt_cv_sys_global_symbol_to_cdecl \
17.15229 +    lt_cv_sys_global_symbol_to_c_name_address \
17.15230 +    sys_lib_search_path_spec sys_lib_dlsearch_path_spec \
17.15231 +    old_postinstall_cmds old_postuninstall_cmds \
17.15232 +    compiler_F77 \
17.15233 +    CC_F77 \
17.15234 +    LD_F77 \
17.15235 +    lt_prog_compiler_wl_F77 \
17.15236 +    lt_prog_compiler_pic_F77 \
17.15237 +    lt_prog_compiler_static_F77 \
17.15238 +    lt_prog_compiler_no_builtin_flag_F77 \
17.15239 +    export_dynamic_flag_spec_F77 \
17.15240 +    thread_safe_flag_spec_F77 \
17.15241 +    whole_archive_flag_spec_F77 \
17.15242 +    enable_shared_with_static_runtimes_F77 \
17.15243 +    old_archive_cmds_F77 \
17.15244 +    old_archive_from_new_cmds_F77 \
17.15245 +    predep_objects_F77 \
17.15246 +    postdep_objects_F77 \
17.15247 +    predeps_F77 \
17.15248 +    postdeps_F77 \
17.15249 +    compiler_lib_search_path_F77 \
17.15250 +    archive_cmds_F77 \
17.15251 +    archive_expsym_cmds_F77 \
17.15252 +    postinstall_cmds_F77 \
17.15253 +    postuninstall_cmds_F77 \
17.15254 +    old_archive_from_expsyms_cmds_F77 \
17.15255 +    allow_undefined_flag_F77 \
17.15256 +    no_undefined_flag_F77 \
17.15257 +    export_symbols_cmds_F77 \
17.15258 +    hardcode_libdir_flag_spec_F77 \
17.15259 +    hardcode_libdir_flag_spec_ld_F77 \
17.15260 +    hardcode_libdir_separator_F77 \
17.15261 +    hardcode_automatic_F77 \
17.15262 +    module_cmds_F77 \
17.15263 +    module_expsym_cmds_F77 \
17.15264 +    lt_cv_prog_compiler_c_o_F77 \
17.15265 +    exclude_expsyms_F77 \
17.15266 +    include_expsyms_F77; do
17.15267 +
17.15268 +    case $var in
17.15269 +    old_archive_cmds_F77 | \
17.15270 +    old_archive_from_new_cmds_F77 | \
17.15271 +    archive_cmds_F77 | \
17.15272 +    archive_expsym_cmds_F77 | \
17.15273 +    module_cmds_F77 | \
17.15274 +    module_expsym_cmds_F77 | \
17.15275 +    old_archive_from_expsyms_cmds_F77 | \
17.15276 +    export_symbols_cmds_F77 | \
17.15277 +    extract_expsyms_cmds | reload_cmds | finish_cmds | \
17.15278 +    postinstall_cmds | postuninstall_cmds | \
17.15279 +    old_postinstall_cmds | old_postuninstall_cmds | \
17.15280 +    sys_lib_search_path_spec | sys_lib_dlsearch_path_spec)
17.15281 +      # Double-quote double-evaled strings.
17.15282 +      eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$double_quote_subst\" -e \"\$sed_quote_subst\" -e \"\$delay_variable_subst\"\`\\\""
17.15283 +      ;;
17.15284 +    *)
17.15285 +      eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$sed_quote_subst\"\`\\\""
17.15286 +      ;;
17.15287 +    esac
17.15288 +  done
17.15289 +
17.15290 +  case $lt_echo in
17.15291 +  *'\$0 --fallback-echo"')
17.15292 +    lt_echo=`$echo "X$lt_echo" | $Xsed -e 's/\\\\\\\$0 --fallback-echo"$/$0 --fallback-echo"/'`
17.15293 +    ;;
17.15294 +  esac
17.15295 +
17.15296 +cfgfile="$ofile"
17.15297 +
17.15298 +  cat <<__EOF__ >> "$cfgfile"
17.15299 +# ### BEGIN LIBTOOL TAG CONFIG: $tagname
17.15300 +
17.15301 +# Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`:
17.15302 +
17.15303 +# Shell to use when invoking shell scripts.
17.15304 +SHELL=$lt_SHELL
17.15305 +
17.15306 +# Whether or not to build shared libraries.
17.15307 +build_libtool_libs=$enable_shared
17.15308 +
17.15309 +# Whether or not to build static libraries.
17.15310 +build_old_libs=$enable_static
17.15311 +
17.15312 +# Whether or not to add -lc for building shared libraries.
17.15313 +build_libtool_need_lc=$archive_cmds_need_lc_F77
17.15314 +
17.15315 +# Whether or not to disallow shared libs when runtime libs are static
17.15316 +allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes_F77
17.15317 +
17.15318 +# Whether or not to optimize for fast installation.
17.15319 +fast_install=$enable_fast_install
17.15320 +
17.15321 +# The host system.
17.15322 +host_alias=$host_alias
17.15323 +host=$host
17.15324 +host_os=$host_os
17.15325 +
17.15326 +# The build system.
17.15327 +build_alias=$build_alias
17.15328 +build=$build
17.15329 +build_os=$build_os
17.15330 +
17.15331 +# An echo program that does not interpret backslashes.
17.15332 +echo=$lt_echo
17.15333 +
17.15334 +# The archiver.
17.15335 +AR=$lt_AR
17.15336 +AR_FLAGS=$lt_AR_FLAGS
17.15337 +
17.15338 +# A C compiler.
17.15339 +LTCC=$lt_LTCC
17.15340 +
17.15341 +# LTCC compiler flags.
17.15342 +LTCFLAGS=$lt_LTCFLAGS
17.15343 +
17.15344 +# A language-specific compiler.
17.15345 +CC=$lt_compiler_F77
17.15346 +
17.15347 +# Is the compiler the GNU C compiler?
17.15348 +with_gcc=$GCC_F77
17.15349 +
17.15350 +# An ERE matcher.
17.15351 +EGREP=$lt_EGREP
17.15352 +
17.15353 +# The linker used to build libraries.
17.15354 +LD=$lt_LD_F77
17.15355 +
17.15356 +# Whether we need hard or soft links.
17.15357 +LN_S=$lt_LN_S
17.15358 +
17.15359 +# A BSD-compatible nm program.
17.15360 +NM=$lt_NM
17.15361 +
17.15362 +# A symbol stripping program
17.15363 +STRIP=$lt_STRIP
17.15364 +
17.15365 +# Used to examine libraries when file_magic_cmd begins "file"
17.15366 +MAGIC_CMD=$MAGIC_CMD
17.15367 +
17.15368 +# Used on cygwin: DLL creation program.
17.15369 +DLLTOOL="$DLLTOOL"
17.15370 +
17.15371 +# Used on cygwin: object dumper.
17.15372 +OBJDUMP="$OBJDUMP"
17.15373 +
17.15374 +# Used on cygwin: assembler.
17.15375 +AS="$AS"
17.15376 +
17.15377 +# The name of the directory that contains temporary libtool files.
17.15378 +objdir=$objdir
17.15379 +
17.15380 +# How to create reloadable object files.
17.15381 +reload_flag=$lt_reload_flag
17.15382 +reload_cmds=$lt_reload_cmds
17.15383 +
17.15384 +# How to pass a linker flag through the compiler.
17.15385 +wl=$lt_lt_prog_compiler_wl_F77
17.15386 +
17.15387 +# Object file suffix (normally "o").
17.15388 +objext="$ac_objext"
17.15389 +
17.15390 +# Old archive suffix (normally "a").
17.15391 +libext="$libext"
17.15392 +
17.15393 +# Shared library suffix (normally ".so").
17.15394 +shrext_cmds='$shrext_cmds'
17.15395 +
17.15396 +# Executable file suffix (normally "").
17.15397 +exeext="$exeext"
17.15398 +
17.15399 +# Additional compiler flags for building library objects.
17.15400 +pic_flag=$lt_lt_prog_compiler_pic_F77
17.15401 +pic_mode=$pic_mode
17.15402 +
17.15403 +# What is the maximum length of a command?
17.15404 +max_cmd_len=$lt_cv_sys_max_cmd_len
17.15405 +
17.15406 +# Does compiler simultaneously support -c and -o options?
17.15407 +compiler_c_o=$lt_lt_cv_prog_compiler_c_o_F77
17.15408 +
17.15409 +# Must we lock files when doing compilation?
17.15410 +need_locks=$lt_need_locks
17.15411 +
17.15412 +# Do we need the lib prefix for modules?
17.15413 +need_lib_prefix=$need_lib_prefix
17.15414 +
17.15415 +# Do we need a version for libraries?
17.15416 +need_version=$need_version
17.15417 +
17.15418 +# Whether dlopen is supported.
17.15419 +dlopen_support=$enable_dlopen
17.15420 +
17.15421 +# Whether dlopen of programs is supported.
17.15422 +dlopen_self=$enable_dlopen_self
17.15423 +
17.15424 +# Whether dlopen of statically linked programs is supported.
17.15425 +dlopen_self_static=$enable_dlopen_self_static
17.15426 +
17.15427 +# Compiler flag to prevent dynamic linking.
17.15428 +link_static_flag=$lt_lt_prog_compiler_static_F77
17.15429 +
17.15430 +# Compiler flag to turn off builtin functions.
17.15431 +no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag_F77
17.15432 +
17.15433 +# Compiler flag to allow reflexive dlopens.
17.15434 +export_dynamic_flag_spec=$lt_export_dynamic_flag_spec_F77
17.15435 +
17.15436 +# Compiler flag to generate shared objects directly from archives.
17.15437 +whole_archive_flag_spec=$lt_whole_archive_flag_spec_F77
17.15438 +
17.15439 +# Compiler flag to generate thread-safe objects.
17.15440 +thread_safe_flag_spec=$lt_thread_safe_flag_spec_F77
17.15441 +
17.15442 +# Library versioning type.
17.15443 +version_type=$version_type
17.15444 +
17.15445 +# Format of library name prefix.
17.15446 +libname_spec=$lt_libname_spec
17.15447 +
17.15448 +# List of archive names.  First name is the real one, the rest are links.
17.15449 +# The last name is the one that the linker finds with -lNAME.
17.15450 +library_names_spec=$lt_library_names_spec
17.15451 +
17.15452 +# The coded name of the library, if different from the real name.
17.15453 +soname_spec=$lt_soname_spec
17.15454 +
17.15455 +# Commands used to build and install an old-style archive.
17.15456 +RANLIB=$lt_RANLIB
17.15457 +old_archive_cmds=$lt_old_archive_cmds_F77
17.15458 +old_postinstall_cmds=$lt_old_postinstall_cmds
17.15459 +old_postuninstall_cmds=$lt_old_postuninstall_cmds
17.15460 +
17.15461 +# Create an old-style archive from a shared archive.
17.15462 +old_archive_from_new_cmds=$lt_old_archive_from_new_cmds_F77
17.15463 +
17.15464 +# Create a temporary old-style archive to link instead of a shared archive.
17.15465 +old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds_F77
17.15466 +
17.15467 +# Commands used to build and install a shared archive.
17.15468 +archive_cmds=$lt_archive_cmds_F77
17.15469 +archive_expsym_cmds=$lt_archive_expsym_cmds_F77
17.15470 +postinstall_cmds=$lt_postinstall_cmds
17.15471 +postuninstall_cmds=$lt_postuninstall_cmds
17.15472 +
17.15473 +# Commands used to build a loadable module (assumed same as above if empty)
17.15474 +module_cmds=$lt_module_cmds_F77
17.15475 +module_expsym_cmds=$lt_module_expsym_cmds_F77
17.15476 +
17.15477 +# Commands to strip libraries.
17.15478 +old_striplib=$lt_old_striplib
17.15479 +striplib=$lt_striplib
17.15480 +
17.15481 +# Dependencies to place before the objects being linked to create a
17.15482 +# shared library.
17.15483 +predep_objects=$lt_predep_objects_F77
17.15484 +
17.15485 +# Dependencies to place after the objects being linked to create a
17.15486 +# shared library.
17.15487 +postdep_objects=$lt_postdep_objects_F77
17.15488 +
17.15489 +# Dependencies to place before the objects being linked to create a
17.15490 +# shared library.
17.15491 +predeps=$lt_predeps_F77
17.15492 +
17.15493 +# Dependencies to place after the objects being linked to create a
17.15494 +# shared library.
17.15495 +postdeps=$lt_postdeps_F77
17.15496 +
17.15497 +# The library search path used internally by the compiler when linking
17.15498 +# a shared library.
17.15499 +compiler_lib_search_path=$lt_compiler_lib_search_path_F77
17.15500 +
17.15501 +# Method to check whether dependent libraries are shared objects.
17.15502 +deplibs_check_method=$lt_deplibs_check_method
17.15503 +
17.15504 +# Command to use when deplibs_check_method == file_magic.
17.15505 +file_magic_cmd=$lt_file_magic_cmd
17.15506 +
17.15507 +# Flag that allows shared libraries with undefined symbols to be built.
17.15508 +allow_undefined_flag=$lt_allow_undefined_flag_F77
17.15509 +
17.15510 +# Flag that forces no undefined symbols.
17.15511 +no_undefined_flag=$lt_no_undefined_flag_F77
17.15512 +
17.15513 +# Commands used to finish a libtool library installation in a directory.
17.15514 +finish_cmds=$lt_finish_cmds
17.15515 +
17.15516 +# Same as above, but a single script fragment to be evaled but not shown.
17.15517 +finish_eval=$lt_finish_eval
17.15518 +
17.15519 +# Take the output of nm and produce a listing of raw symbols and C names.
17.15520 +global_symbol_pipe=$lt_lt_cv_sys_global_symbol_pipe
17.15521 +
17.15522 +# Transform the output of nm in a proper C declaration
17.15523 +global_symbol_to_cdecl=$lt_lt_cv_sys_global_symbol_to_cdecl
17.15524 +
17.15525 +# Transform the output of nm in a C name address pair
17.15526 +global_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address
17.15527 +
17.15528 +# This is the shared library runtime path variable.
17.15529 +runpath_var=$runpath_var
17.15530 +
17.15531 +# This is the shared library path variable.
17.15532 +shlibpath_var=$shlibpath_var
17.15533 +
17.15534 +# Is shlibpath searched before the hard-coded library search path?
17.15535 +shlibpath_overrides_runpath=$shlibpath_overrides_runpath
17.15536 +
17.15537 +# How to hardcode a shared library path into an executable.
17.15538 +hardcode_action=$hardcode_action_F77
17.15539 +
17.15540 +# Whether we should hardcode library paths into libraries.
17.15541 +hardcode_into_libs=$hardcode_into_libs
17.15542 +
17.15543 +# Flag to hardcode \$libdir into a binary during linking.
17.15544 +# This must work even if \$libdir does not exist.
17.15545 +hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec_F77
17.15546 +
17.15547 +# If ld is used when linking, flag to hardcode \$libdir into
17.15548 +# a binary during linking. This must work even if \$libdir does
17.15549 +# not exist.
17.15550 +hardcode_libdir_flag_spec_ld=$lt_hardcode_libdir_flag_spec_ld_F77
17.15551 +
17.15552 +# Whether we need a single -rpath flag with a separated argument.
17.15553 +hardcode_libdir_separator=$lt_hardcode_libdir_separator_F77
17.15554 +
17.15555 +# Set to yes if using DIR/libNAME${shared_ext} during linking hardcodes DIR into the
17.15556 +# resulting binary.
17.15557 +hardcode_direct=$hardcode_direct_F77
17.15558 +
17.15559 +# Set to yes if using the -LDIR flag during linking hardcodes DIR into the
17.15560 +# resulting binary.
17.15561 +hardcode_minus_L=$hardcode_minus_L_F77
17.15562 +
17.15563 +# Set to yes if using SHLIBPATH_VAR=DIR during linking hardcodes DIR into
17.15564 +# the resulting binary.
17.15565 +hardcode_shlibpath_var=$hardcode_shlibpath_var_F77
17.15566 +
17.15567 +# Set to yes if building a shared library automatically hardcodes DIR into the library
17.15568 +# and all subsequent libraries and executables linked against it.
17.15569 +hardcode_automatic=$hardcode_automatic_F77
17.15570 +
17.15571 +# Variables whose values should be saved in libtool wrapper scripts and
17.15572 +# restored at relink time.
17.15573 +variables_saved_for_relink="$variables_saved_for_relink"
17.15574 +
17.15575 +# Whether libtool must link a program against all its dependency libraries.
17.15576 +link_all_deplibs=$link_all_deplibs_F77
17.15577 +
17.15578 +# Compile-time system search path for libraries
17.15579 +sys_lib_search_path_spec=$lt_sys_lib_search_path_spec
17.15580 +
17.15581 +# Run-time system search path for libraries
17.15582 +sys_lib_dlsearch_path_spec=$lt_sys_lib_dlsearch_path_spec
17.15583 +
17.15584 +# Fix the shell variable \$srcfile for the compiler.
17.15585 +fix_srcfile_path="$fix_srcfile_path_F77"
17.15586 +
17.15587 +# Set to yes if exported symbols are required.
17.15588 +always_export_symbols=$always_export_symbols_F77
17.15589 +
17.15590 +# The commands to list exported symbols.
17.15591 +export_symbols_cmds=$lt_export_symbols_cmds_F77
17.15592 +
17.15593 +# The commands to extract the exported symbol list from a shared archive.
17.15594 +extract_expsyms_cmds=$lt_extract_expsyms_cmds
17.15595 +
17.15596 +# Symbols that should not be listed in the preloaded symbols.
17.15597 +exclude_expsyms=$lt_exclude_expsyms_F77
17.15598 +
17.15599 +# Symbols that must always be exported.
17.15600 +include_expsyms=$lt_include_expsyms_F77
17.15601 +
17.15602 +# ### END LIBTOOL TAG CONFIG: $tagname
17.15603 +
17.15604 +__EOF__
17.15605 +
17.15606 +
17.15607 +else
17.15608 +  # If there is no Makefile yet, we rely on a make rule to execute
17.15609 +  # `config.status --recheck' to rerun these tests and create the
17.15610 +  # libtool script then.
17.15611 +  ltmain_in=`echo $ltmain | sed -e 's/\.sh$/.in/'`
17.15612 +  if test -f "$ltmain_in"; then
17.15613 +    test -f Makefile && make "$ltmain"
17.15614 +  fi
17.15615 +fi
17.15616 +
17.15617 +
17.15618 +ac_ext=c
17.15619 +ac_cpp='$CPP $CPPFLAGS'
17.15620 +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
17.15621 +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
17.15622 +ac_compiler_gnu=$ac_cv_c_compiler_gnu
17.15623 +
17.15624 +CC="$lt_save_CC"
17.15625 +
17.15626 +	else
17.15627 +	  tagname=""
17.15628 +	fi
17.15629 +	;;
17.15630 +
17.15631 +      GCJ)
17.15632 +	if test -n "$GCJ" && test "X$GCJ" != "Xno"; then
17.15633 +
17.15634 +
17.15635 +
17.15636 +# Source file extension for Java test sources.
17.15637 +ac_ext=java
17.15638 +
17.15639 +# Object file extension for compiled Java test sources.
17.15640 +objext=o
17.15641 +objext_GCJ=$objext
17.15642 +
17.15643 +# Code to be used in simple compile tests
17.15644 +lt_simple_compile_test_code="class foo {}\n"
17.15645 +
17.15646 +# Code to be used in simple link tests
17.15647 +lt_simple_link_test_code='public class conftest { public static void main(String[] argv) {}; }\n'
17.15648 +
17.15649 +# ltmain only uses $CC for tagged configurations so make sure $CC is set.
17.15650 +
17.15651 +# If no C compiler was specified, use CC.
17.15652 +LTCC=${LTCC-"$CC"}
17.15653 +
17.15654 +# If no C compiler flags were specified, use CFLAGS.
17.15655 +LTCFLAGS=${LTCFLAGS-"$CFLAGS"}
17.15656 +
17.15657 +# Allow CC to be a program name with arguments.
17.15658 +compiler=$CC
17.15659 +
17.15660 +
17.15661 +# save warnings/boilerplate of simple test code
17.15662 +ac_outfile=conftest.$ac_objext
17.15663 +printf "$lt_simple_compile_test_code" >conftest.$ac_ext
17.15664 +eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err
17.15665 +_lt_compiler_boilerplate=`cat conftest.err`
17.15666 +$rm conftest*
17.15667 +
17.15668 +ac_outfile=conftest.$ac_objext
17.15669 +printf "$lt_simple_link_test_code" >conftest.$ac_ext
17.15670 +eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err
17.15671 +_lt_linker_boilerplate=`cat conftest.err`
17.15672 +$rm conftest*
17.15673 +
17.15674 +
17.15675 +# Allow CC to be a program name with arguments.
17.15676 +lt_save_CC="$CC"
17.15677 +CC=${GCJ-"gcj"}
17.15678 +compiler=$CC
17.15679 +compiler_GCJ=$CC
17.15680 +for cc_temp in $compiler""; do
17.15681 +  case $cc_temp in
17.15682 +    compile | *[\\/]compile | ccache | *[\\/]ccache ) ;;
17.15683 +    distcc | *[\\/]distcc | purify | *[\\/]purify ) ;;
17.15684 +    \-*) ;;
17.15685 +    *) break;;
17.15686 +  esac
17.15687 +done
17.15688 +cc_basename=`$echo "X$cc_temp" | $Xsed -e 's%.*/%%' -e "s%^$host_alias-%%"`
17.15689 +
17.15690 +
17.15691 +# GCJ did not exist at the time GCC didn't implicitly link libc in.
17.15692 +archive_cmds_need_lc_GCJ=no
17.15693 +
17.15694 +old_archive_cmds_GCJ=$old_archive_cmds
17.15695 +
17.15696 +
17.15697 +lt_prog_compiler_no_builtin_flag_GCJ=
17.15698 +
17.15699 +if test "$GCC" = yes; then
17.15700 +  lt_prog_compiler_no_builtin_flag_GCJ=' -fno-builtin'
17.15701 +
17.15702 +
17.15703 +echo "$as_me:$LINENO: checking if $compiler supports -fno-rtti -fno-exceptions" >&5
17.15704 +echo $ECHO_N "checking if $compiler supports -fno-rtti -fno-exceptions... $ECHO_C" >&6
17.15705 +if test "${lt_cv_prog_compiler_rtti_exceptions+set}" = set; then
17.15706 +  echo $ECHO_N "(cached) $ECHO_C" >&6
17.15707 +else
17.15708 +  lt_cv_prog_compiler_rtti_exceptions=no
17.15709 +  ac_outfile=conftest.$ac_objext
17.15710 +   printf "$lt_simple_compile_test_code" > conftest.$ac_ext
17.15711 +   lt_compiler_flag="-fno-rtti -fno-exceptions"
17.15712 +   # Insert the option either (1) after the last *FLAGS variable, or
17.15713 +   # (2) before a word containing "conftest.", or (3) at the end.
17.15714 +   # Note that $ac_compile itself does not contain backslashes and begins
17.15715 +   # with a dollar sign (not a hyphen), so the echo should work correctly.
17.15716 +   # The option is referenced via a variable to avoid confusing sed.
17.15717 +   lt_compile=`echo "$ac_compile" | $SED \
17.15718 +   -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
17.15719 +   -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
17.15720 +   -e 's:$: $lt_compiler_flag:'`
17.15721 +   (eval echo "\"\$as_me:15718: $lt_compile\"" >&5)
17.15722 +   (eval "$lt_compile" 2>conftest.err)
17.15723 +   ac_status=$?
17.15724 +   cat conftest.err >&5
17.15725 +   echo "$as_me:15722: \$? = $ac_status" >&5
17.15726 +   if (exit $ac_status) && test -s "$ac_outfile"; then
17.15727 +     # The compiler can only warn and ignore the option if not recognized
17.15728 +     # So say no if there are warnings other than the usual output.
17.15729 +     $echo "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' >conftest.exp
17.15730 +     $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2
17.15731 +     if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then
17.15732 +       lt_cv_prog_compiler_rtti_exceptions=yes
17.15733 +     fi
17.15734 +   fi
17.15735 +   $rm conftest*
17.15736 +
17.15737 +fi
17.15738 +echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_rtti_exceptions" >&5
17.15739 +echo "${ECHO_T}$lt_cv_prog_compiler_rtti_exceptions" >&6
17.15740 +
17.15741 +if test x"$lt_cv_prog_compiler_rtti_exceptions" = xyes; then
17.15742 +    lt_prog_compiler_no_builtin_flag_GCJ="$lt_prog_compiler_no_builtin_flag_GCJ -fno-rtti -fno-exceptions"
17.15743 +else
17.15744 +    :
17.15745 +fi
17.15746 +
17.15747 +fi
17.15748 +
17.15749 +lt_prog_compiler_wl_GCJ=
17.15750 +lt_prog_compiler_pic_GCJ=
17.15751 +lt_prog_compiler_static_GCJ=
17.15752 +
17.15753 +echo "$as_me:$LINENO: checking for $compiler option to produce PIC" >&5
17.15754 +echo $ECHO_N "checking for $compiler option to produce PIC... $ECHO_C" >&6
17.15755 +
17.15756 +  if test "$GCC" = yes; then
17.15757 +    lt_prog_compiler_wl_GCJ='-Wl,'
17.15758 +    lt_prog_compiler_static_GCJ='-static'
17.15759 +
17.15760 +    case $host_os in
17.15761 +      aix*)
17.15762 +      # All AIX code is PIC.
17.15763 +      if test "$host_cpu" = ia64; then
17.15764 +	# AIX 5 now supports IA64 processor
17.15765 +	lt_prog_compiler_static_GCJ='-Bstatic'
17.15766 +      fi
17.15767 +      ;;
17.15768 +
17.15769 +    amigaos*)
17.15770 +      # FIXME: we need at least 68020 code to build shared libraries, but
17.15771 +      # adding the `-m68020' flag to GCC prevents building anything better,
17.15772 +      # like `-m68040'.
17.15773 +      lt_prog_compiler_pic_GCJ='-m68020 -resident32 -malways-restore-a4'
17.15774 +      ;;
17.15775 +
17.15776 +    beos* | cygwin* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*)
17.15777 +      # PIC is the default for these OSes.
17.15778 +      ;;
17.15779 +
17.15780 +    mingw* | pw32* | os2*)
17.15781 +      # This hack is so that the source file can tell whether it is being
17.15782 +      # built for inclusion in a dll (and should export symbols for example).
17.15783 +      lt_prog_compiler_pic_GCJ='-DDLL_EXPORT'
17.15784 +      ;;
17.15785 +
17.15786 +    darwin* | rhapsody*)
17.15787 +      # PIC is the default on this platform
17.15788 +      # Common symbols not allowed in MH_DYLIB files
17.15789 +      lt_prog_compiler_pic_GCJ='-fno-common'
17.15790 +      ;;
17.15791 +
17.15792 +    interix3*)
17.15793 +      # Interix 3.x gcc -fpic/-fPIC options generate broken code.
17.15794 +      # Instead, we relocate shared libraries at runtime.
17.15795 +      ;;
17.15796 +
17.15797 +    msdosdjgpp*)
17.15798 +      # Just because we use GCC doesn't mean we suddenly get shared libraries
17.15799 +      # on systems that don't support them.
17.15800 +      lt_prog_compiler_can_build_shared_GCJ=no
17.15801 +      enable_shared=no
17.15802 +      ;;
17.15803 +
17.15804 +    sysv4*MP*)
17.15805 +      if test -d /usr/nec; then
17.15806 +	lt_prog_compiler_pic_GCJ=-Kconform_pic
17.15807 +      fi
17.15808 +      ;;
17.15809 +
17.15810 +    hpux*)
17.15811 +      # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but
17.15812 +      # not for PA HP-UX.
17.15813 +      case $host_cpu in
17.15814 +      hppa*64*|ia64*)
17.15815 +	# +Z the default
17.15816 +	;;
17.15817 +      *)
17.15818 +	lt_prog_compiler_pic_GCJ='-fPIC'
17.15819 +	;;
17.15820 +      esac
17.15821 +      ;;
17.15822 +
17.15823 +    *)
17.15824 +      lt_prog_compiler_pic_GCJ='-fPIC'
17.15825 +      ;;
17.15826 +    esac
17.15827 +  else
17.15828 +    # PORTME Check for flag to pass linker flags through the system compiler.
17.15829 +    case $host_os in
17.15830 +    aix*)
17.15831 +      lt_prog_compiler_wl_GCJ='-Wl,'
17.15832 +      if test "$host_cpu" = ia64; then
17.15833 +	# AIX 5 now supports IA64 processor
17.15834 +	lt_prog_compiler_static_GCJ='-Bstatic'
17.15835 +      else
17.15836 +	lt_prog_compiler_static_GCJ='-bnso -bI:/lib/syscalls.exp'
17.15837 +      fi
17.15838 +      ;;
17.15839 +      darwin*)
17.15840 +        # PIC is the default on this platform
17.15841 +        # Common symbols not allowed in MH_DYLIB files
17.15842 +       case $cc_basename in
17.15843 +         xlc*)
17.15844 +         lt_prog_compiler_pic_GCJ='-qnocommon'
17.15845 +         lt_prog_compiler_wl_GCJ='-Wl,'
17.15846 +         ;;
17.15847 +       esac
17.15848 +       ;;
17.15849 +
17.15850 +    mingw* | pw32* | os2*)
17.15851 +      # This hack is so that the source file can tell whether it is being
17.15852 +      # built for inclusion in a dll (and should export symbols for example).
17.15853 +      lt_prog_compiler_pic_GCJ='-DDLL_EXPORT'
17.15854 +      ;;
17.15855 +
17.15856 +    hpux9* | hpux10* | hpux11*)
17.15857 +      lt_prog_compiler_wl_GCJ='-Wl,'
17.15858 +      # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but
17.15859 +      # not for PA HP-UX.
17.15860 +      case $host_cpu in
17.15861 +      hppa*64*|ia64*)
17.15862 +	# +Z the default
17.15863 +	;;
17.15864 +      *)
17.15865 +	lt_prog_compiler_pic_GCJ='+Z'
17.15866 +	;;
17.15867 +      esac
17.15868 +      # Is there a better lt_prog_compiler_static that works with the bundled CC?
17.15869 +      lt_prog_compiler_static_GCJ='${wl}-a ${wl}archive'
17.15870 +      ;;
17.15871 +
17.15872 +    irix5* | irix6* | nonstopux*)
17.15873 +      lt_prog_compiler_wl_GCJ='-Wl,'
17.15874 +      # PIC (with -KPIC) is the default.
17.15875 +      lt_prog_compiler_static_GCJ='-non_shared'
17.15876 +      ;;
17.15877 +
17.15878 +    newsos6)
17.15879 +      lt_prog_compiler_pic_GCJ='-KPIC'
17.15880 +      lt_prog_compiler_static_GCJ='-Bstatic'
17.15881 +      ;;
17.15882 +
17.15883 +    linux*)
17.15884 +      case $cc_basename in
17.15885 +      icc* | ecc*)
17.15886 +	lt_prog_compiler_wl_GCJ='-Wl,'
17.15887 +	lt_prog_compiler_pic_GCJ='-KPIC'
17.15888 +	lt_prog_compiler_static_GCJ='-static'
17.15889 +        ;;
17.15890 +      pgcc* | pgf77* | pgf90* | pgf95*)
17.15891 +        # Portland Group compilers (*not* the Pentium gcc compiler,
17.15892 +	# which looks to be a dead project)
17.15893 +	lt_prog_compiler_wl_GCJ='-Wl,'
17.15894 +	lt_prog_compiler_pic_GCJ='-fpic'
17.15895 +	lt_prog_compiler_static_GCJ='-Bstatic'
17.15896 +        ;;
17.15897 +      ccc*)
17.15898 +        lt_prog_compiler_wl_GCJ='-Wl,'
17.15899 +        # All Alpha code is PIC.
17.15900 +        lt_prog_compiler_static_GCJ='-non_shared'
17.15901 +        ;;
17.15902 +      esac
17.15903 +      ;;
17.15904 +
17.15905 +    osf3* | osf4* | osf5*)
17.15906 +      lt_prog_compiler_wl_GCJ='-Wl,'
17.15907 +      # All OSF/1 code is PIC.
17.15908 +      lt_prog_compiler_static_GCJ='-non_shared'
17.15909 +      ;;
17.15910 +
17.15911 +    solaris*)
17.15912 +      lt_prog_compiler_pic_GCJ='-KPIC'
17.15913 +      lt_prog_compiler_static_GCJ='-Bstatic'
17.15914 +      case $cc_basename in
17.15915 +      f77* | f90* | f95*)
17.15916 +	lt_prog_compiler_wl_GCJ='-Qoption ld ';;
17.15917 +      *)
17.15918 +	lt_prog_compiler_wl_GCJ='-Wl,';;
17.15919 +      esac
17.15920 +      ;;
17.15921 +
17.15922 +    sunos4*)
17.15923 +      lt_prog_compiler_wl_GCJ='-Qoption ld '
17.15924 +      lt_prog_compiler_pic_GCJ='-PIC'
17.15925 +      lt_prog_compiler_static_GCJ='-Bstatic'
17.15926 +      ;;
17.15927 +
17.15928 +    sysv4 | sysv4.2uw2* | sysv4.3*)
17.15929 +      lt_prog_compiler_wl_GCJ='-Wl,'
17.15930 +      lt_prog_compiler_pic_GCJ='-KPIC'
17.15931 +      lt_prog_compiler_static_GCJ='-Bstatic'
17.15932 +      ;;
17.15933 +
17.15934 +    sysv4*MP*)
17.15935 +      if test -d /usr/nec ;then
17.15936 +	lt_prog_compiler_pic_GCJ='-Kconform_pic'
17.15937 +	lt_prog_compiler_static_GCJ='-Bstatic'
17.15938 +      fi
17.15939 +      ;;
17.15940 +
17.15941 +    sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*)
17.15942 +      lt_prog_compiler_wl_GCJ='-Wl,'
17.15943 +      lt_prog_compiler_pic_GCJ='-KPIC'
17.15944 +      lt_prog_compiler_static_GCJ='-Bstatic'
17.15945 +      ;;
17.15946 +
17.15947 +    unicos*)
17.15948 +      lt_prog_compiler_wl_GCJ='-Wl,'
17.15949 +      lt_prog_compiler_can_build_shared_GCJ=no
17.15950 +      ;;
17.15951 +
17.15952 +    uts4*)
17.15953 +      lt_prog_compiler_pic_GCJ='-pic'
17.15954 +      lt_prog_compiler_static_GCJ='-Bstatic'
17.15955 +      ;;
17.15956 +
17.15957 +    *)
17.15958 +      lt_prog_compiler_can_build_shared_GCJ=no
17.15959 +      ;;
17.15960 +    esac
17.15961 +  fi
17.15962 +
17.15963 +echo "$as_me:$LINENO: result: $lt_prog_compiler_pic_GCJ" >&5
17.15964 +echo "${ECHO_T}$lt_prog_compiler_pic_GCJ" >&6
17.15965 +
17.15966 +#
17.15967 +# Check to make sure the PIC flag actually works.
17.15968 +#
17.15969 +if test -n "$lt_prog_compiler_pic_GCJ"; then
17.15970 +
17.15971 +echo "$as_me:$LINENO: checking if $compiler PIC flag $lt_prog_compiler_pic_GCJ works" >&5
17.15972 +echo $ECHO_N "checking if $compiler PIC flag $lt_prog_compiler_pic_GCJ works... $ECHO_C" >&6
17.15973 +if test "${lt_prog_compiler_pic_works_GCJ+set}" = set; then
17.15974 +  echo $ECHO_N "(cached) $ECHO_C" >&6
17.15975 +else
17.15976 +  lt_prog_compiler_pic_works_GCJ=no
17.15977 +  ac_outfile=conftest.$ac_objext
17.15978 +   printf "$lt_simple_compile_test_code" > conftest.$ac_ext
17.15979 +   lt_compiler_flag="$lt_prog_compiler_pic_GCJ"
17.15980 +   # Insert the option either (1) after the last *FLAGS variable, or
17.15981 +   # (2) before a word containing "conftest.", or (3) at the end.
17.15982 +   # Note that $ac_compile itself does not contain backslashes and begins
17.15983 +   # with a dollar sign (not a hyphen), so the echo should work correctly.
17.15984 +   # The option is referenced via a variable to avoid confusing sed.
17.15985 +   lt_compile=`echo "$ac_compile" | $SED \
17.15986 +   -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
17.15987 +   -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
17.15988 +   -e 's:$: $lt_compiler_flag:'`
17.15989 +   (eval echo "\"\$as_me:15986: $lt_compile\"" >&5)
17.15990 +   (eval "$lt_compile" 2>conftest.err)
17.15991 +   ac_status=$?
17.15992 +   cat conftest.err >&5
17.15993 +   echo "$as_me:15990: \$? = $ac_status" >&5
17.15994 +   if (exit $ac_status) && test -s "$ac_outfile"; then
17.15995 +     # The compiler can only warn and ignore the option if not recognized
17.15996 +     # So say no if there are warnings other than the usual output.
17.15997 +     $echo "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' >conftest.exp
17.15998 +     $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2
17.15999 +     if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then
17.16000 +       lt_prog_compiler_pic_works_GCJ=yes
17.16001 +     fi
17.16002 +   fi
17.16003 +   $rm conftest*
17.16004 +
17.16005 +fi
17.16006 +echo "$as_me:$LINENO: result: $lt_prog_compiler_pic_works_GCJ" >&5
17.16007 +echo "${ECHO_T}$lt_prog_compiler_pic_works_GCJ" >&6
17.16008 +
17.16009 +if test x"$lt_prog_compiler_pic_works_GCJ" = xyes; then
17.16010 +    case $lt_prog_compiler_pic_GCJ in
17.16011 +     "" | " "*) ;;
17.16012 +     *) lt_prog_compiler_pic_GCJ=" $lt_prog_compiler_pic_GCJ" ;;
17.16013 +     esac
17.16014 +else
17.16015 +    lt_prog_compiler_pic_GCJ=
17.16016 +     lt_prog_compiler_can_build_shared_GCJ=no
17.16017 +fi
17.16018 +
17.16019 +fi
17.16020 +case $host_os in
17.16021 +  # For platforms which do not support PIC, -DPIC is meaningless:
17.16022 +  *djgpp*)
17.16023 +    lt_prog_compiler_pic_GCJ=
17.16024 +    ;;
17.16025 +  *)
17.16026 +    lt_prog_compiler_pic_GCJ="$lt_prog_compiler_pic_GCJ"
17.16027 +    ;;
17.16028 +esac
17.16029 +
17.16030 +#
17.16031 +# Check to make sure the static flag actually works.
17.16032 +#
17.16033 +wl=$lt_prog_compiler_wl_GCJ eval lt_tmp_static_flag=\"$lt_prog_compiler_static_GCJ\"
17.16034 +echo "$as_me:$LINENO: checking if $compiler static flag $lt_tmp_static_flag works" >&5
17.16035 +echo $ECHO_N "checking if $compiler static flag $lt_tmp_static_flag works... $ECHO_C" >&6
17.16036 +if test "${lt_prog_compiler_static_works_GCJ+set}" = set; then
17.16037 +  echo $ECHO_N "(cached) $ECHO_C" >&6
17.16038 +else
17.16039 +  lt_prog_compiler_static_works_GCJ=no
17.16040 +   save_LDFLAGS="$LDFLAGS"
17.16041 +   LDFLAGS="$LDFLAGS $lt_tmp_static_flag"
17.16042 +   printf "$lt_simple_link_test_code" > conftest.$ac_ext
17.16043 +   if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then
17.16044 +     # The linker can only warn and ignore the option if not recognized
17.16045 +     # So say no if there are warnings
17.16046 +     if test -s conftest.err; then
17.16047 +       # Append any errors to the config.log.
17.16048 +       cat conftest.err 1>&5
17.16049 +       $echo "X$_lt_linker_boilerplate" | $Xsed -e '/^$/d' > conftest.exp
17.16050 +       $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2
17.16051 +       if diff conftest.exp conftest.er2 >/dev/null; then
17.16052 +         lt_prog_compiler_static_works_GCJ=yes
17.16053 +       fi
17.16054 +     else
17.16055 +       lt_prog_compiler_static_works_GCJ=yes
17.16056 +     fi
17.16057 +   fi
17.16058 +   $rm conftest*
17.16059 +   LDFLAGS="$save_LDFLAGS"
17.16060 +
17.16061 +fi
17.16062 +echo "$as_me:$LINENO: result: $lt_prog_compiler_static_works_GCJ" >&5
17.16063 +echo "${ECHO_T}$lt_prog_compiler_static_works_GCJ" >&6
17.16064 +
17.16065 +if test x"$lt_prog_compiler_static_works_GCJ" = xyes; then
17.16066 +    :
17.16067 +else
17.16068 +    lt_prog_compiler_static_GCJ=
17.16069 +fi
17.16070 +
17.16071 +
17.16072 +echo "$as_me:$LINENO: checking if $compiler supports -c -o file.$ac_objext" >&5
17.16073 +echo $ECHO_N "checking if $compiler supports -c -o file.$ac_objext... $ECHO_C" >&6
17.16074 +if test "${lt_cv_prog_compiler_c_o_GCJ+set}" = set; then
17.16075 +  echo $ECHO_N "(cached) $ECHO_C" >&6
17.16076 +else
17.16077 +  lt_cv_prog_compiler_c_o_GCJ=no
17.16078 +   $rm -r conftest 2>/dev/null
17.16079 +   mkdir conftest
17.16080 +   cd conftest
17.16081 +   mkdir out
17.16082 +   printf "$lt_simple_compile_test_code" > conftest.$ac_ext
17.16083 +
17.16084 +   lt_compiler_flag="-o out/conftest2.$ac_objext"
17.16085 +   # Insert the option either (1) after the last *FLAGS variable, or
17.16086 +   # (2) before a word containing "conftest.", or (3) at the end.
17.16087 +   # Note that $ac_compile itself does not contain backslashes and begins
17.16088 +   # with a dollar sign (not a hyphen), so the echo should work correctly.
17.16089 +   lt_compile=`echo "$ac_compile" | $SED \
17.16090 +   -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
17.16091 +   -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
17.16092 +   -e 's:$: $lt_compiler_flag:'`
17.16093 +   (eval echo "\"\$as_me:16090: $lt_compile\"" >&5)
17.16094 +   (eval "$lt_compile" 2>out/conftest.err)
17.16095 +   ac_status=$?
17.16096 +   cat out/conftest.err >&5
17.16097 +   echo "$as_me:16094: \$? = $ac_status" >&5
17.16098 +   if (exit $ac_status) && test -s out/conftest2.$ac_objext
17.16099 +   then
17.16100 +     # The compiler can only warn and ignore the option if not recognized
17.16101 +     # So say no if there are warnings
17.16102 +     $echo "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' > out/conftest.exp
17.16103 +     $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2
17.16104 +     if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then
17.16105 +       lt_cv_prog_compiler_c_o_GCJ=yes
17.16106 +     fi
17.16107 +   fi
17.16108 +   chmod u+w . 2>&5
17.16109 +   $rm conftest*
17.16110 +   # SGI C++ compiler will create directory out/ii_files/ for
17.16111 +   # template instantiation
17.16112 +   test -d out/ii_files && $rm out/ii_files/* && rmdir out/ii_files
17.16113 +   $rm out/* && rmdir out
17.16114 +   cd ..
17.16115 +   rmdir conftest
17.16116 +   $rm conftest*
17.16117 +
17.16118 +fi
17.16119 +echo "$as_me:$LINENO: result: $lt_cv_prog_compiler_c_o_GCJ" >&5
17.16120 +echo "${ECHO_T}$lt_cv_prog_compiler_c_o_GCJ" >&6
17.16121 +
17.16122 +
17.16123 +hard_links="nottested"
17.16124 +if test "$lt_cv_prog_compiler_c_o_GCJ" = no && test "$need_locks" != no; then
17.16125 +  # do not overwrite the value of need_locks provided by the user
17.16126 +  echo "$as_me:$LINENO: checking if we can lock with hard links" >&5
17.16127 +echo $ECHO_N "checking if we can lock with hard links... $ECHO_C" >&6
17.16128 +  hard_links=yes
17.16129 +  $rm conftest*
17.16130 +  ln conftest.a conftest.b 2>/dev/null && hard_links=no
17.16131 +  touch conftest.a
17.16132 +  ln conftest.a conftest.b 2>&5 || hard_links=no
17.16133 +  ln conftest.a conftest.b 2>/dev/null && hard_links=no
17.16134 +  echo "$as_me:$LINENO: result: $hard_links" >&5
17.16135 +echo "${ECHO_T}$hard_links" >&6
17.16136 +  if test "$hard_links" = no; then
17.16137 +    { echo "$as_me:$LINENO: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&5
17.16138 +echo "$as_me: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&2;}
17.16139 +    need_locks=warn
17.16140 +  fi
17.16141 +else
17.16142 +  need_locks=no
17.16143 +fi
17.16144 +
17.16145 +echo "$as_me:$LINENO: checking whether the $compiler linker ($LD) supports shared libraries" >&5
17.16146 +echo $ECHO_N "checking whether the $compiler linker ($LD) supports shared libraries... $ECHO_C" >&6
17.16147 +
17.16148 +  runpath_var=
17.16149 +  allow_undefined_flag_GCJ=
17.16150 +  enable_shared_with_static_runtimes_GCJ=no
17.16151 +  archive_cmds_GCJ=
17.16152 +  archive_expsym_cmds_GCJ=
17.16153 +  old_archive_From_new_cmds_GCJ=
17.16154 +  old_archive_from_expsyms_cmds_GCJ=
17.16155 +  export_dynamic_flag_spec_GCJ=
17.16156 +  whole_archive_flag_spec_GCJ=
17.16157 +  thread_safe_flag_spec_GCJ=
17.16158 +  hardcode_libdir_flag_spec_GCJ=
17.16159 +  hardcode_libdir_flag_spec_ld_GCJ=
17.16160 +  hardcode_libdir_separator_GCJ=
17.16161 +  hardcode_direct_GCJ=no
17.16162 +  hardcode_minus_L_GCJ=no
17.16163 +  hardcode_shlibpath_var_GCJ=unsupported
17.16164 +  link_all_deplibs_GCJ=unknown
17.16165 +  hardcode_automatic_GCJ=no
17.16166 +  module_cmds_GCJ=
17.16167 +  module_expsym_cmds_GCJ=
17.16168 +  always_export_symbols_GCJ=no
17.16169 +  export_symbols_cmds_GCJ='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols'
17.16170 +  # include_expsyms should be a list of space-separated symbols to be *always*
17.16171 +  # included in the symbol list
17.16172 +  include_expsyms_GCJ=
17.16173 +  # exclude_expsyms can be an extended regexp of symbols to exclude
17.16174 +  # it will be wrapped by ` (' and `)$', so one must not match beginning or
17.16175 +  # end of line.  Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc',
17.16176 +  # as well as any symbol that contains `d'.
17.16177 +  exclude_expsyms_GCJ="_GLOBAL_OFFSET_TABLE_"
17.16178 +  # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out
17.16179 +  # platforms (ab)use it in PIC code, but their linkers get confused if
17.16180 +  # the symbol is explicitly referenced.  Since portable code cannot
17.16181 +  # rely on this symbol name, it's probably fine to never include it in
17.16182 +  # preloaded symbol tables.
17.16183 +  extract_expsyms_cmds=
17.16184 +  # Just being paranoid about ensuring that cc_basename is set.
17.16185 +  for cc_temp in $compiler""; do
17.16186 +  case $cc_temp in
17.16187 +    compile | *[\\/]compile | ccache | *[\\/]ccache ) ;;
17.16188 +    distcc | *[\\/]distcc | purify | *[\\/]purify ) ;;
17.16189 +    \-*) ;;
17.16190 +    *) break;;
17.16191 +  esac
17.16192 +done
17.16193 +cc_basename=`$echo "X$cc_temp" | $Xsed -e 's%.*/%%' -e "s%^$host_alias-%%"`
17.16194 +
17.16195 +  case $host_os in
17.16196 +  cygwin* | mingw* | pw32*)
17.16197 +    # FIXME: the MSVC++ port hasn't been tested in a loooong time
17.16198 +    # When not using gcc, we currently assume that we are using
17.16199 +    # Microsoft Visual C++.
17.16200 +    if test "$GCC" != yes; then
17.16201 +      with_gnu_ld=no
17.16202 +    fi
17.16203 +    ;;
17.16204 +  interix*)
17.16205 +    # we just hope/assume this is gcc and not c89 (= MSVC++)
17.16206 +    with_gnu_ld=yes
17.16207 +    ;;
17.16208 +  openbsd*)
17.16209 +    with_gnu_ld=no
17.16210 +    ;;
17.16211 +  esac
17.16212 +
17.16213 +  ld_shlibs_GCJ=yes
17.16214 +  if test "$with_gnu_ld" = yes; then
17.16215 +    # If archive_cmds runs LD, not CC, wlarc should be empty
17.16216 +    wlarc='${wl}'
17.16217 +
17.16218 +    # Set some defaults for GNU ld with shared library support. These
17.16219 +    # are reset later if shared libraries are not supported. Putting them
17.16220 +    # here allows them to be overridden if necessary.
17.16221 +    runpath_var=LD_RUN_PATH
17.16222 +    hardcode_libdir_flag_spec_GCJ='${wl}--rpath ${wl}$libdir'
17.16223 +    export_dynamic_flag_spec_GCJ='${wl}--export-dynamic'
17.16224 +    # ancient GNU ld didn't support --whole-archive et. al.
17.16225 +    if $LD --help 2>&1 | grep 'no-whole-archive' > /dev/null; then
17.16226 +	whole_archive_flag_spec_GCJ="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive'
17.16227 +      else
17.16228 +  	whole_archive_flag_spec_GCJ=
17.16229 +    fi
17.16230 +    supports_anon_versioning=no
17.16231 +    case `$LD -v 2>/dev/null` in
17.16232 +      *\ [01].* | *\ 2.[0-9].* | *\ 2.10.*) ;; # catch versions < 2.11
17.16233 +      *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ...
17.16234 +      *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ...
17.16235 +      *\ 2.11.*) ;; # other 2.11 versions
17.16236 +      *) supports_anon_versioning=yes ;;
17.16237 +    esac
17.16238 +
17.16239 +    # See if GNU ld supports shared libraries.
17.16240 +    case $host_os in
17.16241 +    aix3* | aix4* | aix5*)
17.16242 +      # On AIX/PPC, the GNU linker is very broken
17.16243 +      if test "$host_cpu" != ia64; then
17.16244 +	ld_shlibs_GCJ=no
17.16245 +	cat <<EOF 1>&2
17.16246 +
17.16247 +*** Warning: the GNU linker, at least up to release 2.9.1, is reported
17.16248 +*** to be unable to reliably create shared libraries on AIX.
17.16249 +*** Therefore, libtool is disabling shared libraries support.  If you
17.16250 +*** really care for shared libraries, you may want to modify your PATH
17.16251 +*** so that a non-GNU linker is found, and then restart.
17.16252 +
17.16253 +EOF
17.16254 +      fi
17.16255 +      ;;
17.16256 +
17.16257 +    amigaos*)
17.16258 +      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)'
17.16259 +      hardcode_libdir_flag_spec_GCJ='-L$libdir'
17.16260 +      hardcode_minus_L_GCJ=yes
17.16261 +
17.16262 +      # Samuel A. Falvo II <kc5tja@dolphin.openprojects.net> reports
17.16263 +      # that the semantics of dynamic libraries on AmigaOS, at least up
17.16264 +      # to version 4, is to share data among multiple programs linked
17.16265 +      # with the same dynamic library.  Since this doesn't match the
17.16266 +      # behavior of shared libraries on other platforms, we can't use
17.16267 +      # them.
17.16268 +      ld_shlibs_GCJ=no
17.16269 +      ;;
17.16270 +
17.16271 +    beos*)
17.16272 +      if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
17.16273 +	allow_undefined_flag_GCJ=unsupported
17.16274 +	# Joseph Beckenbach <jrb3@best.com> says some releases of gcc
17.16275 +	# support --undefined.  This deserves some investigation.  FIXME
17.16276 +	archive_cmds_GCJ='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
17.16277 +      else
17.16278 +	ld_shlibs_GCJ=no
17.16279 +      fi
17.16280 +      ;;
17.16281 +
17.16282 +    cygwin* | mingw* | pw32*)
17.16283 +      # _LT_AC_TAGVAR(hardcode_libdir_flag_spec, GCJ) is actually meaningless,
17.16284 +      # as there is no search path for DLLs.
17.16285 +      hardcode_libdir_flag_spec_GCJ='-L$libdir'
17.16286 +      allow_undefined_flag_GCJ=unsupported
17.16287 +      always_export_symbols_GCJ=no
17.16288 +      enable_shared_with_static_runtimes_GCJ=yes
17.16289 +      export_symbols_cmds_GCJ='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS] /s/.* \([^ ]*\)/\1 DATA/'\'' | $SED -e '\''/^[AITW] /s/.* //'\'' | sort | uniq > $export_symbols'
17.16290 +
17.16291 +      if $LD --help 2>&1 | grep 'auto-import' > /dev/null; then
17.16292 +        archive_cmds_GCJ='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
17.16293 +	# If the export-symbols file already is a .def file (1st line
17.16294 +	# is EXPORTS), use it as is; otherwise, prepend...
17.16295 +	archive_expsym_cmds_GCJ='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then
17.16296 +	  cp $export_symbols $output_objdir/$soname.def;
17.16297 +	else
17.16298 +	  echo EXPORTS > $output_objdir/$soname.def;
17.16299 +	  cat $export_symbols >> $output_objdir/$soname.def;
17.16300 +	fi~
17.16301 +	$CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
17.16302 +      else
17.16303 +	ld_shlibs_GCJ=no
17.16304 +      fi
17.16305 +      ;;
17.16306 +
17.16307 +    interix3*)
17.16308 +      hardcode_direct_GCJ=no
17.16309 +      hardcode_shlibpath_var_GCJ=no
17.16310 +      hardcode_libdir_flag_spec_GCJ='${wl}-rpath,$libdir'
17.16311 +      export_dynamic_flag_spec_GCJ='${wl}-E'
17.16312 +      # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc.
17.16313 +      # Instead, shared libraries are loaded at an image base (0x10000000 by
17.16314 +      # default) and relocated if they conflict, which is a slow very memory
17.16315 +      # consuming and fragmenting process.  To avoid this, we pick a random,
17.16316 +      # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link
17.16317 +      # time.  Moving up from 0x10000000 also allows more sbrk(2) space.
17.16318 +      archive_cmds_GCJ='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
17.16319 +      archive_expsym_cmds_GCJ='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'
17.16320 +      ;;
17.16321 +
17.16322 +    linux*)
17.16323 +      if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
17.16324 +	tmp_addflag=
17.16325 +	case $cc_basename,$host_cpu in
17.16326 +	pgcc*)				# Portland Group C compiler
17.16327 +	  whole_archive_flag_spec_GCJ='${wl}--whole-archive`for conv in $convenience\"\"; do test  -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $echo \"$new_convenience\"` ${wl}--no-whole-archive'
17.16328 +	  tmp_addflag=' $pic_flag'
17.16329 +	  ;;
17.16330 +	pgf77* | pgf90* | pgf95*)	# Portland Group f77 and f90 compilers
17.16331 +	  whole_archive_flag_spec_GCJ='${wl}--whole-archive`for conv in $convenience\"\"; do test  -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $echo \"$new_convenience\"` ${wl}--no-whole-archive'
17.16332 +	  tmp_addflag=' $pic_flag -Mnomain' ;;
17.16333 +	ecc*,ia64* | icc*,ia64*)		# Intel C compiler on ia64
17.16334 +	  tmp_addflag=' -i_dynamic' ;;
17.16335 +	efc*,ia64* | ifort*,ia64*)	# Intel Fortran compiler on ia64
17.16336 +	  tmp_addflag=' -i_dynamic -nofor_main' ;;
17.16337 +	ifc* | ifort*)			# Intel Fortran compiler
17.16338 +	  tmp_addflag=' -nofor_main' ;;
17.16339 +	esac
17.16340 +	archive_cmds_GCJ='$CC -shared'"$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
17.16341 +
17.16342 +	if test $supports_anon_versioning = yes; then
17.16343 +	  archive_expsym_cmds_GCJ='$echo "{ global:" > $output_objdir/$libname.ver~
17.16344 +  cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~
17.16345 +  $echo "local: *; };" >> $output_objdir/$libname.ver~
17.16346 +	  $CC -shared'"$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib'
17.16347 +	fi
17.16348 +	link_all_deplibs_GCJ=no
17.16349 +      else
17.16350 +	ld_shlibs_GCJ=no
17.16351 +      fi
17.16352 +      ;;
17.16353 +
17.16354 +    netbsd* | netbsdelf*-gnu | knetbsd*-gnu)
17.16355 +      if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then
17.16356 +	archive_cmds_GCJ='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib'
17.16357 +	wlarc=
17.16358 +      else
17.16359 +	archive_cmds_GCJ='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
17.16360 +	archive_expsym_cmds_GCJ='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
17.16361 +      fi
17.16362 +      ;;
17.16363 +
17.16364 +    solaris*)
17.16365 +      if $LD -v 2>&1 | grep 'BFD 2\.8' > /dev/null; then
17.16366 +	ld_shlibs_GCJ=no
17.16367 +	cat <<EOF 1>&2
17.16368 +
17.16369 +*** Warning: The releases 2.8.* of the GNU linker cannot reliably
17.16370 +*** create shared libraries on Solaris systems.  Therefore, libtool
17.16371 +*** is disabling shared libraries support.  We urge you to upgrade GNU
17.16372 +*** binutils to release 2.9.1 or newer.  Another option is to modify
17.16373 +*** your PATH or compiler configuration so that the native linker is
17.16374 +*** used, and then restart.
17.16375 +
17.16376 +EOF
17.16377 +      elif $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
17.16378 +	archive_cmds_GCJ='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
17.16379 +	archive_expsym_cmds_GCJ='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
17.16380 +      else
17.16381 +	ld_shlibs_GCJ=no
17.16382 +      fi
17.16383 +      ;;
17.16384 +
17.16385 +    sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*)
17.16386 +      case `$LD -v 2>&1` in
17.16387 +        *\ [01].* | *\ 2.[0-9].* | *\ 2.1[0-5].*)
17.16388 +	ld_shlibs_GCJ=no
17.16389 +	cat <<_LT_EOF 1>&2
17.16390 +
17.16391 +*** Warning: Releases of the GNU linker prior to 2.16.91.0.3 can not
17.16392 +*** reliably create shared libraries on SCO systems.  Therefore, libtool
17.16393 +*** is disabling shared libraries support.  We urge you to upgrade GNU
17.16394 +*** binutils to release 2.16.91.0.3 or newer.  Another option is to modify
17.16395 +*** your PATH or compiler configuration so that the native linker is
17.16396 +*** used, and then restart.
17.16397 +
17.16398 +_LT_EOF
17.16399 +	;;
17.16400 +	*)
17.16401 +	  if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
17.16402 +	    hardcode_libdir_flag_spec_GCJ='`test -z "$SCOABSPATH" && echo ${wl}-rpath,$libdir`'
17.16403 +	    archive_cmds_GCJ='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib'
17.16404 +	    archive_expsym_cmds_GCJ='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname,\${SCOABSPATH:+${install_libdir}/}$soname,-retain-symbols-file,$export_symbols -o $lib'
17.16405 +	  else
17.16406 +	    ld_shlibs_GCJ=no
17.16407 +	  fi
17.16408 +	;;
17.16409 +      esac
17.16410 +      ;;
17.16411 +
17.16412 +    sunos4*)
17.16413 +      archive_cmds_GCJ='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags'
17.16414 +      wlarc=
17.16415 +      hardcode_direct_GCJ=yes
17.16416 +      hardcode_shlibpath_var_GCJ=no
17.16417 +      ;;
17.16418 +
17.16419 +    *)
17.16420 +      if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
17.16421 +	archive_cmds_GCJ='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
17.16422 +	archive_expsym_cmds_GCJ='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
17.16423 +      else
17.16424 +	ld_shlibs_GCJ=no
17.16425 +      fi
17.16426 +      ;;
17.16427 +    esac
17.16428 +
17.16429 +    if test "$ld_shlibs_GCJ" = no; then
17.16430 +      runpath_var=
17.16431 +      hardcode_libdir_flag_spec_GCJ=
17.16432 +      export_dynamic_flag_spec_GCJ=
17.16433 +      whole_archive_flag_spec_GCJ=
17.16434 +    fi
17.16435 +  else
17.16436 +    # PORTME fill in a description of your system's linker (not GNU ld)
17.16437 +    case $host_os in
17.16438 +    aix3*)
17.16439 +      allow_undefined_flag_GCJ=unsupported
17.16440 +      always_export_symbols_GCJ=yes
17.16441 +      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'
17.16442 +      # Note: this linker hardcodes the directories in LIBPATH if there
17.16443 +      # are no directories specified by -L.
17.16444 +      hardcode_minus_L_GCJ=yes
17.16445 +      if test "$GCC" = yes && test -z "$lt_prog_compiler_static"; then
17.16446 +	# Neither direct hardcoding nor static linking is supported with a
17.16447 +	# broken collect2.
17.16448 +	hardcode_direct_GCJ=unsupported
17.16449 +      fi
17.16450 +      ;;
17.16451 +
17.16452 +    aix4* | aix5*)
17.16453 +      if test "$host_cpu" = ia64; then
17.16454 +	# On IA64, the linker does run time linking by default, so we don't
17.16455 +	# have to do anything special.
17.16456 +	aix_use_runtimelinking=no
17.16457 +	exp_sym_flag='-Bexport'
17.16458 +	no_entry_flag=""
17.16459 +      else
17.16460 +	# If we're using GNU nm, then we don't want the "-C" option.
17.16461 +	# -C means demangle to AIX nm, but means don't demangle with GNU nm
17.16462 +	if $NM -V 2>&1 | grep 'GNU' > /dev/null; then
17.16463 +	  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'
17.16464 +	else
17.16465 +	  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'
17.16466 +	fi
17.16467 +	aix_use_runtimelinking=no
17.16468 +
17.16469 +	# Test if we are trying to use run time linking or normal
17.16470 +	# AIX style linking. If -brtl is somewhere in LDFLAGS, we
17.16471 +	# need to do runtime linking.
17.16472 +	case $host_os in aix4.[23]|aix4.[23].*|aix5*)
17.16473 +	  for ld_flag in $LDFLAGS; do
17.16474 +  	  if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then
17.16475 +  	    aix_use_runtimelinking=yes
17.16476 +  	    break
17.16477 +  	  fi
17.16478 +	  done
17.16479 +	  ;;
17.16480 +	esac
17.16481 +
17.16482 +	exp_sym_flag='-bexport'
17.16483 +	no_entry_flag='-bnoentry'
17.16484 +      fi
17.16485 +
17.16486 +      # When large executables or shared objects are built, AIX ld can
17.16487 +      # have problems creating the table of contents.  If linking a library
17.16488 +      # or program results in "error TOC overflow" add -mminimal-toc to
17.16489 +      # CXXFLAGS/CFLAGS for g++/gcc.  In the cases where that is not
17.16490 +      # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS.
17.16491 +
17.16492 +      archive_cmds_GCJ=''
17.16493 +      hardcode_direct_GCJ=yes
17.16494 +      hardcode_libdir_separator_GCJ=':'
17.16495 +      link_all_deplibs_GCJ=yes
17.16496 +
17.16497 +      if test "$GCC" = yes; then
17.16498 +	case $host_os in aix4.[012]|aix4.[012].*)
17.16499 +	# We only want to do this on AIX 4.2 and lower, the check
17.16500 +	# below for broken collect2 doesn't work under 4.3+
17.16501 +	  collect2name=`${CC} -print-prog-name=collect2`
17.16502 +	  if test -f "$collect2name" && \
17.16503 +  	   strings "$collect2name" | grep resolve_lib_name >/dev/null
17.16504 +	  then
17.16505 +  	  # We have reworked collect2
17.16506 +  	  hardcode_direct_GCJ=yes
17.16507 +	  else
17.16508 +  	  # We have old collect2
17.16509 +  	  hardcode_direct_GCJ=unsupported
17.16510 +  	  # It fails to find uninstalled libraries when the uninstalled
17.16511 +  	  # path is not listed in the libpath.  Setting hardcode_minus_L
17.16512 +  	  # to unsupported forces relinking
17.16513 +  	  hardcode_minus_L_GCJ=yes
17.16514 +  	  hardcode_libdir_flag_spec_GCJ='-L$libdir'
17.16515 +  	  hardcode_libdir_separator_GCJ=
17.16516 +	  fi
17.16517 +	  ;;
17.16518 +	esac
17.16519 +	shared_flag='-shared'
17.16520 +	if test "$aix_use_runtimelinking" = yes; then
17.16521 +	  shared_flag="$shared_flag "'${wl}-G'
17.16522 +	fi
17.16523 +      else
17.16524 +	# not using gcc
17.16525 +	if test "$host_cpu" = ia64; then
17.16526 +  	# VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release
17.16527 +  	# chokes on -Wl,-G. The following line is correct:
17.16528 +	  shared_flag='-G'
17.16529 +	else
17.16530 +	  if test "$aix_use_runtimelinking" = yes; then
17.16531 +	    shared_flag='${wl}-G'
17.16532 +	  else
17.16533 +	    shared_flag='${wl}-bM:SRE'
17.16534 +	  fi
17.16535 +	fi
17.16536 +      fi
17.16537 +
17.16538 +      # It seems that -bexpall does not export symbols beginning with
17.16539 +      # underscore (_), so it is better to generate a list of symbols to export.
17.16540 +      always_export_symbols_GCJ=yes
17.16541 +      if test "$aix_use_runtimelinking" = yes; then
17.16542 +	# Warning - without using the other runtime loading flags (-brtl),
17.16543 +	# -berok will link without error, but may produce a broken library.
17.16544 +	allow_undefined_flag_GCJ='-berok'
17.16545 +       # Determine the default libpath from the value encoded in an empty executable.
17.16546 +       cat >conftest.$ac_ext <<_ACEOF
17.16547 +/* confdefs.h.  */
17.16548 +_ACEOF
17.16549 +cat confdefs.h >>conftest.$ac_ext
17.16550 +cat >>conftest.$ac_ext <<_ACEOF
17.16551 +/* end confdefs.h.  */
17.16552 +
17.16553 +int
17.16554 +main ()
17.16555 +{
17.16556 +
17.16557 +  ;
17.16558 +  return 0;
17.16559 +}
17.16560 +_ACEOF
17.16561 +rm -f conftest.$ac_objext conftest$ac_exeext
17.16562 +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
17.16563 +  (eval $ac_link) 2>conftest.er1
17.16564 +  ac_status=$?
17.16565 +  grep -v '^ *+' conftest.er1 >conftest.err
17.16566 +  rm -f conftest.er1
17.16567 +  cat conftest.err >&5
17.16568 +  echo "$as_me:$LINENO: \$? = $ac_status" >&5
17.16569 +  (exit $ac_status); } &&
17.16570 +	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
17.16571 +  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
17.16572 +  (eval $ac_try) 2>&5
17.16573 +  ac_status=$?
17.16574 +  echo "$as_me:$LINENO: \$? = $ac_status" >&5
17.16575 +  (exit $ac_status); }; } &&
17.16576 +	 { ac_try='test -s conftest$ac_exeext'
17.16577 +  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
17.16578 +  (eval $ac_try) 2>&5
17.16579 +  ac_status=$?
17.16580 +  echo "$as_me:$LINENO: \$? = $ac_status" >&5
17.16581 +  (exit $ac_status); }; }; then
17.16582 +
17.16583 +aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0  *\(.*\)$/\1/; p; }
17.16584 +}'`
17.16585 +# Check for a 64-bit object if we didn't find anything.
17.16586 +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; }
17.16587 +}'`; fi
17.16588 +else
17.16589 +  echo "$as_me: failed program was:" >&5
17.16590 +sed 's/^/| /' conftest.$ac_ext >&5
17.16591 +
17.16592 +fi
17.16593 +rm -f conftest.err conftest.$ac_objext \
17.16594 +      conftest$ac_exeext conftest.$ac_ext
17.16595 +if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
17.16596 +
17.16597 +       hardcode_libdir_flag_spec_GCJ='${wl}-blibpath:$libdir:'"$aix_libpath"
17.16598 +	archive_expsym_cmds_GCJ="\$CC"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then echo "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag"
17.16599 +       else
17.16600 +	if test "$host_cpu" = ia64; then
17.16601 +	  hardcode_libdir_flag_spec_GCJ='${wl}-R $libdir:/usr/lib:/lib'
17.16602 +	  allow_undefined_flag_GCJ="-z nodefs"
17.16603 +	  archive_expsym_cmds_GCJ="\$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"
17.16604 +	else
17.16605 +	 # Determine the default libpath from the value encoded in an empty executable.
17.16606 +	 cat >conftest.$ac_ext <<_ACEOF
17.16607 +/* confdefs.h.  */
17.16608 +_ACEOF
17.16609 +cat confdefs.h >>conftest.$ac_ext
17.16610 +cat >>conftest.$ac_ext <<_ACEOF
17.16611 +/* end confdefs.h.  */
17.16612 +
17.16613 +int
17.16614 +main ()
17.16615 +{
17.16616 +
17.16617 +  ;
17.16618 +  return 0;
17.16619 +}
17.16620 +_ACEOF
17.16621 +rm -f conftest.$ac_objext conftest$ac_exeext
17.16622 +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
17.16623 +  (eval $ac_link) 2>conftest.er1
17.16624 +  ac_status=$?
17.16625 +  grep -v '^ *+' conftest.er1 >conftest.err
17.16626 +  rm -f conftest.er1
17.16627 +  cat conftest.err >&5
17.16628 +  echo "$as_me:$LINENO: \$? = $ac_status" >&5
17.16629 +  (exit $ac_status); } &&
17.16630 +	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
17.16631 +  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
17.16632 +  (eval $ac_try) 2>&5
17.16633 +  ac_status=$?
17.16634 +  echo "$as_me:$LINENO: \$? = $ac_status" >&5
17.16635 +  (exit $ac_status); }; } &&
17.16636 +	 { ac_try='test -s conftest$ac_exeext'
17.16637 +  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
17.16638 +  (eval $ac_try) 2>&5
17.16639 +  ac_status=$?
17.16640 +  echo "$as_me:$LINENO: \$? = $ac_status" >&5
17.16641 +  (exit $ac_status); }; }; then
17.16642 +
17.16643 +aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0  *\(.*\)$/\1/; p; }
17.16644 +}'`
17.16645 +# Check for a 64-bit object if we didn't find anything.
17.16646 +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; }
17.16647 +}'`; fi
17.16648 +else
17.16649 +  echo "$as_me: failed program was:" >&5
17.16650 +sed 's/^/| /' conftest.$ac_ext >&5
17.16651 +
17.16652 +fi
17.16653 +rm -f conftest.err conftest.$ac_objext \
17.16654 +      conftest$ac_exeext conftest.$ac_ext
17.16655 +if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
17.16656 +
17.16657 +	 hardcode_libdir_flag_spec_GCJ='${wl}-blibpath:$libdir:'"$aix_libpath"
17.16658 +	  # Warning - without using the other run time loading flags,
17.16659 +	  # -berok will link without error, but may produce a broken library.
17.16660 +	  no_undefined_flag_GCJ=' ${wl}-bernotok'
17.16661 +	  allow_undefined_flag_GCJ=' ${wl}-berok'
17.16662 +	  # Exported symbols can be pulled into shared objects from archives
17.16663 +	  whole_archive_flag_spec_GCJ='$convenience'
17.16664 +	  archive_cmds_need_lc_GCJ=yes
17.16665 +	  # This is similar to how AIX traditionally builds its shared libraries.
17.16666 +	  archive_expsym_cmds_GCJ="\$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'
17.16667 +	fi
17.16668 +      fi
17.16669 +      ;;
17.16670 +
17.16671 +    amigaos*)
17.16672 +      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)'
17.16673 +      hardcode_libdir_flag_spec_GCJ='-L$libdir'
17.16674 +      hardcode_minus_L_GCJ=yes
17.16675 +      # see comment about different semantics on the GNU ld section
17.16676 +      ld_shlibs_GCJ=no
17.16677 +      ;;
17.16678 +
17.16679 +    bsdi[45]*)
17.16680 +      export_dynamic_flag_spec_GCJ=-rdynamic
17.16681 +      ;;
17.16682 +
17.16683 +    cygwin* | mingw* | pw32*)
17.16684 +      # When not using gcc, we currently assume that we are using
17.16685 +      # Microsoft Visual C++.
17.16686 +      # hardcode_libdir_flag_spec is actually meaningless, as there is
17.16687 +      # no search path for DLLs.
17.16688 +      hardcode_libdir_flag_spec_GCJ=' '
17.16689 +      allow_undefined_flag_GCJ=unsupported
17.16690 +      # Tell ltmain to make .lib files, not .a files.
17.16691 +      libext=lib
17.16692 +      # Tell ltmain to make .dll files, not .so files.
17.16693 +      shrext_cmds=".dll"
17.16694 +      # FIXME: Setting linknames here is a bad hack.
17.16695 +      archive_cmds_GCJ='$CC -o $lib $libobjs $compiler_flags `echo "$deplibs" | $SED -e '\''s/ -lc$//'\''` -link -dll~linknames='
17.16696 +      # The linker will automatically build a .lib file if we build a DLL.
17.16697 +      old_archive_From_new_cmds_GCJ='true'
17.16698 +      # FIXME: Should let the user specify the lib program.
17.16699 +      old_archive_cmds_GCJ='lib /OUT:$oldlib$oldobjs$old_deplibs'
17.16700 +      fix_srcfile_path_GCJ='`cygpath -w "$srcfile"`'
17.16701 +      enable_shared_with_static_runtimes_GCJ=yes
17.16702 +      ;;
17.16703 +
17.16704 +    darwin* | rhapsody*)
17.16705 +      case $host_os in
17.16706 +        rhapsody* | darwin1.[012])
17.16707 +         allow_undefined_flag_GCJ='${wl}-undefined ${wl}suppress'
17.16708 +         ;;
17.16709 +       *) # Darwin 1.3 on
17.16710 +         if test -z ${MACOSX_DEPLOYMENT_TARGET} ; then
17.16711 +           allow_undefined_flag_GCJ='${wl}-flat_namespace ${wl}-undefined ${wl}suppress'
17.16712 +         else
17.16713 +           case ${MACOSX_DEPLOYMENT_TARGET} in
17.16714 +             10.[012])
17.16715 +               allow_undefined_flag_GCJ='${wl}-flat_namespace ${wl}-undefined ${wl}suppress'
17.16716 +               ;;
17.16717 +             10.*)
17.16718 +               allow_undefined_flag_GCJ='${wl}-undefined ${wl}dynamic_lookup'
17.16719 +               ;;
17.16720 +           esac
17.16721 +         fi
17.16722 +         ;;
17.16723 +      esac
17.16724 +      archive_cmds_need_lc_GCJ=no
17.16725 +      hardcode_direct_GCJ=no
17.16726 +      hardcode_automatic_GCJ=yes
17.16727 +      hardcode_shlibpath_var_GCJ=unsupported
17.16728 +      whole_archive_flag_spec_GCJ=''
17.16729 +      link_all_deplibs_GCJ=yes
17.16730 +    if test "$GCC" = yes ; then
17.16731 +    	output_verbose_link_cmd='echo'
17.16732 +        archive_cmds_GCJ='$CC -dynamiclib $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring'
17.16733 +      module_cmds_GCJ='$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags'
17.16734 +      # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin lds
17.16735 +      archive_expsym_cmds_GCJ='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}'
17.16736 +      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}'
17.16737 +    else
17.16738 +      case $cc_basename in
17.16739 +        xlc*)
17.16740 +         output_verbose_link_cmd='echo'
17.16741 +         archive_cmds_GCJ='$CC -qmkshrobj $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}`echo $rpath/$soname` $verstring'
17.16742 +         module_cmds_GCJ='$CC $allow_undefined_flag -o $lib -bundle $libobjs $deplibs$compiler_flags'
17.16743 +          # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin lds
17.16744 +         archive_expsym_cmds_GCJ='sed -e "s,#.*,," -e "s,^[    ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -qmkshrobj $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-install_name ${wl}$rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}'
17.16745 +          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}'
17.16746 +          ;;
17.16747 +       *)
17.16748 +         ld_shlibs_GCJ=no
17.16749 +          ;;
17.16750 +      esac
17.16751 +    fi
17.16752 +      ;;
17.16753 +
17.16754 +    dgux*)
17.16755 +      archive_cmds_GCJ='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
17.16756 +      hardcode_libdir_flag_spec_GCJ='-L$libdir'
17.16757 +      hardcode_shlibpath_var_GCJ=no
17.16758 +      ;;
17.16759 +
17.16760 +    freebsd1*)
17.16761 +      ld_shlibs_GCJ=no
17.16762 +      ;;
17.16763 +
17.16764 +    # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor
17.16765 +    # support.  Future versions do this automatically, but an explicit c++rt0.o
17.16766 +    # does not break anything, and helps significantly (at the cost of a little
17.16767 +    # extra space).
17.16768 +    freebsd2.2*)
17.16769 +      archive_cmds_GCJ='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o'
17.16770 +      hardcode_libdir_flag_spec_GCJ='-R$libdir'
17.16771 +      hardcode_direct_GCJ=yes
17.16772 +      hardcode_shlibpath_var_GCJ=no
17.16773 +      ;;
17.16774 +
17.16775 +    # Unfortunately, older versions of FreeBSD 2 do not have this feature.
17.16776 +    freebsd2*)
17.16777 +      archive_cmds_GCJ='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'
17.16778 +      hardcode_direct_GCJ=yes
17.16779 +      hardcode_minus_L_GCJ=yes
17.16780 +      hardcode_shlibpath_var_GCJ=no
17.16781 +      ;;
17.16782 +
17.16783 +    # FreeBSD 3 and greater uses gcc -shared to do shared libraries.
17.16784 +    freebsd* | dragonfly*)
17.16785 +      archive_cmds_GCJ='$CC -shared -o $lib $libobjs $deplibs $compiler_flags'
17.16786 +      hardcode_libdir_flag_spec_GCJ='-R$libdir'
17.16787 +      hardcode_direct_GCJ=yes
17.16788 +      hardcode_shlibpath_var_GCJ=no
17.16789 +      ;;
17.16790 +
17.16791 +    # GNU/kFreeBSD uses gcc -shared to do shared libraries.
17.16792 +    kfreebsd*-gnu)
17.16793 +      archive_cmds_GCJ='$CC -shared -o $lib $libobjs $deplibs $compiler_flags'
17.16794 +      hardcode_libdir_flag_spec_GCJ='-R$libdir'
17.16795 +      hardcode_direct_GCJ=yes
17.16796 +      hardcode_shlibpath_var_GCJ=no
17.16797 +      link_all_deplibs_GCJ=no
17.16798 +      ;;
17.16799 +
17.16800 +    hpux9*)
17.16801 +      if test "$GCC" = yes; then
17.16802 +	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'
17.16803 +      else
17.16804 +	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'
17.16805 +      fi
17.16806 +      hardcode_libdir_flag_spec_GCJ='${wl}+b ${wl}$libdir'
17.16807 +      hardcode_libdir_separator_GCJ=:
17.16808 +      hardcode_direct_GCJ=yes
17.16809 +
17.16810 +      # hardcode_minus_L: Not really in the search PATH,
17.16811 +      # but as the default location of the library.
17.16812 +      hardcode_minus_L_GCJ=yes
17.16813 +      export_dynamic_flag_spec_GCJ='${wl}-E'
17.16814 +      ;;
17.16815 +
17.16816 +    hpux10*)
17.16817 +      if test "$GCC" = yes -a "$with_gnu_ld" = no; then
17.16818 +	archive_cmds_GCJ='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
17.16819 +      else
17.16820 +	archive_cmds_GCJ='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags'
17.16821 +      fi
17.16822 +      if test "$with_gnu_ld" = no; then
17.16823 +	hardcode_libdir_flag_spec_GCJ='${wl}+b ${wl}$libdir'
17.16824 +	hardcode_libdir_separator_GCJ=:
17.16825 +
17.16826 +	hardcode_direct_GCJ=yes
17.16827 +	export_dynamic_flag_spec_GCJ='${wl}-E'
17.16828 +
17.16829 +	# hardcode_minus_L: Not really in the search PATH,
17.16830 +	# but as the default location of the library.
17.16831 +	hardcode_minus_L_GCJ=yes
17.16832 +      fi
17.16833 +      ;;
17.16834 +
17.16835 +    hpux11*)
17.16836 +      if test "$GCC" = yes -a "$with_gnu_ld" = no; then
17.16837 +	case $host_cpu in
17.16838 +	hppa*64*)
17.16839 +	  archive_cmds_GCJ='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
17.16840 +	  ;;
17.16841 +	ia64*)
17.16842 +	  archive_cmds_GCJ='$CC -shared ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags'
17.16843 +	  ;;
17.16844 +	*)
17.16845 +	  archive_cmds_GCJ='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
17.16846 +	  ;;
17.16847 +	esac
17.16848 +      else
17.16849 +	case $host_cpu in
17.16850 +	hppa*64*)
17.16851 +	  archive_cmds_GCJ='$CC -b ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
17.16852 +	  ;;
17.16853 +	ia64*)
17.16854 +	  archive_cmds_GCJ='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags'
17.16855 +	  ;;
17.16856 +	*)
17.16857 +	  archive_cmds_GCJ='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
17.16858 +	  ;;
17.16859 +	esac
17.16860 +      fi
17.16861 +      if test "$with_gnu_ld" = no; then
17.16862 +	hardcode_libdir_flag_spec_GCJ='${wl}+b ${wl}$libdir'
17.16863 +	hardcode_libdir_separator_GCJ=:
17.16864 +
17.16865 +	case $host_cpu in
17.16866 +	hppa*64*|ia64*)
17.16867 +	  hardcode_libdir_flag_spec_ld_GCJ='+b $libdir'
17.16868 +	  hardcode_direct_GCJ=no
17.16869 +	  hardcode_shlibpath_var_GCJ=no
17.16870 +	  ;;
17.16871 +	*)
17.16872 +	  hardcode_direct_GCJ=yes
17.16873 +	  export_dynamic_flag_spec_GCJ='${wl}-E'
17.16874 +
17.16875 +	  # hardcode_minus_L: Not really in the search PATH,
17.16876 +	  # but as the default location of the library.
17.16877 +	  hardcode_minus_L_GCJ=yes
17.16878 +	  ;;
17.16879 +	esac
17.16880 +      fi
17.16881 +      ;;
17.16882 +
17.16883 +    irix5* | irix6* | nonstopux*)
17.16884 +      if test "$GCC" = yes; then
17.16885 +	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'
17.16886 +      else
17.16887 +	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'
17.16888 +	hardcode_libdir_flag_spec_ld_GCJ='-rpath $libdir'
17.16889 +      fi
17.16890 +      hardcode_libdir_flag_spec_GCJ='${wl}-rpath ${wl}$libdir'
17.16891 +      hardcode_libdir_separator_GCJ=:
17.16892 +      link_all_deplibs_GCJ=yes
17.16893 +      ;;
17.16894 +
17.16895 +    netbsd* | netbsdelf*-gnu | knetbsd*-gnu)
17.16896 +      if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then
17.16897 +	archive_cmds_GCJ='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'  # a.out
17.16898 +      else
17.16899 +	archive_cmds_GCJ='$LD -shared -o $lib $libobjs $deplibs $linker_flags'      # ELF
17.16900 +      fi
17.16901 +      hardcode_libdir_flag_spec_GCJ='-R$libdir'
17.16902 +      hardcode_direct_GCJ=yes
17.16903 +      hardcode_shlibpath_var_GCJ=no
17.16904 +      ;;
17.16905 +
17.16906 +    newsos6)
17.16907 +      archive_cmds_GCJ='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
17.16908 +      hardcode_direct_GCJ=yes
17.16909 +      hardcode_libdir_flag_spec_GCJ='${wl}-rpath ${wl}$libdir'
17.16910 +      hardcode_libdir_separator_GCJ=:
17.16911 +      hardcode_shlibpath_var_GCJ=no
17.16912 +      ;;
17.16913 +
17.16914 +    openbsd*)
17.16915 +      hardcode_direct_GCJ=yes
17.16916 +      hardcode_shlibpath_var_GCJ=no
17.16917 +      if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
17.16918 +	archive_cmds_GCJ='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
17.16919 +	archive_expsym_cmds_GCJ='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-retain-symbols-file,$export_symbols'
17.16920 +	hardcode_libdir_flag_spec_GCJ='${wl}-rpath,$libdir'
17.16921 +	export_dynamic_flag_spec_GCJ='${wl}-E'
17.16922 +      else
17.16923 +       case $host_os in
17.16924 +	 openbsd[01].* | openbsd2.[0-7] | openbsd2.[0-7].*)
17.16925 +	   archive_cmds_GCJ='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'
17.16926 +	   hardcode_libdir_flag_spec_GCJ='-R$libdir'
17.16927 +	   ;;
17.16928 +	 *)
17.16929 +	   archive_cmds_GCJ='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
17.16930 +	   hardcode_libdir_flag_spec_GCJ='${wl}-rpath,$libdir'
17.16931 +	   ;;
17.16932 +       esac
17.16933 +      fi
17.16934 +      ;;
17.16935 +
17.16936 +    os2*)
17.16937 +      hardcode_libdir_flag_spec_GCJ='-L$libdir'
17.16938 +      hardcode_minus_L_GCJ=yes
17.16939 +      allow_undefined_flag_GCJ=unsupported
17.16940 +      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'
17.16941 +      old_archive_From_new_cmds_GCJ='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def'
17.16942 +      ;;
17.16943 +
17.16944 +    osf3*)
17.16945 +      if test "$GCC" = yes; then
17.16946 +	allow_undefined_flag_GCJ=' ${wl}-expect_unresolved ${wl}\*'
17.16947 +	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'
17.16948 +      else
17.16949 +	allow_undefined_flag_GCJ=' -expect_unresolved \*'
17.16950 +	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'
17.16951 +      fi
17.16952 +      hardcode_libdir_flag_spec_GCJ='${wl}-rpath ${wl}$libdir'
17.16953 +      hardcode_libdir_separator_GCJ=:
17.16954 +      ;;
17.16955 +
17.16956 +    osf4* | osf5*)	# as osf3* with the addition of -msym flag
17.16957 +      if test "$GCC" = yes; then
17.16958 +	allow_undefined_flag_GCJ=' ${wl}-expect_unresolved ${wl}\*'
17.16959 +	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'
17.16960 +	hardcode_libdir_flag_spec_GCJ='${wl}-rpath ${wl}$libdir'
17.16961 +      else
17.16962 +	allow_undefined_flag_GCJ=' -expect_unresolved \*'
17.16963 +	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'
17.16964 +	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~
17.16965 +	$LD -shared${allow_undefined_flag} -input $lib.exp $linker_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib~$rm $lib.exp'
17.16966 +
17.16967 +	# Both c and cxx compiler support -rpath directly
17.16968 +	hardcode_libdir_flag_spec_GCJ='-rpath $libdir'
17.16969 +      fi
17.16970 +      hardcode_libdir_separator_GCJ=:
17.16971 +      ;;
17.16972 +
17.16973 +    solaris*)
17.16974 +      no_undefined_flag_GCJ=' -z text'
17.16975 +      if test "$GCC" = yes; then
17.16976 +	wlarc='${wl}'
17.16977 +	archive_cmds_GCJ='$CC -shared ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
17.16978 +	archive_expsym_cmds_GCJ='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~
17.16979 +	  $CC -shared ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$rm $lib.exp'
17.16980 +      else
17.16981 +	wlarc=''
17.16982 +	archive_cmds_GCJ='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags'
17.16983 +	archive_expsym_cmds_GCJ='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~
17.16984 +  	$LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$rm $lib.exp'
17.16985 +      fi
17.16986 +      hardcode_libdir_flag_spec_GCJ='-R$libdir'
17.16987 +      hardcode_shlibpath_var_GCJ=no
17.16988 +      case $host_os in
17.16989 +      solaris2.[0-5] | solaris2.[0-5].*) ;;
17.16990 +      *)
17.16991 + 	# The compiler driver will combine linker options so we
17.16992 + 	# cannot just pass the convience library names through
17.16993 + 	# without $wl, iff we do not link with $LD.
17.16994 + 	# Luckily, gcc supports the same syntax we need for Sun Studio.
17.16995 + 	# Supported since Solaris 2.6 (maybe 2.5.1?)
17.16996 + 	case $wlarc in
17.16997 + 	'')
17.16998 + 	  whole_archive_flag_spec_GCJ='-z allextract$convenience -z defaultextract' ;;
17.16999 + 	*)
17.17000 + 	  whole_archive_flag_spec_GCJ='${wl}-z ${wl}allextract`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $echo \"$new_convenience\"` ${wl}-z ${wl}defaultextract' ;;
17.17001 + 	esac ;;
17.17002 +      esac
17.17003 +      link_all_deplibs_GCJ=yes
17.17004 +      ;;
17.17005 +
17.17006 +    sunos4*)
17.17007 +      if test "x$host_vendor" = xsequent; then
17.17008 +	# Use $CC to link under sequent, because it throws in some extra .o
17.17009 +	# files that make .init and .fini sections work.
17.17010 +	archive_cmds_GCJ='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags'
17.17011 +      else
17.17012 +	archive_cmds_GCJ='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags'
17.17013 +      fi
17.17014 +      hardcode_libdir_flag_spec_GCJ='-L$libdir'
17.17015 +      hardcode_direct_GCJ=yes
17.17016 +      hardcode_minus_L_GCJ=yes
17.17017 +      hardcode_shlibpath_var_GCJ=no
17.17018 +      ;;
17.17019 +
17.17020 +    sysv4)
17.17021 +      case $host_vendor in
17.17022 +	sni)
17.17023 +	  archive_cmds_GCJ='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
17.17024 +	  hardcode_direct_GCJ=yes # is this really true???
17.17025 +	;;
17.17026 +	siemens)
17.17027 +	  ## LD is ld it makes a PLAMLIB
17.17028 +	  ## CC just makes a GrossModule.
17.17029 +	  archive_cmds_GCJ='$LD -G -o $lib $libobjs $deplibs $linker_flags'
17.17030 +	  reload_cmds_GCJ='$CC -r -o $output$reload_objs'
17.17031 +	  hardcode_direct_GCJ=no
17.17032 +        ;;
17.17033 +	motorola)
17.17034 +	  archive_cmds_GCJ='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
17.17035 +	  hardcode_direct_GCJ=no #Motorola manual says yes, but my tests say they lie
17.17036 +	;;
17.17037 +      esac
17.17038 +      runpath_var='LD_RUN_PATH'
17.17039 +      hardcode_shlibpath_var_GCJ=no
17.17040 +      ;;
17.17041 +
17.17042 +    sysv4.3*)
17.17043 +      archive_cmds_GCJ='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
17.17044 +      hardcode_shlibpath_var_GCJ=no
17.17045 +      export_dynamic_flag_spec_GCJ='-Bexport'
17.17046 +      ;;
17.17047 +
17.17048 +    sysv4*MP*)
17.17049 +      if test -d /usr/nec; then
17.17050 +	archive_cmds_GCJ='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
17.17051 +	hardcode_shlibpath_var_GCJ=no
17.17052 +	runpath_var=LD_RUN_PATH
17.17053 +	hardcode_runpath_var=yes
17.17054 +	ld_shlibs_GCJ=yes
17.17055 +      fi
17.17056 +      ;;
17.17057 +
17.17058 +    sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7*)
17.17059 +      no_undefined_flag_GCJ='${wl}-z,text'
17.17060 +      archive_cmds_need_lc_GCJ=no
17.17061 +      hardcode_shlibpath_var_GCJ=no
17.17062 +      runpath_var='LD_RUN_PATH'
17.17063 +
17.17064 +      if test "$GCC" = yes; then
17.17065 +	archive_cmds_GCJ='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
17.17066 +	archive_expsym_cmds_GCJ='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
17.17067 +      else
17.17068 +	archive_cmds_GCJ='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
17.17069 +	archive_expsym_cmds_GCJ='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
17.17070 +      fi
17.17071 +      ;;
17.17072 +
17.17073 +    sysv5* | sco3.2v5* | sco5v6*)
17.17074 +      # Note: We can NOT use -z defs as we might desire, because we do not
17.17075 +      # link with -lc, and that would cause any symbols used from libc to
17.17076 +      # always be unresolved, which means just about no library would
17.17077 +      # ever link correctly.  If we're not using GNU ld we use -z text
17.17078 +      # though, which does catch some bad symbols but isn't as heavy-handed
17.17079 +      # as -z defs.
17.17080 +      no_undefined_flag_GCJ='${wl}-z,text'
17.17081 +      allow_undefined_flag_GCJ='${wl}-z,nodefs'
17.17082 +      archive_cmds_need_lc_GCJ=no
17.17083 +      hardcode_shlibpath_var_GCJ=no
17.17084 +      hardcode_libdir_flag_spec_GCJ='`test -z "$SCOABSPATH" && echo ${wl}-R,$libdir`'
17.17085 +      hardcode_libdir_separator_GCJ=':'
17.17086 +      link_all_deplibs_GCJ=yes
17.17087 +      export_dynamic_flag_spec_GCJ='${wl}-Bexport'
17.17088 +      runpath_var='LD_RUN_PATH'
17.17089 +
17.17090 +      if test "$GCC" = yes; then
17.17091 +	archive_cmds_GCJ='$CC -shared ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags'
17.17092 +	archive_expsym_cmds_GCJ='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags'
17.17093 +      else
17.17094 +	archive_cmds_GCJ='$CC -G ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags'
17.17095 +	archive_expsym_cmds_GCJ='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,\${SCOABSPATH:+${install_libdir}/}$soname -o $lib $libobjs $deplibs $compiler_flags'
17.17096 +      fi
17.17097 +      ;;
17.17098 +
17.17099 +    uts4*)
17.17100 +      archive_cmds_GCJ='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
17.17101 +      hardcode_libdir_flag_spec_GCJ='-L$libdir'
17.17102 +      hardcode_shlibpath_var_GCJ=no
17.17103 +      ;;
17.17104 +
17.17105 +    *)
17.17106 +      ld_shlibs_GCJ=no
17.17107 +      ;;
17.17108 +    esac
17.17109 +  fi
17.17110 +
17.17111 +echo "$as_me:$LINENO: result: $ld_shlibs_GCJ" >&5
17.17112 +echo "${ECHO_T}$ld_shlibs_GCJ" >&6
17.17113 +test "$ld_shlibs_GCJ" = no && can_build_shared=no
17.17114 +
17.17115 +#
17.17116 +# Do we need to explicitly link libc?
17.17117 +#
17.17118 +case "x$archive_cmds_need_lc_GCJ" in
17.17119 +x|xyes)
17.17120 +  # Assume -lc should be added
17.17121 +  archive_cmds_need_lc_GCJ=yes
17.17122 +
17.17123 +  if test "$enable_shared" = yes && test "$GCC" = yes; then
17.17124 +    case $archive_cmds_GCJ in
17.17125 +    *'~'*)
17.17126 +      # FIXME: we may have to deal with multi-command sequences.
17.17127 +      ;;
17.17128 +    '$CC '*)
17.17129 +      # Test whether the compiler implicitly links with -lc since on some
17.17130 +      # systems, -lgcc has to come before -lc. If gcc already passes -lc
17.17131 +      # to ld, don't add -lc before -lgcc.
17.17132 +      echo "$as_me:$LINENO: checking whether -lc should be explicitly linked in" >&5
17.17133 +echo $ECHO_N "checking whether -lc should be explicitly linked in... $ECHO_C" >&6
17.17134 +      $rm conftest*
17.17135 +      printf "$lt_simple_compile_test_code" > conftest.$ac_ext
17.17136 +
17.17137 +      if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
17.17138 +  (eval $ac_compile) 2>&5
17.17139 +  ac_status=$?
17.17140 +  echo "$as_me:$LINENO: \$? = $ac_status" >&5
17.17141 +  (exit $ac_status); } 2>conftest.err; then
17.17142 +        soname=conftest
17.17143 +        lib=conftest
17.17144 +        libobjs=conftest.$ac_objext
17.17145 +        deplibs=
17.17146 +        wl=$lt_prog_compiler_wl_GCJ
17.17147 +	pic_flag=$lt_prog_compiler_pic_GCJ
17.17148 +        compiler_flags=-v
17.17149 +        linker_flags=-v
17.17150 +        verstring=
17.17151 +        output_objdir=.
17.17152 +        libname=conftest
17.17153 +        lt_save_allow_undefined_flag=$allow_undefined_flag_GCJ
17.17154 +        allow_undefined_flag_GCJ=
17.17155 +        if { (eval echo "$as_me:$LINENO: \"$archive_cmds_GCJ 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1\"") >&5
17.17156 +  (eval $archive_cmds_GCJ 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1) 2>&5
17.17157 +  ac_status=$?
17.17158 +  echo "$as_me:$LINENO: \$? = $ac_status" >&5
17.17159 +  (exit $ac_status); }
17.17160 +        then
17.17161 +	  archive_cmds_need_lc_GCJ=no
17.17162 +        else
17.17163 +	  archive_cmds_need_lc_GCJ=yes
17.17164 +        fi
17.17165 +        allow_undefined_flag_GCJ=$lt_save_allow_undefined_flag
17.17166 +      else
17.17167 +        cat conftest.err 1>&5
17.17168 +      fi
17.17169 +      $rm conftest*
17.17170 +      echo "$as_me:$LINENO: result: $archive_cmds_need_lc_GCJ" >&5
17.17171 +echo "${ECHO_T}$archive_cmds_need_lc_GCJ" >&6
17.17172 +      ;;
17.17173 +    esac
17.17174 +  fi
17.17175 +  ;;
17.17176 +esac
17.17177 +
17.17178 +echo "$as_me:$LINENO: checking dynamic linker characteristics" >&5
17.17179 +echo $ECHO_N "checking dynamic linker characteristics... $ECHO_C" >&6
17.17180 +library_names_spec=
17.17181 +libname_spec='lib$name'
17.17182 +soname_spec=
17.17183 +shrext_cmds=".so"
17.17184 +postinstall_cmds=
17.17185 +postuninstall_cmds=
17.17186 +finish_cmds=
17.17187 +finish_eval=
17.17188 +shlibpath_var=
17.17189 +shlibpath_overrides_runpath=unknown
17.17190 +version_type=none
17.17191 +dynamic_linker="$host_os ld.so"
17.17192 +sys_lib_dlsearch_path_spec="/lib /usr/lib"
17.17193 +if test "$GCC" = yes; then
17.17194 +  sys_lib_search_path_spec=`$CC -print-search-dirs | grep "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"`
17.17195 +  if echo "$sys_lib_search_path_spec" | grep ';' >/dev/null ; then
17.17196 +    # if the path contains ";" then we assume it to be the separator
17.17197 +    # otherwise default to the standard path separator (i.e. ":") - it is
17.17198 +    # assumed that no part of a normal pathname contains ";" but that should
17.17199 +    # okay in the real world where ";" in dirpaths is itself problematic.
17.17200 +    sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'`
17.17201 +  else
17.17202 +    sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED  -e "s/$PATH_SEPARATOR/ /g"`
17.17203 +  fi
17.17204 +else
17.17205 +  sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib"
17.17206 +fi
17.17207 +need_lib_prefix=unknown
17.17208 +hardcode_into_libs=no
17.17209 +
17.17210 +# when you set need_version to no, make sure it does not cause -set_version
17.17211 +# flags to be left without arguments
17.17212 +need_version=unknown
17.17213 +
17.17214 +case $host_os in
17.17215 +aix3*)
17.17216 +  version_type=linux
17.17217 +  library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a'
17.17218 +  shlibpath_var=LIBPATH
17.17219 +
17.17220 +  # AIX 3 has no versioning support, so we append a major version to the name.
17.17221 +  soname_spec='${libname}${release}${shared_ext}$major'
17.17222 +  ;;
17.17223 +
17.17224 +aix4* | aix5*)
17.17225 +  version_type=linux
17.17226 +  need_lib_prefix=no
17.17227 +  need_version=no
17.17228 +  hardcode_into_libs=yes
17.17229 +  if test "$host_cpu" = ia64; then
17.17230 +    # AIX 5 supports IA64
17.17231 +    library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}'
17.17232 +    shlibpath_var=LD_LIBRARY_PATH
17.17233 +  else
17.17234 +    # With GCC up to 2.95.x, collect2 would create an import file
17.17235 +    # for dependence libraries.  The import file would start with
17.17236 +    # the line `#! .'.  This would cause the generated library to
17.17237 +    # depend on `.', always an invalid library.  This was fixed in
17.17238 +    # development snapshots of GCC prior to 3.0.
17.17239 +    case $host_os in
17.17240 +      aix4 | aix4.[01] | aix4.[01].*)
17.17241 +      if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)'
17.17242 +	   echo ' yes '
17.17243 +	   echo '#endif'; } | ${CC} -E - | grep yes > /dev/null; then
17.17244 +	:
17.17245 +      else
17.17246 +	can_build_shared=no
17.17247 +      fi
17.17248 +      ;;
17.17249 +    esac
17.17250 +    # AIX (on Power*) has no versioning support, so currently we can not hardcode correct
17.17251 +    # soname into executable. Probably we can add versioning support to
17.17252 +    # collect2, so additional links can be useful in future.
17.17253 +    if test "$aix_use_runtimelinking" = yes; then
17.17254 +      # If using run time linking (on AIX 4.2 or later) use lib<name>.so
17.17255 +      # instead of lib<name>.a to let people know that these are not
17.17256 +      # typical AIX shared libraries.
17.17257 +      library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
17.17258 +    else
17.17259 +      # We preserve .a as extension for shared libraries through AIX4.2
17.17260 +      # and later when we are not doing run time linking.
17.17261 +      library_names_spec='${libname}${release}.a $libname.a'
17.17262 +      soname_spec='${libname}${release}${shared_ext}$major'
17.17263 +    fi
17.17264 +    shlibpath_var=LIBPATH
17.17265 +  fi
17.17266 +  ;;
17.17267 +
17.17268 +amigaos*)
17.17269 +  library_names_spec='$libname.ixlibrary $libname.a'
17.17270 +  # Create ${libname}_ixlibrary.a entries in /sys/libs.
17.17271 +  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'
17.17272 +  ;;
17.17273 +
17.17274 +beos*)
17.17275 +  library_names_spec='${libname}${shared_ext}'
17.17276 +  dynamic_linker="$host_os ld.so"
17.17277 +  shlibpath_var=LIBRARY_PATH
17.17278 +  ;;
17.17279 +
17.17280 +bsdi[45]*)
17.17281 +  version_type=linux
17.17282 +  need_version=no
17.17283 +  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
17.17284 +  soname_spec='${libname}${release}${shared_ext}$major'
17.17285 +  finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir'
17.17286 +  shlibpath_var=LD_LIBRARY_PATH
17.17287 +  sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib"
17.17288 +  sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib"
17.17289 +  # the default ld.so.conf also contains /usr/contrib/lib and
17.17290 +  # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow
17.17291 +  # libtool to hard-code these into programs
17.17292 +  ;;
17.17293 +
17.17294 +cygwin* | mingw* | pw32*)
17.17295 +  version_type=windows
17.17296 +  shrext_cmds=".dll"
17.17297 +  need_version=no
17.17298 +  need_lib_prefix=no
17.17299 +
17.17300 +  case $GCC,$host_os in
17.17301 +  yes,cygwin* | yes,mingw* | yes,pw32*)
17.17302 +    library_names_spec='$libname.dll.a'
17.17303 +    # DLL is installed to $(libdir)/../bin by postinstall_cmds
17.17304 +    postinstall_cmds='base_file=`basename \${file}`~
17.17305 +      dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i;echo \$dlname'\''`~
17.17306 +      dldir=$destdir/`dirname \$dlpath`~
17.17307 +      test -d \$dldir || mkdir -p \$dldir~
17.17308 +      $install_prog $dir/$dlname \$dldir/$dlname~
17.17309 +      chmod a+x \$dldir/$dlname'
17.17310 +    postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~
17.17311 +      dlpath=$dir/\$dldll~
17.17312 +       $rm \$dlpath'
17.17313 +    shlibpath_overrides_runpath=yes
17.17314 +
17.17315 +    case $host_os in
17.17316 +    cygwin*)
17.17317 +      # Cygwin DLLs use 'cyg' prefix rather than 'lib'
17.17318 +      soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}'
17.17319 +      sys_lib_search_path_spec="/usr/lib /lib/w32api /lib /usr/local/lib"
17.17320 +      ;;
17.17321 +    mingw*)
17.17322 +      # MinGW DLLs use traditional 'lib' prefix
17.17323 +      soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}'
17.17324 +      sys_lib_search_path_spec=`$CC -print-search-dirs | grep "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"`
17.17325 +      if echo "$sys_lib_search_path_spec" | grep ';[c-zC-Z]:/' >/dev/null; then
17.17326 +        # It is most probably a Windows format PATH printed by
17.17327 +        # mingw gcc, but we are running on Cygwin. Gcc prints its search
17.17328 +        # path with ; separators, and with drive letters. We can handle the
17.17329 +        # drive letters (cygwin fileutils understands them), so leave them,
17.17330 +        # especially as we might pass files found there to a mingw objdump,
17.17331 +        # which wouldn't understand a cygwinified path. Ahh.
17.17332 +        sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'`
17.17333 +      else
17.17334 +        sys_lib_search_path_spec=`echo "$sys_lib_search_path_spec" | $SED  -e "s/$PATH_SEPARATOR/ /g"`
17.17335 +      fi
17.17336 +      ;;
17.17337 +    pw32*)
17.17338 +      # pw32 DLLs use 'pw' prefix rather than 'lib'
17.17339 +      library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}'
17.17340 +      ;;
17.17341 +    esac
17.17342 +    ;;
17.17343 +
17.17344 +  *)
17.17345 +    library_names_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext} $libname.lib'
17.17346 +    ;;
17.17347 +  esac
17.17348 +  dynamic_linker='Win32 ld.exe'
17.17349 +  # FIXME: first we should search . and the directory the executable is in
17.17350 +  shlibpath_var=PATH
17.17351 +  ;;
17.17352 +
17.17353 +darwin* | rhapsody*)
17.17354 +  dynamic_linker="$host_os dyld"
17.17355 +  version_type=darwin
17.17356 +  need_lib_prefix=no
17.17357 +  need_version=no
17.17358 +  library_names_spec='${libname}${release}${versuffix}$shared_ext ${libname}${release}${major}$shared_ext ${libname}$shared_ext'
17.17359 +  soname_spec='${libname}${release}${major}$shared_ext'
17.17360 +  shlibpath_overrides_runpath=yes
17.17361 +  shlibpath_var=DYLD_LIBRARY_PATH
17.17362 +  shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`'
17.17363 +  # Apple's gcc prints 'gcc -print-search-dirs' doesn't operate the same.
17.17364 +  if test "$GCC" = yes; then
17.17365 +    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"`
17.17366 +  else
17.17367 +    sys_lib_search_path_spec='/lib /usr/lib /usr/local/lib'
17.17368 +  fi
17.17369 +  sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib'
17.17370 +  ;;
17.17371 +
17.17372 +dgux*)
17.17373 +  version_type=linux
17.17374 +  need_lib_prefix=no
17.17375 +  need_version=no
17.17376 +  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext'
17.17377 +  soname_spec='${libname}${release}${shared_ext}$major'
17.17378 +  shlibpath_var=LD_LIBRARY_PATH
17.17379 +  ;;
17.17380 +
17.17381 +freebsd1*)
17.17382 +  dynamic_linker=no
17.17383 +  ;;
17.17384 +
17.17385 +kfreebsd*-gnu)
17.17386 +  version_type=linux
17.17387 +  need_lib_prefix=no
17.17388 +  need_version=no
17.17389 +  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
17.17390 +  soname_spec='${libname}${release}${shared_ext}$major'
17.17391 +  shlibpath_var=LD_LIBRARY_PATH
17.17392 +  shlibpath_overrides_runpath=no
17.17393 +  hardcode_into_libs=yes
17.17394 +  dynamic_linker='GNU ld.so'
17.17395 +  ;;
17.17396 +
17.17397 +freebsd* | dragonfly*)
17.17398 +  # DragonFly does not have aout.  When/if they implement a new
17.17399 +  # versioning mechanism, adjust this.
17.17400 +  if test -x /usr/bin/objformat; then
17.17401 +    objformat=`/usr/bin/objformat`
17.17402 +  else
17.17403 +    case $host_os in
17.17404 +    freebsd[123]*) objformat=aout ;;
17.17405 +    *) objformat=elf ;;
17.17406 +    esac
17.17407 +  fi
17.17408 +  version_type=freebsd-$objformat
17.17409 +  case $version_type in
17.17410 +    freebsd-elf*)
17.17411 +      library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}'
17.17412 +      need_version=no
17.17413 +      need_lib_prefix=no
17.17414 +      ;;
17.17415 +    freebsd-*)
17.17416 +      library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix'
17.17417 +      need_version=yes
17.17418 +      ;;
17.17419 +  esac
17.17420 +  shlibpath_var=LD_LIBRARY_PATH
17.17421 +  case $host_os in
17.17422 +  freebsd2*)
17.17423 +    shlibpath_overrides_runpath=yes
17.17424 +    ;;
17.17425 +  freebsd3.[01]* | freebsdelf3.[01]*)
17.17426 +    shlibpath_overrides_runpath=yes
17.17427 +    hardcode_into_libs=yes
17.17428 +    ;;
17.17429 +  freebsd3.[2-9]* | freebsdelf3.[2-9]* | \
17.17430 +  freebsd4.[0-5] | freebsdelf4.[0-5] | freebsd4.1.1 | freebsdelf4.1.1)
17.17431 +    shlibpath_overrides_runpath=no
17.17432 +    hardcode_into_libs=yes
17.17433 +    ;;
17.17434 +  freebsd*) # from 4.6 on
17.17435 +    shlibpath_overrides_runpath=yes
17.17436 +    hardcode_into_libs=yes
17.17437 +    ;;
17.17438 +  esac
17.17439 +  ;;
17.17440 +
17.17441 +gnu*)
17.17442 +  version_type=linux
17.17443 +  need_lib_prefix=no
17.17444 +  need_version=no
17.17445 +  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}'
17.17446 +  soname_spec='${libname}${release}${shared_ext}$major'
17.17447 +  shlibpath_var=LD_LIBRARY_PATH
17.17448 +  hardcode_into_libs=yes
17.17449 +  ;;
17.17450 +
17.17451 +hpux9* | hpux10* | hpux11*)
17.17452 +  # Give a soname corresponding to the major version so that dld.sl refuses to
17.17453 +  # link against other versions.
17.17454 +  version_type=sunos
17.17455 +  need_lib_prefix=no
17.17456 +  need_version=no
17.17457 +  case $host_cpu in
17.17458 +  ia64*)
17.17459 +    shrext_cmds='.so'
17.17460 +    hardcode_into_libs=yes
17.17461 +    dynamic_linker="$host_os dld.so"
17.17462 +    shlibpath_var=LD_LIBRARY_PATH
17.17463 +    shlibpath_overrides_runpath=yes # Unless +noenvvar is specified.
17.17464 +    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
17.17465 +    soname_spec='${libname}${release}${shared_ext}$major'
17.17466 +    if test "X$HPUX_IA64_MODE" = X32; then
17.17467 +      sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib"
17.17468 +    else
17.17469 +      sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64"
17.17470 +    fi
17.17471 +    sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec
17.17472 +    ;;
17.17473 +   hppa*64*)
17.17474 +     shrext_cmds='.sl'
17.17475 +     hardcode_into_libs=yes
17.17476 +     dynamic_linker="$host_os dld.sl"
17.17477 +     shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH
17.17478 +     shlibpath_overrides_runpath=yes # Unless +noenvvar is specified.
17.17479 +     library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
17.17480 +     soname_spec='${libname}${release}${shared_ext}$major'
17.17481 +     sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64"
17.17482 +     sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec
17.17483 +     ;;
17.17484 +   *)
17.17485 +    shrext_cmds='.sl'
17.17486 +    dynamic_linker="$host_os dld.sl"
17.17487 +    shlibpath_var=SHLIB_PATH
17.17488 +    shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH
17.17489 +    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
17.17490 +    soname_spec='${libname}${release}${shared_ext}$major'
17.17491 +    ;;
17.17492 +  esac
17.17493 +  # HP-UX runs *really* slowly unless shared libraries are mode 555.
17.17494 +  postinstall_cmds='chmod 555 $lib'
17.17495 +  ;;
17.17496 +
17.17497 +interix3*)
17.17498 +  version_type=linux
17.17499 +  need_lib_prefix=no
17.17500 +  need_version=no
17.17501 +  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
17.17502 +  soname_spec='${libname}${release}${shared_ext}$major'
17.17503 +  dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)'
17.17504 +  shlibpath_var=LD_LIBRARY_PATH
17.17505 +  shlibpath_overrides_runpath=no
17.17506 +  hardcode_into_libs=yes
17.17507 +  ;;
17.17508 +
17.17509 +irix5* | irix6* | nonstopux*)
17.17510 +  case $host_os in
17.17511 +    nonstopux*) version_type=nonstopux ;;
17.17512 +    *)
17.17513 +	if test "$lt_cv_prog_gnu_ld" = yes; then
17.17514 +		version_type=linux
17.17515 +	else
17.17516 +		version_type=irix
17.17517 +	fi ;;
17.17518 +  esac
17.17519 +  need_lib_prefix=no
17.17520 +  need_version=no
17.17521 +  soname_spec='${libname}${release}${shared_ext}$major'
17.17522 +  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}'
17.17523 +  case $host_os in
17.17524 +  irix5* | nonstopux*)
17.17525 +    libsuff= shlibsuff=
17.17526 +    ;;
17.17527 +  *)
17.17528 +    case $LD in # libtool.m4 will add one of these switches to LD
17.17529 +    *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ")
17.17530 +      libsuff= shlibsuff= libmagic=32-bit;;
17.17531 +    *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ")
17.17532 +      libsuff=32 shlibsuff=N32 libmagic=N32;;
17.17533 +    *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ")
17.17534 +      libsuff=64 shlibsuff=64 libmagic=64-bit;;
17.17535 +    *) libsuff= shlibsuff= libmagic=never-match;;
17.17536 +    esac
17.17537 +    ;;
17.17538 +  esac
17.17539 +  shlibpath_var=LD_LIBRARY${shlibsuff}_PATH
17.17540 +  shlibpath_overrides_runpath=no
17.17541 +  sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}"
17.17542 +  sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}"
17.17543 +  hardcode_into_libs=yes
17.17544 +  ;;
17.17545 +
17.17546 +# No shared lib support for Linux oldld, aout, or coff.
17.17547 +linux*oldld* | linux*aout* | linux*coff*)
17.17548 +  dynamic_linker=no
17.17549 +  ;;
17.17550 +
17.17551 +# This must be Linux ELF.
17.17552 +linux*)
17.17553 +  version_type=linux
17.17554 +  need_lib_prefix=no
17.17555 +  need_version=no
17.17556 +  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
17.17557 +  soname_spec='${libname}${release}${shared_ext}$major'
17.17558 +  finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir'
17.17559 +  shlibpath_var=LD_LIBRARY_PATH
17.17560 +  shlibpath_overrides_runpath=no
17.17561 +  # This implies no fast_install, which is unacceptable.
17.17562 +  # Some rework will be needed to allow for fast_install
17.17563 +  # before this can be enabled.
17.17564 +  hardcode_into_libs=yes
17.17565 +
17.17566 +  # Append ld.so.conf contents to the search path
17.17567 +  if test -f /etc/ld.so.conf; then
17.17568 +    lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;s/[:,	]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;/^$/d' | tr '\n' ' '`
17.17569 +    sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra"
17.17570 +  fi
17.17571 +
17.17572 +  # We used to test for /lib/ld.so.1 and disable shared libraries on
17.17573 +  # powerpc, because MkLinux only supported shared libraries with the
17.17574 +  # GNU dynamic linker.  Since this was broken with cross compilers,
17.17575 +  # most powerpc-linux boxes support dynamic linking these days and
17.17576 +  # people can always --disable-shared, the test was removed, and we
17.17577 +  # assume the GNU/Linux dynamic linker is in use.
17.17578 +  dynamic_linker='GNU/Linux ld.so'
17.17579 +  ;;
17.17580 +
17.17581 +netbsdelf*-gnu)
17.17582 +  version_type=linux
17.17583 +  need_lib_prefix=no
17.17584 +  need_version=no
17.17585 +  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
17.17586 +  soname_spec='${libname}${release}${shared_ext}$major'
17.17587 +  shlibpath_var=LD_LIBRARY_PATH
17.17588 +  shlibpath_overrides_runpath=no
17.17589 +  hardcode_into_libs=yes
17.17590 +  dynamic_linker='NetBSD ld.elf_so'
17.17591 +  ;;
17.17592 +
17.17593 +knetbsd*-gnu)
17.17594 +  version_type=linux
17.17595 +  need_lib_prefix=no
17.17596 +  need_version=no
17.17597 +  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
17.17598 +  soname_spec='${libname}${release}${shared_ext}$major'
17.17599 +  shlibpath_var=LD_LIBRARY_PATH
17.17600 +  shlibpath_overrides_runpath=no
17.17601 +  hardcode_into_libs=yes
17.17602 +  dynamic_linker='GNU ld.so'
17.17603 +  ;;
17.17604 +
17.17605 +netbsd*)
17.17606 +  version_type=sunos
17.17607 +  need_lib_prefix=no
17.17608 +  need_version=no
17.17609 +  if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then
17.17610 +    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
17.17611 +    finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir'
17.17612 +    dynamic_linker='NetBSD (a.out) ld.so'
17.17613 +  else
17.17614 +    library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
17.17615 +    soname_spec='${libname}${release}${shared_ext}$major'
17.17616 +    dynamic_linker='NetBSD ld.elf_so'
17.17617 +  fi
17.17618 +  shlibpath_var=LD_LIBRARY_PATH
17.17619 +  shlibpath_overrides_runpath=yes
17.17620 +  hardcode_into_libs=yes
17.17621 +  ;;
17.17622 +
17.17623 +newsos6)
17.17624 +  version_type=linux
17.17625 +  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
17.17626 +  shlibpath_var=LD_LIBRARY_PATH
17.17627 +  shlibpath_overrides_runpath=yes
17.17628 +  ;;
17.17629 +
17.17630 +nto-qnx*)
17.17631 +  version_type=linux
17.17632 +  need_lib_prefix=no
17.17633 +  need_version=no
17.17634 +  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
17.17635 +  soname_spec='${libname}${release}${shared_ext}$major'
17.17636 +  shlibpath_var=LD_LIBRARY_PATH
17.17637 +  shlibpath_overrides_runpath=yes
17.17638 +  ;;
17.17639 +
17.17640 +openbsd*)
17.17641 +  version_type=sunos
17.17642 +  sys_lib_dlsearch_path_spec="/usr/lib"
17.17643 +  need_lib_prefix=no
17.17644 +  # Some older versions of OpenBSD (3.3 at least) *do* need versioned libs.
17.17645 +  case $host_os in
17.17646 +    openbsd3.3 | openbsd3.3.*) need_version=yes ;;
17.17647 +    *)                         need_version=no  ;;
17.17648 +  esac
17.17649 +  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
17.17650 +  finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir'
17.17651 +  shlibpath_var=LD_LIBRARY_PATH
17.17652 +  if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
17.17653 +    case $host_os in
17.17654 +      openbsd2.[89] | openbsd2.[89].*)
17.17655 +	shlibpath_overrides_runpath=no
17.17656 +	;;
17.17657 +      *)
17.17658 +	shlibpath_overrides_runpath=yes
17.17659 +	;;
17.17660 +      esac
17.17661 +  else
17.17662 +    shlibpath_overrides_runpath=yes
17.17663 +  fi
17.17664 +  ;;
17.17665 +
17.17666 +os2*)
17.17667 +  libname_spec='$name'
17.17668 +  shrext_cmds=".dll"
17.17669 +  need_lib_prefix=no
17.17670 +  library_names_spec='$libname${shared_ext} $libname.a'
17.17671 +  dynamic_linker='OS/2 ld.exe'
17.17672 +  shlibpath_var=LIBPATH
17.17673 +  ;;
17.17674 +
17.17675 +osf3* | osf4* | osf5*)
17.17676 +  version_type=osf
17.17677 +  need_lib_prefix=no
17.17678 +  need_version=no
17.17679 +  soname_spec='${libname}${release}${shared_ext}$major'
17.17680 +  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
17.17681 +  shlibpath_var=LD_LIBRARY_PATH
17.17682 +  sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib"
17.17683 +  sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec"
17.17684 +  ;;
17.17685 +
17.17686 +solaris*)
17.17687 +  version_type=linux
17.17688 +  need_lib_prefix=no
17.17689 +  need_version=no
17.17690 +  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
17.17691 +  soname_spec='${libname}${release}${shared_ext}$major'
17.17692 +  shlibpath_var=LD_LIBRARY_PATH
17.17693 +  shlibpath_overrides_runpath=yes
17.17694 +  hardcode_into_libs=yes
17.17695 +  # ldd complains unless libraries are executable
17.17696 +  postinstall_cmds='chmod +x $lib'
17.17697 +  ;;
17.17698 +
17.17699 +sunos4*)
17.17700 +  version_type=sunos
17.17701 +  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
17.17702 +  finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir'
17.17703 +  shlibpath_var=LD_LIBRARY_PATH
17.17704 +  shlibpath_overrides_runpath=yes
17.17705 +  if test "$with_gnu_ld" = yes; then
17.17706 +    need_lib_prefix=no
17.17707 +  fi
17.17708 +  need_version=yes
17.17709 +  ;;
17.17710 +
17.17711 +sysv4 | sysv4.3*)
17.17712 +  version_type=linux
17.17713 +  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
17.17714 +  soname_spec='${libname}${release}${shared_ext}$major'
17.17715 +  shlibpath_var=LD_LIBRARY_PATH
17.17716 +  case $host_vendor in
17.17717 +    sni)
17.17718 +      shlibpath_overrides_runpath=no
17.17719 +      need_lib_prefix=no
17.17720 +      export_dynamic_flag_spec='${wl}-Blargedynsym'
17.17721 +      runpath_var=LD_RUN_PATH
17.17722 +      ;;
17.17723 +    siemens)
17.17724 +      need_lib_prefix=no
17.17725 +      ;;
17.17726 +    motorola)
17.17727 +      need_lib_prefix=no
17.17728 +      need_version=no
17.17729 +      shlibpath_overrides_runpath=no
17.17730 +      sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib'
17.17731 +      ;;
17.17732 +  esac
17.17733 +  ;;
17.17734 +
17.17735 +sysv4*MP*)
17.17736 +  if test -d /usr/nec ;then
17.17737 +    version_type=linux
17.17738 +    library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}'
17.17739 +    soname_spec='$libname${shared_ext}.$major'
17.17740 +    shlibpath_var=LD_LIBRARY_PATH
17.17741 +  fi
17.17742 +  ;;
17.17743 +
17.17744 +sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*)
17.17745 +  version_type=freebsd-elf
17.17746 +  need_lib_prefix=no
17.17747 +  need_version=no
17.17748 +  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}'
17.17749 +  soname_spec='${libname}${release}${shared_ext}$major'
17.17750 +  shlibpath_var=LD_LIBRARY_PATH
17.17751 +  hardcode_into_libs=yes
17.17752 +  if test "$with_gnu_ld" = yes; then
17.17753 +    sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib'
17.17754 +    shlibpath_overrides_runpath=no
17.17755 +  else
17.17756 +    sys_lib_search_path_spec='/usr/ccs/lib /usr/lib'
17.17757 +    shlibpath_overrides_runpath=yes
17.17758 +    case $host_os in
17.17759 +      sco3.2v5*)
17.17760 +        sys_lib_search_path_spec="$sys_lib_search_path_spec /lib"
17.17761 +	;;
17.17762 +    esac
17.17763 +  fi
17.17764 +  sys_lib_dlsearch_path_spec='/usr/lib'
17.17765 +  ;;
17.17766 +
17.17767 +uts4*)
17.17768 +  version_type=linux
17.17769 +  library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
17.17770 +  soname_spec='${libname}${release}${shared_ext}$major'
17.17771 +  shlibpath_var=LD_LIBRARY_PATH
17.17772 +  ;;
17.17773 +
17.17774 +*)
17.17775 +  dynamic_linker=no
17.17776 +  ;;
17.17777 +esac
17.17778 +echo "$as_me:$LINENO: result: $dynamic_linker" >&5
17.17779 +echo "${ECHO_T}$dynamic_linker" >&6
17.17780 +test "$dynamic_linker" = no && can_build_shared=no
17.17781 +
17.17782 +variables_saved_for_relink="PATH $shlibpath_var $runpath_var"
17.17783 +if test "$GCC" = yes; then
17.17784 +  variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH"
17.17785 +fi
17.17786 +
17.17787 +echo "$as_me:$LINENO: checking how to hardcode library paths into programs" >&5
17.17788 +echo $ECHO_N "checking how to hardcode library paths into programs... $ECHO_C" >&6
17.17789 +hardcode_action_GCJ=
17.17790 +if test -n "$hardcode_libdir_flag_spec_GCJ" || \
17.17791 +   test -n "$runpath_var_GCJ" || \
17.17792 +   test "X$hardcode_automatic_GCJ" = "Xyes" ; then
17.17793 +
17.17794 +  # We can hardcode non-existant directories.
17.17795 +  if test "$hardcode_direct_GCJ" != no &&
17.17796 +     # If the only mechanism to avoid hardcoding is shlibpath_var, we
17.17797 +     # have to relink, otherwise we might link with an installed library
17.17798 +     # when we should be linking with a yet-to-be-installed one
17.17799 +     ## test "$_LT_AC_TAGVAR(hardcode_shlibpath_var, GCJ)" != no &&
17.17800 +     test "$hardcode_minus_L_GCJ" != no; then
17.17801 +    # Linking always hardcodes the temporary library directory.
17.17802 +    hardcode_action_GCJ=relink
17.17803 +  else
17.17804 +    # We can link without hardcoding, and we can hardcode nonexisting dirs.
17.17805 +    hardcode_action_GCJ=immediate
17.17806 +  fi
17.17807 +else
17.17808 +  # We cannot hardcode anything, or else we can only hardcode existing
17.17809 +  # directories.
17.17810 +  hardcode_action_GCJ=unsupported
17.17811 +fi
17.17812 +echo "$as_me:$LINENO: result: $hardcode_action_GCJ" >&5
17.17813 +echo "${ECHO_T}$hardcode_action_GCJ" >&6
17.17814 +
17.17815 +if test "$hardcode_action_GCJ" = relink; then
17.17816 +  # Fast installation is not supported
17.17817 +  enable_fast_install=no
17.17818 +elif test "$shlibpath_overrides_runpath" = yes ||
17.17819 +     test "$enable_shared" = no; then
17.17820 +  # Fast installation is not necessary
17.17821 +  enable_fast_install=needless
17.17822 +fi
17.17823 +
17.17824 +
17.17825 +# The else clause should only fire when bootstrapping the
17.17826 +# libtool distribution, otherwise you forgot to ship ltmain.sh
17.17827 +# with your package, and you will get complaints that there are
17.17828 +# no rules to generate ltmain.sh.
17.17829 +if test -f "$ltmain"; then
17.17830 +  # See if we are running on zsh, and set the options which allow our commands through
17.17831 +  # without removal of \ escapes.
17.17832 +  if test -n "${ZSH_VERSION+set}" ; then
17.17833 +    setopt NO_GLOB_SUBST
17.17834 +  fi
17.17835 +  # Now quote all the things that may contain metacharacters while being
17.17836 +  # careful not to overquote the AC_SUBSTed values.  We take copies of the
17.17837 +  # variables and quote the copies for generation of the libtool script.
17.17838 +  for var in echo old_CC old_CFLAGS AR AR_FLAGS EGREP RANLIB LN_S LTCC LTCFLAGS NM \
17.17839 +    SED SHELL STRIP \
17.17840 +    libname_spec library_names_spec soname_spec extract_expsyms_cmds \
17.17841 +    old_striplib striplib file_magic_cmd finish_cmds finish_eval \
17.17842 +    deplibs_check_method reload_flag reload_cmds need_locks \
17.17843 +    lt_cv_sys_global_symbol_pipe lt_cv_sys_global_symbol_to_cdecl \
17.17844 +    lt_cv_sys_global_symbol_to_c_name_address \
17.17845 +    sys_lib_search_path_spec sys_lib_dlsearch_path_spec \
17.17846 +    old_postinstall_cmds old_postuninstall_cmds \
17.17847 +    compiler_GCJ \
17.17848 +    CC_GCJ \
17.17849 +    LD_GCJ \
17.17850 +    lt_prog_compiler_wl_GCJ \
17.17851 +    lt_prog_compiler_pic_GCJ \
17.17852 +    lt_prog_compiler_static_GCJ \
17.17853 +    lt_prog_compiler_no_builtin_flag_GCJ \
17.17854 +    export_dynamic_flag_spec_GCJ \
17.17855 +    thread_safe_flag_spec_GCJ \
17.17856 +    whole_archive_flag_spec_GCJ \
17.17857 +    enable_shared_with_static_runtimes_GCJ \
17.17858 +    old_archive_cmds_GCJ \
17.17859 +    old_archive_from_new_cmds_GCJ \
17.17860 +    predep_objects_GCJ \
17.17861 +    postdep_objects_GCJ \
17.17862 +    predeps_GCJ \
17.17863 +    postdeps_GCJ \
17.17864 +    compiler_lib_search_path_GCJ \
17.17865 +    archive_cmds_GCJ \
17.17866 +    archive_expsym_cmds_GCJ \
17.17867 +    postinstall_cmds_GCJ \
17.17868 +    postuninstall_cmds_GCJ \
17.17869 +    old_archive_from_expsyms_cmds_GCJ \
17.17870 +    allow_undefined_flag_GCJ \
17.17871 +    no_undefined_flag_GCJ \
17.17872 +    export_symbols_cmds_GCJ \
17.17873 +    hardcode_libdir_flag_spec_GCJ \
17.17874 +    hardcode_libdir_flag_spec_ld_GCJ \
17.17875 +    hardcode_libdir_separator_GCJ \
17.17876 +    hardcode_automatic_GCJ \
17.17877 +    module_cmds_GCJ \
17.17878 +    module_expsym_cmds_GCJ \
17.17879 +    lt_cv_prog_compiler_c_o_GCJ \
17.17880 +    exclude_expsyms_GCJ \
17.17881 +    include_expsyms_GCJ; do
17.17882 +
17.17883 +    case $var in
17.17884 +    old_archive_cmds_GCJ | \
17.17885 +    old_archive_from_new_cmds_GCJ | \
17.17886 +    archive_cmds_GCJ | \
17.17887 +    archive_expsym_cmds_GCJ | \
17.17888 +    module_cmds_GCJ | \
17.17889 +    module_expsym_cmds_GCJ | \
17.17890 +    old_archive_from_expsyms_cmds_GCJ | \
17.17891 +    export_symbols_cmds_GCJ | \
17.17892 +    extract_expsyms_cmds | reload_cmds | finish_cmds | \
17.17893 +    postinstall_cmds | postuninstall_cmds | \
17.17894 +    old_postinstall_cmds | old_postuninstall_cmds | \
17.17895 +    sys_lib_search_path_spec | sys_lib_dlsearch_path_spec)
17.17896 +      # Double-quote double-evaled strings.
17.17897 +      eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$double_quote_subst\" -e \"\$sed_quote_subst\" -e \"\$delay_variable_subst\"\`\\\""
17.17898 +      ;;
17.17899 +    *)
17.17900 +      eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$sed_quote_subst\"\`\\\""
17.17901 +      ;;
17.17902 +    esac
17.17903 +  done
17.17904 +
17.17905 +  case $lt_echo in
17.17906 +  *'\$0 --fallback-echo"')
17.17907 +    lt_echo=`$echo "X$lt_echo" | $Xsed -e 's/\\\\\\\$0 --fallback-echo"$/$0 --fallback-echo"/'`
17.17908 +    ;;
17.17909 +  esac
17.17910 +
17.17911 +cfgfile="$ofile"
17.17912 +
17.17913 +  cat <<__EOF__ >> "$cfgfile"
17.17914 +# ### BEGIN LIBTOOL TAG CONFIG: $tagname
17.17915 +
17.17916 +# Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`:
17.17917 +
17.17918 +# Shell to use when invoking shell scripts.
17.17919 +SHELL=$lt_SHELL
17.17920 +
17.17921 +# Whether or not to build shared libraries.
17.17922 +build_libtool_libs=$enable_shared
17.17923 +
17.17924 +# Whether or not to build static libraries.
17.17925 +build_old_libs=$enable_static
17.17926 +
17.17927 +# Whether or not to add -lc for building shared libraries.
17.17928 +build_libtool_need_lc=$archive_cmds_need_lc_GCJ
17.17929 +
17.17930 +# Whether or not to disallow shared libs when runtime libs are static
17.17931 +allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes_GCJ
17.17932 +
17.17933 +# Whether or not to optimize for fast installation.
17.17934 +fast_install=$enable_fast_install
17.17935 +
17.17936 +# The host system.
17.17937 +host_alias=$host_alias
17.17938 +host=$host
17.17939 +host_os=$host_os
17.17940 +
17.17941 +# The build system.
17.17942 +build_alias=$build_alias
17.17943 +build=$build
17.17944 +build_os=$build_os
17.17945 +
17.17946 +# An echo program that does not interpret backslashes.
17.17947 +echo=$lt_echo
17.17948 +
17.17949 +# The archiver.
17.17950 +AR=$lt_AR
17.17951 +AR_FLAGS=$lt_AR_FLAGS
17.17952 +
17.17953 +# A C compiler.
17.17954 +LTCC=$lt_LTCC
17.17955 +
17.17956 +# LTCC compiler flags.
17.17957 +LTCFLAGS=$lt_LTCFLAGS
17.17958 +
17.17959 +# A language-specific compiler.
17.17960 +CC=$lt_compiler_GCJ
17.17961 +
17.17962 +# Is the compiler the GNU C compiler?
17.17963 +with_gcc=$GCC_GCJ
17.17964 +
17.17965 +# An ERE matcher.
17.17966 +EGREP=$lt_EGREP
17.17967 +
17.17968 +# The linker used to build libraries.
17.17969 +LD=$lt_LD_GCJ
17.17970 +
17.17971 +# Whether we need hard or soft links.
17.17972 +LN_S=$lt_LN_S
17.17973 +
17.17974 +# A BSD-compatible nm program.
17.17975 +NM=$lt_NM
17.17976 +
17.17977 +# A symbol stripping program
17.17978 +STRIP=$lt_STRIP
17.17979 +
17.17980 +# Used to examine libraries when file_magic_cmd begins "file"
17.17981 +MAGIC_CMD=$MAGIC_CMD
17.17982 +
17.17983 +# Used on cygwin: DLL creation program.
17.17984 +DLLTOOL="$DLLTOOL"
17.17985 +
17.17986 +# Used on cygwin: object dumper.
17.17987 +OBJDUMP="$OBJDUMP"
17.17988 +
17.17989 +# Used on cygwin: assembler.
17.17990 +AS="$AS"
17.17991 +
17.17992 +# The name of the directory that contains temporary libtool files.
17.17993 +objdir=$objdir
17.17994 +
17.17995 +# How to create reloadable object files.
17.17996 +reload_flag=$lt_reload_flag
17.17997 +reload_cmds=$lt_reload_cmds
17.17998 +
17.17999 +# How to pass a linker flag through the compiler.
17.18000 +wl=$lt_lt_prog_compiler_wl_GCJ
17.18001 +
17.18002 +# Object file suffix (normally "o").
17.18003 +objext="$ac_objext"
17.18004 +
17.18005 +# Old archive suffix (normally "a").
17.18006 +libext="$libext"
17.18007 +
17.18008 +# Shared library suffix (normally ".so").
17.18009 +shrext_cmds='$shrext_cmds'
17.18010 +
17.18011 +# Executable file suffix (normally "").
17.18012 +exeext="$exeext"
17.18013 +
17.18014 +# Additional compiler flags for building library objects.
17.18015 +pic_flag=$lt_lt_prog_compiler_pic_GCJ
17.18016 +pic_mode=$pic_mode
17.18017 +
17.18018 +# What is the maximum length of a command?
17.18019 +max_cmd_len=$lt_cv_sys_max_cmd_len
17.18020 +
17.18021 +# Does compiler simultaneously support -c and -o options?
17.18022 +compiler_c_o=$lt_lt_cv_prog_compiler_c_o_GCJ
17.18023 +
17.18024 +# Must we lock files when doing compilation?
17.18025 +need_locks=$lt_need_locks
17.18026 +
17.18027 +# Do we need the lib prefix for modules?
17.18028 +need_lib_prefix=$need_lib_prefix
17.18029 +
17.18030 +# Do we need a version for libraries?
17.18031 +need_version=$need_version
17.18032 +
17.18033 +# Whether dlopen is supported.
17.18034 +dlopen_support=$enable_dlopen
17.18035 +
17.18036 +# Whether dlopen of programs is supported.
17.18037 +dlopen_self=$enable_dlopen_self
17.18038 +
17.18039 +# Whether dlopen of statically linked programs is supported.
17.18040 +dlopen_self_static=$enable_dlopen_self_static
17.18041 +
17.18042 +# Compiler flag to prevent dynamic linking.
17.18043 +link_static_flag=$lt_lt_prog_compiler_static_GCJ
17.18044 +
17.18045 +# Compiler flag to turn off builtin functions.
17.18046 +no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag_GCJ
17.18047 +
17.18048 +# Compiler flag to allow reflexive dlopens.
17.18049 +export_dynamic_flag_spec=$lt_export_dynamic_flag_spec_GCJ
17.18050 +
17.18051 +# Compiler flag to generate shared objects directly from archives.
17.18052 +whole_archive_flag_spec=$lt_whole_archive_flag_spec_GCJ
17.18053 +
17.18054 +# Compiler flag to generate thread-safe objects.
17.18055 +thread_safe_flag_spec=$lt_thread_safe_flag_spec_GCJ
17.18056 +
17.18057 +# Library versioning type.
17.18058 +version_type=$version_type
17.18059 +
17.18060 +# Format of library name prefix.
17.18061 +libname_spec=$lt_libname_spec
17.18062 +
17.18063 +# List of archive names.  First name is the real one, the rest are links.
17.18064 +# The last name is the one that the linker finds with -lNAME.
17.18065 +library_names_spec=$lt_library_names_spec
17.18066 +
17.18067 +# The coded name of the library, if different from the real name.
17.18068 +soname_spec=$lt_soname_spec
17.18069 +
17.18070 +# Commands used to build and install an old-style archive.
17.18071 +RANLIB=$lt_RANLIB
17.18072 +old_archive_cmds=$lt_old_archive_cmds_GCJ
17.18073 +old_postinstall_cmds=$lt_old_postinstall_cmds
17.18074 +old_postuninstall_cmds=$lt_old_postuninstall_cmds
17.18075 +
17.18076 +# Create an old-style archive from a shared archive.
17.18077 +old_archive_from_new_cmds=$lt_old_archive_from_new_cmds_GCJ
17.18078 +
17.18079 +# Create a temporary old-style archive to link instead of a shared archive.
17.18080 +old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds_GCJ
17.18081 +
17.18082 +# Commands used to build and install a shared archive.
17.18083 +archive_cmds=$lt_archive_cmds_GCJ
17.18084 +archive_expsym_cmds=$lt_archive_expsym_cmds_GCJ
17.18085 +postinstall_cmds=$lt_postinstall_cmds
17.18086 +postuninstall_cmds=$lt_postuninstall_cmds
17.18087 +
17.18088 +# Commands used to build a loadable module (assumed same as above if empty)
17.18089 +module_cmds=$lt_module_cmds_GCJ
17.18090 +module_expsym_cmds=$lt_module_expsym_cmds_GCJ
17.18091 +
17.18092 +# Commands to strip libraries.
17.18093 +old_striplib=$lt_old_striplib
17.18094 +striplib=$lt_striplib
17.18095 +
17.18096 +# Dependencies to place before the objects being linked to create a
17.18097 +# shared library.
17.18098 +predep_objects=$lt_predep_objects_GCJ
17.18099 +
17.18100 +# Dependencies to place after the objects being linked to create a
17.18101 +# shared library.
17.18102 +postdep_objects=$lt_postdep_objects_GCJ
17.18103 +
17.18104 +# Dependencies to place before the objects being linked to create a
17.18105 +# shared library.
17.18106 +predeps=$lt_predeps_GCJ
17.18107 +
17.18108 +# Dependencies to place after the objects being linked to create a
17.18109 +# shared library.
17.18110 +postdeps=$lt_postdeps_GCJ
17.18111 +
17.18112 +# The library search path used internally by the compiler when linking
17.18113 +# a shared library.
17.18114 +compiler_lib_search_path=$lt_compiler_lib_search_path_GCJ
17.18115 +
17.18116 +# Method to check whether dependent libraries are shared objects.
17.18117 +deplibs_check_method=$lt_deplibs_check_method
17.18118 +
17.18119 +# Command to use when deplibs_check_method == file_magic.
17.18120 +file_magic_cmd=$lt_file_magic_cmd
17.18121 +
17.18122 +# Flag that allows shared libraries with undefined symbols to be built.
17.18123 +allow_undefined_flag=$lt_allow_undefined_flag_GCJ
17.18124 +
17.18125 +# Flag that forces no undefined symbols.
17.18126 +no_undefined_flag=$lt_no_undefined_flag_GCJ
17.18127 +
17.18128 +# Commands used to finish a libtool library installation in a directory.
17.18129 +finish_cmds=$lt_finish_cmds
17.18130 +
17.18131 +# Same as above, but a single script fragment to be evaled but not shown.
17.18132 +finish_eval=$lt_finish_eval
17.18133 +
17.18134 +# Take the output of nm and produce a listing of raw symbols and C names.
17.18135 +global_symbol_pipe=$lt_lt_cv_sys_global_symbol_pipe
17.18136 +
17.18137 +# Transform the output of nm in a proper C declaration
17.18138 +global_symbol_to_cdecl=$lt_lt_cv_sys_global_symbol_to_cdecl
17.18139 +
17.18140 +# Transform the output of nm in a C name address pair
17.18141 +global_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address
17.18142 +
17.18143 +# This is the shared library runtime path variable.
17.18144 +runpath_var=$runpath_var
17.18145 +
17.18146 +# This is the shared library path variable.
17.18147 +shlibpath_var=$shlibpath_var
17.18148 +
17.18149 +# Is shlibpath searched before the hard-coded library search path?
17.18150 +shlibpath_overrides_runpath=$shlibpath_overrides_runpath
17.18151 +
17.18152 +# How to hardcode a shared library path into an executable.
17.18153 +hardcode_action=$hardcode_action_GCJ
17.18154 +
17.18155 +# Whether we should hardcode library paths into libraries.
17.18156 +hardcode_into_libs=$hardcode_into_libs
17.18157 +
17.18158 +# Flag to hardcode \$libdir into a binary during linking.
17.18159 +# This must work even if \$libdir does not exist.
17.18160 +hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec_GCJ
17.18161 +
17.18162 +# If ld is used when linking, flag to hardcode \$libdir into
17.18163 +# a binary during linking. This must work even if \$libdir does
17.18164 +# not exist.
17.18165 +hardcode_libdir_flag_spec_ld=$lt_hardcode_libdir_flag_spec_ld_GCJ
17.18166 +
17.18167 +# Whether we need a single -rpath flag with a separated argument.
17.18168 +hardcode_libdir_separator=$lt_hardcode_libdir_separator_GCJ
17.18169 +
17.18170 +# Set to yes if using DIR/libNAME${shared_ext} during linking hardcodes DIR into the
17.18171 +# resulting binary.
17.18172 +hardcode_direct=$hardcode_direct_GCJ
17.18173 +
17.18174 +# Set to yes if using the -LDIR flag during linking hardcodes DIR into the
17.18175 +# resulting binary.
17.18176 +hardcode_minus_L=$hardcode_minus_L_GCJ
17.18177 +
17.18178 +# Set to yes if using SHLIBPATH_VAR=DIR during linking hardcodes DIR into
17.18179 +# the resulting binary.
17.18180 +hardcode_shlibpath_var=$hardcode_shlibpath_var_GCJ
17.18181 +
17.18182 +# Set to yes if building a shared library automatically hardcodes DIR into the library
17.18183 +# and all subsequent libraries and executables linked against it.
17.18184 +hardcode_automatic=$hardcode_automatic_GCJ
17.18185 +
17.18186 +# Variables whose values should be saved in libtool wrapper scripts and
17.18187 +# restored at relink time.
17.18188 +variables_saved_for_relink="$variables_saved_for_relink"
17.18189 +
17.18190 +# Whether libtool must link a program against all its dependency libraries.
17.18191 +link_all_deplibs=$link_all_deplibs_GCJ
17.18192 +
17.18193 +# Compile-time system search path for libraries
17.18194 +sys_lib_search_path_spec=$lt_sys_lib_search_path_spec
17.18195 +
17.18196 +# Run-time system search path for libraries
17.18197 +sys_lib_dlsearch_path_spec=$lt_sys_lib_dlsearch_path_spec
17.18198 +
17.18199 +# Fix the shell variable \$srcfile for the compiler.
17.18200 +fix_srcfile_path="$fix_srcfile_path_GCJ"
17.18201 +
17.18202 +# Set to yes if exported symbols are required.
17.18203 +always_export_symbols=$always_export_symbols_GCJ
17.18204 +
17.18205 +# The commands to list exported symbols.
17.18206 +export_symbols_cmds=$lt_export_symbols_cmds_GCJ
17.18207 +
17.18208 +# The commands to extract the exported symbol list from a shared archive.
17.18209 +extract_expsyms_cmds=$lt_extract_expsyms_cmds
17.18210 +
17.18211 +# Symbols that should not be listed in the preloaded symbols.
17.18212 +exclude_expsyms=$lt_exclude_expsyms_GCJ
17.18213 +
17.18214 +# Symbols that must always be exported.
17.18215 +include_expsyms=$lt_include_expsyms_GCJ
17.18216 +
17.18217 +# ### END LIBTOOL TAG CONFIG: $tagname
17.18218 +
17.18219 +__EOF__
17.18220 +
17.18221 +
17.18222 +else
17.18223 +  # If there is no Makefile yet, we rely on a make rule to execute
17.18224 +  # `config.status --recheck' to rerun these tests and create the
17.18225 +  # libtool script then.
17.18226 +  ltmain_in=`echo $ltmain | sed -e 's/\.sh$/.in/'`
17.18227 +  if test -f "$ltmain_in"; then
17.18228 +    test -f Makefile && make "$ltmain"
17.18229 +  fi
17.18230 +fi
17.18231 +
17.18232 +
17.18233 +ac_ext=c
17.18234 +ac_cpp='$CPP $CPPFLAGS'
17.18235 +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
17.18236 +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
17.18237 +ac_compiler_gnu=$ac_cv_c_compiler_gnu
17.18238 +
17.18239 +CC="$lt_save_CC"
17.18240 +
17.18241 +	else
17.18242 +	  tagname=""
17.18243 +	fi
17.18244 +	;;
17.18245 +
17.18246 +      RC)
17.18247 +
17.18248 +
17.18249 +
17.18250 +# Source file extension for RC test sources.
17.18251 +ac_ext=rc
17.18252 +
17.18253 +# Object file extension for compiled RC test sources.
17.18254 +objext=o
17.18255 +objext_RC=$objext
17.18256 +
17.18257 +# Code to be used in simple compile tests
17.18258 +lt_simple_compile_test_code='sample MENU { MENUITEM "&Soup", 100, CHECKED }\n'
17.18259 +
17.18260 +# Code to be used in simple link tests
17.18261 +lt_simple_link_test_code="$lt_simple_compile_test_code"
17.18262 +
17.18263 +# ltmain only uses $CC for tagged configurations so make sure $CC is set.
17.18264 +
17.18265 +# If no C compiler was specified, use CC.
17.18266 +LTCC=${LTCC-"$CC"}
17.18267 +
17.18268 +# If no C compiler flags were specified, use CFLAGS.
17.18269 +LTCFLAGS=${LTCFLAGS-"$CFLAGS"}
17.18270 +
17.18271 +# Allow CC to be a program name with arguments.
17.18272 +compiler=$CC
17.18273 +
17.18274 +
17.18275 +# save warnings/boilerplate of simple test code
17.18276 +ac_outfile=conftest.$ac_objext
17.18277 +printf "$lt_simple_compile_test_code" >conftest.$ac_ext
17.18278 +eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err
17.18279 +_lt_compiler_boilerplate=`cat conftest.err`
17.18280 +$rm conftest*
17.18281 +
17.18282 +ac_outfile=conftest.$ac_objext
17.18283 +printf "$lt_simple_link_test_code" >conftest.$ac_ext
17.18284 +eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err
17.18285 +_lt_linker_boilerplate=`cat conftest.err`
17.18286 +$rm conftest*
17.18287 +
17.18288 +
17.18289 +# Allow CC to be a program name with arguments.
17.18290 +lt_save_CC="$CC"
17.18291 +CC=${RC-"windres"}
17.18292 +compiler=$CC
17.18293 +compiler_RC=$CC
17.18294 +for cc_temp in $compiler""; do
17.18295 +  case $cc_temp in
17.18296 +    compile | *[\\/]compile | ccache | *[\\/]ccache ) ;;
17.18297 +    distcc | *[\\/]distcc | purify | *[\\/]purify ) ;;
17.18298 +    \-*) ;;
17.18299 +    *) break;;
17.18300 +  esac
17.18301 +done
17.18302 +cc_basename=`$echo "X$cc_temp" | $Xsed -e 's%.*/%%' -e "s%^$host_alias-%%"`
17.18303 +
17.18304 +lt_cv_prog_compiler_c_o_RC=yes
17.18305 +
17.18306 +# The else clause should only fire when bootstrapping the
17.18307 +# libtool distribution, otherwise you forgot to ship ltmain.sh
17.18308 +# with your package, and you will get complaints that there are
17.18309 +# no rules to generate ltmain.sh.
17.18310 +if test -f "$ltmain"; then
17.18311 +  # See if we are running on zsh, and set the options which allow our commands through
17.18312 +  # without removal of \ escapes.
17.18313 +  if test -n "${ZSH_VERSION+set}" ; then
17.18314 +    setopt NO_GLOB_SUBST
17.18315 +  fi
17.18316 +  # Now quote all the things that may contain metacharacters while being
17.18317 +  # careful not to overquote the AC_SUBSTed values.  We take copies of the
17.18318 +  # variables and quote the copies for generation of the libtool script.
17.18319 +  for var in echo old_CC old_CFLAGS AR AR_FLAGS EGREP RANLIB LN_S LTCC LTCFLAGS NM \
17.18320 +    SED SHELL STRIP \
17.18321 +    libname_spec library_names_spec soname_spec extract_expsyms_cmds \
17.18322 +    old_striplib striplib file_magic_cmd finish_cmds finish_eval \
17.18323 +    deplibs_check_method reload_flag reload_cmds need_locks \
17.18324 +    lt_cv_sys_global_symbol_pipe lt_cv_sys_global_symbol_to_cdecl \
17.18325 +    lt_cv_sys_global_symbol_to_c_name_address \
17.18326 +    sys_lib_search_path_spec sys_lib_dlsearch_path_spec \
17.18327 +    old_postinstall_cmds old_postuninstall_cmds \
17.18328 +    compiler_RC \
17.18329 +    CC_RC \
17.18330 +    LD_RC \
17.18331 +    lt_prog_compiler_wl_RC \
17.18332 +    lt_prog_compiler_pic_RC \
17.18333 +    lt_prog_compiler_static_RC \
17.18334 +    lt_prog_compiler_no_builtin_flag_RC \
17.18335 +    export_dynamic_flag_spec_RC \
17.18336 +    thread_safe_flag_spec_RC \
17.18337 +    whole_archive_flag_spec_RC \
17.18338 +    enable_shared_with_static_runtimes_RC \
17.18339 +    old_archive_cmds_RC \
17.18340 +    old_archive_from_new_cmds_RC \
17.18341 +    predep_objects_RC \
17.18342 +    postdep_objects_RC \
17.18343 +    predeps_RC \
17.18344 +    postdeps_RC \
17.18345 +    compiler_lib_search_path_RC \
17.18346 +    archive_cmds_RC \
17.18347 +    archive_expsym_cmds_RC \
17.18348 +    postinstall_cmds_RC \
17.18349 +    postuninstall_cmds_RC \
17.18350 +    old_archive_from_expsyms_cmds_RC \
17.18351 +    allow_undefined_flag_RC \
17.18352 +    no_undefined_flag_RC \
17.18353 +    export_symbols_cmds_RC \
17.18354 +    hardcode_libdir_flag_spec_RC \
17.18355 +    hardcode_libdir_flag_spec_ld_RC \
17.18356 +    hardcode_libdir_separator_RC \
17.18357 +    hardcode_automatic_RC \
17.18358 +    module_cmds_RC \
17.18359 +    module_expsym_cmds_RC \
17.18360 +    lt_cv_prog_compiler_c_o_RC \
17.18361 +    exclude_expsyms_RC \
17.18362 +    include_expsyms_RC; do
17.18363 +
17.18364 +    case $var in
17.18365 +    old_archive_cmds_RC | \
17.18366 +    old_archive_from_new_cmds_RC | \
17.18367 +    archive_cmds_RC | \
17.18368 +    archive_expsym_cmds_RC | \
17.18369 +    module_cmds_RC | \
17.18370 +    module_expsym_cmds_RC | \
17.18371 +    old_archive_from_expsyms_cmds_RC | \
17.18372 +    export_symbols_cmds_RC | \
17.18373 +    extract_expsyms_cmds | reload_cmds | finish_cmds | \
17.18374 +    postinstall_cmds | postuninstall_cmds | \
17.18375 +    old_postinstall_cmds | old_postuninstall_cmds | \
17.18376 +    sys_lib_search_path_spec | sys_lib_dlsearch_path_spec)
17.18377 +      # Double-quote double-evaled strings.
17.18378 +      eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$double_quote_subst\" -e \"\$sed_quote_subst\" -e \"\$delay_variable_subst\"\`\\\""
17.18379 +      ;;
17.18380 +    *)
17.18381 +      eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$sed_quote_subst\"\`\\\""
17.18382 +      ;;
17.18383 +    esac
17.18384 +  done
17.18385 +
17.18386 +  case $lt_echo in
17.18387 +  *'\$0 --fallback-echo"')
17.18388 +    lt_echo=`$echo "X$lt_echo" | $Xsed -e 's/\\\\\\\$0 --fallback-echo"$/$0 --fallback-echo"/'`
17.18389 +    ;;
17.18390 +  esac
17.18391 +
17.18392 +cfgfile="$ofile"
17.18393 +
17.18394 +  cat <<__EOF__ >> "$cfgfile"
17.18395 +# ### BEGIN LIBTOOL TAG CONFIG: $tagname
17.18396 +
17.18397 +# Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`:
17.18398 +
17.18399 +# Shell to use when invoking shell scripts.
17.18400 +SHELL=$lt_SHELL
17.18401 +
17.18402 +# Whether or not to build shared libraries.
17.18403 +build_libtool_libs=$enable_shared
17.18404 +
17.18405 +# Whether or not to build static libraries.
17.18406 +build_old_libs=$enable_static
17.18407 +
17.18408 +# Whether or not to add -lc for building shared libraries.
17.18409 +build_libtool_need_lc=$archive_cmds_need_lc_RC
17.18410 +
17.18411 +# Whether or not to disallow shared libs when runtime libs are static
17.18412 +allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes_RC
17.18413 +
17.18414 +# Whether or not to optimize for fast installation.
17.18415 +fast_install=$enable_fast_install
17.18416 +
17.18417 +# The host system.
17.18418 +host_alias=$host_alias
17.18419 +host=$host
17.18420 +host_os=$host_os
17.18421 +
17.18422 +# The build system.
17.18423 +build_alias=$build_alias
17.18424 +build=$build
17.18425 +build_os=$build_os
17.18426 +
17.18427 +# An echo program that does not interpret backslashes.
17.18428 +echo=$lt_echo
17.18429 +
17.18430 +# The archiver.
17.18431 +AR=$lt_AR
17.18432 +AR_FLAGS=$lt_AR_FLAGS
17.18433 +
17.18434 +# A C compiler.
17.18435 +LTCC=$lt_LTCC
17.18436 +
17.18437 +# LTCC compiler flags.
17.18438 +LTCFLAGS=$lt_LTCFLAGS
17.18439 +
17.18440 +# A language-specific compiler.
17.18441 +CC=$lt_compiler_RC
17.18442 +
17.18443 +# Is the compiler the GNU C compiler?
17.18444 +with_gcc=$GCC_RC
17.18445 +
17.18446 +# An ERE matcher.
17.18447 +EGREP=$lt_EGREP
17.18448 +
17.18449 +# The linker used to build libraries.
17.18450 +LD=$lt_LD_RC
17.18451 +
17.18452 +# Whether we need hard or soft links.
17.18453 +LN_S=$lt_LN_S
17.18454 +
17.18455 +# A BSD-compatible nm program.
17.18456 +NM=$lt_NM
17.18457 +
17.18458 +# A symbol stripping program
17.18459 +STRIP=$lt_STRIP
17.18460 +
17.18461 +# Used to examine libraries when file_magic_cmd begins "file"
17.18462 +MAGIC_CMD=$MAGIC_CMD
17.18463 +
17.18464 +# Used on cygwin: DLL creation program.
17.18465 +DLLTOOL="$DLLTOOL"
17.18466 +
17.18467 +# Used on cygwin: object dumper.
17.18468 +OBJDUMP="$OBJDUMP"
17.18469 +
17.18470 +# Used on cygwin: assembler.
17.18471 +AS="$AS"
17.18472 +
17.18473 +# The name of the directory that contains temporary libtool files.
17.18474 +objdir=$objdir
17.18475 +
17.18476 +# How to create reloadable object files.
17.18477 +reload_flag=$lt_reload_flag
17.18478 +reload_cmds=$lt_reload_cmds
17.18479 +
17.18480 +# How to pass a linker flag through the compiler.
17.18481 +wl=$lt_lt_prog_compiler_wl_RC
17.18482 +
17.18483 +# Object file suffix (normally "o").
17.18484 +objext="$ac_objext"
17.18485 +
17.18486 +# Old archive suffix (normally "a").
17.18487 +libext="$libext"
17.18488 +
17.18489 +# Shared library suffix (normally ".so").
17.18490 +shrext_cmds='$shrext_cmds'
17.18491 +
17.18492 +# Executable file suffix (normally "").
17.18493 +exeext="$exeext"
17.18494 +
17.18495 +# Additional compiler flags for building library objects.
17.18496 +pic_flag=$lt_lt_prog_compiler_pic_RC
17.18497 +pic_mode=$pic_mode
17.18498 +
17.18499 +# What is the maximum length of a command?
17.18500 +max_cmd_len=$lt_cv_sys_max_cmd_len
17.18501 +
17.18502 +# Does compiler simultaneously support -c and -o options?
17.18503 +compiler_c_o=$lt_lt_cv_prog_compiler_c_o_RC
17.18504 +
17.18505 +# Must we lock files when doing compilation?
17.18506 +need_locks=$lt_need_locks
17.18507 +
17.18508 +# Do we need the lib prefix for modules?
17.18509 +need_lib_prefix=$need_lib_prefix
17.18510 +
17.18511 +# Do we need a version for libraries?
17.18512 +need_version=$need_version
17.18513 +
17.18514 +# Whether dlopen is supported.
17.18515 +dlopen_support=$enable_dlopen
17.18516 +
17.18517 +# Whether dlopen of programs is supported.
17.18518 +dlopen_self=$enable_dlopen_self
17.18519 +
17.18520 +# Whether dlopen of statically linked programs is supported.
17.18521 +dlopen_self_static=$enable_dlopen_self_static
17.18522 +
17.18523 +# Compiler flag to prevent dynamic linking.
17.18524 +link_static_flag=$lt_lt_prog_compiler_static_RC
17.18525 +
17.18526 +# Compiler flag to turn off builtin functions.
17.18527 +no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag_RC
17.18528 +
17.18529 +# Compiler flag to allow reflexive dlopens.
17.18530 +export_dynamic_flag_spec=$lt_export_dynamic_flag_spec_RC
17.18531 +
17.18532 +# Compiler flag to generate shared objects directly from archives.
17.18533 +whole_archive_flag_spec=$lt_whole_archive_flag_spec_RC
17.18534 +
17.18535 +# Compiler flag to generate thread-safe objects.
17.18536 +thread_safe_flag_spec=$lt_thread_safe_flag_spec_RC
17.18537 +
17.18538 +# Library versioning type.
17.18539 +version_type=$version_type
17.18540 +
17.18541 +# Format of library name prefix.
17.18542 +libname_spec=$lt_libname_spec
17.18543 +
17.18544 +# List of archive names.  First name is the real one, the rest are links.
17.18545 +# The last name is the one that the linker finds with -lNAME.
17.18546 +library_names_spec=$lt_library_names_spec
17.18547 +
17.18548 +# The coded name of the library, if different from the real name.
17.18549 +soname_spec=$lt_soname_spec
17.18550 +
17.18551 +# Commands used to build and install an old-style archive.
17.18552 +RANLIB=$lt_RANLIB
17.18553 +old_archive_cmds=$lt_old_archive_cmds_RC
17.18554 +old_postinstall_cmds=$lt_old_postinstall_cmds
17.18555 +old_postuninstall_cmds=$lt_old_postuninstall_cmds
17.18556 +
17.18557 +# Create an old-style archive from a shared archive.
17.18558 +old_archive_from_new_cmds=$lt_old_archive_from_new_cmds_RC
17.18559 +
17.18560 +# Create a temporary old-style archive to link instead of a shared archive.
17.18561 +old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds_RC
17.18562 +
17.18563 +# Commands used to build and install a shared archive.
17.18564 +archive_cmds=$lt_archive_cmds_RC
17.18565 +archive_expsym_cmds=$lt_archive_expsym_cmds_RC
17.18566 +postinstall_cmds=$lt_postinstall_cmds
17.18567 +postuninstall_cmds=$lt_postuninstall_cmds
17.18568 +
17.18569 +# Commands used to build a loadable module (assumed same as above if empty)
17.18570 +module_cmds=$lt_module_cmds_RC
17.18571 +module_expsym_cmds=$lt_module_expsym_cmds_RC
17.18572 +
17.18573 +# Commands to strip libraries.
17.18574 +old_striplib=$lt_old_striplib
17.18575 +striplib=$lt_striplib
17.18576 +
17.18577 +# Dependencies to place before the objects being linked to create a
17.18578 +# shared library.
17.18579 +predep_objects=$lt_predep_objects_RC
17.18580 +
17.18581 +# Dependencies to place after the objects being linked to create a
17.18582 +# shared library.
17.18583 +postdep_objects=$lt_postdep_objects_RC
17.18584 +
17.18585 +# Dependencies to place before the objects being linked to create a
17.18586 +# shared library.
17.18587 +predeps=$lt_predeps_RC
17.18588 +
17.18589 +# Dependencies to place after the objects being linked to create a
17.18590 +# shared library.
17.18591 +postdeps=$lt_postdeps_RC
17.18592 +
17.18593 +# The library search path used internally by the compiler when linking
17.18594 +# a shared library.
17.18595 +compiler_lib_search_path=$lt_compiler_lib_search_path_RC
17.18596 +
17.18597 +# Method to check whether dependent libraries are shared objects.
17.18598 +deplibs_check_method=$lt_deplibs_check_method
17.18599 +
17.18600 +# Command to use when deplibs_check_method == file_magic.
17.18601 +file_magic_cmd=$lt_file_magic_cmd
17.18602 +
17.18603 +# Flag that allows shared libraries with undefined symbols to be built.
17.18604 +allow_undefined_flag=$lt_allow_undefined_flag_RC
17.18605 +
17.18606 +# Flag that forces no undefined symbols.
17.18607 +no_undefined_flag=$lt_no_undefined_flag_RC
17.18608 +
17.18609 +# Commands used to finish a libtool library installation in a directory.
17.18610 +finish_cmds=$lt_finish_cmds
17.18611 +
17.18612 +# Same as above, but a single script fragment to be evaled but not shown.
17.18613 +finish_eval=$lt_finish_eval
17.18614 +
17.18615 +# Take the output of nm and produce a listing of raw symbols and C names.
17.18616 +global_symbol_pipe=$lt_lt_cv_sys_global_symbol_pipe
17.18617 +
17.18618 +# Transform the output of nm in a proper C declaration
17.18619 +global_symbol_to_cdecl=$lt_lt_cv_sys_global_symbol_to_cdecl
17.18620 +
17.18621 +# Transform the output of nm in a C name address pair
17.18622 +global_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address
17.18623 +
17.18624 +# This is the shared library runtime path variable.
17.18625 +runpath_var=$runpath_var
17.18626 +
17.18627 +# This is the shared library path variable.
17.18628 +shlibpath_var=$shlibpath_var
17.18629 +
17.18630 +# Is shlibpath searched before the hard-coded library search path?
17.18631 +shlibpath_overrides_runpath=$shlibpath_overrides_runpath
17.18632 +
17.18633 +# How to hardcode a shared library path into an executable.
17.18634 +hardcode_action=$hardcode_action_RC
17.18635 +
17.18636 +# Whether we should hardcode library paths into libraries.
17.18637 +hardcode_into_libs=$hardcode_into_libs
17.18638 +
17.18639 +# Flag to hardcode \$libdir into a binary during linking.
17.18640 +# This must work even if \$libdir does not exist.
17.18641 +hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec_RC
17.18642 +
17.18643 +# If ld is used when linking, flag to hardcode \$libdir into
17.18644 +# a binary during linking. This must work even if \$libdir does
17.18645 +# not exist.
17.18646 +hardcode_libdir_flag_spec_ld=$lt_hardcode_libdir_flag_spec_ld_RC
17.18647 +
17.18648 +# Whether we need a single -rpath flag with a separated argument.
17.18649 +hardcode_libdir_separator=$lt_hardcode_libdir_separator_RC
17.18650 +
17.18651 +# Set to yes if using DIR/libNAME${shared_ext} during linking hardcodes DIR into the
17.18652 +# resulting binary.
17.18653 +hardcode_direct=$hardcode_direct_RC
17.18654 +
17.18655 +# Set to yes if using the -LDIR flag during linking hardcodes DIR into the
17.18656 +# resulting binary.
17.18657 +hardcode_minus_L=$hardcode_minus_L_RC
17.18658 +
17.18659 +# Set to yes if using SHLIBPATH_VAR=DIR during linking hardcodes DIR into
17.18660 +# the resulting binary.
17.18661 +hardcode_shlibpath_var=$hardcode_shlibpath_var_RC
17.18662 +
17.18663 +# Set to yes if building a shared library automatically hardcodes DIR into the library
17.18664 +# and all subsequent libraries and executables linked against it.
17.18665 +hardcode_automatic=$hardcode_automatic_RC
17.18666 +
17.18667 +# Variables whose values should be saved in libtool wrapper scripts and
17.18668 +# restored at relink time.
17.18669 +variables_saved_for_relink="$variables_saved_for_relink"
17.18670 +
17.18671 +# Whether libtool must link a program against all its dependency libraries.
17.18672 +link_all_deplibs=$link_all_deplibs_RC
17.18673 +
17.18674 +# Compile-time system search path for libraries
17.18675 +sys_lib_search_path_spec=$lt_sys_lib_search_path_spec
17.18676 +
17.18677 +# Run-time system search path for libraries
17.18678 +sys_lib_dlsearch_path_spec=$lt_sys_lib_dlsearch_path_spec
17.18679 +
17.18680 +# Fix the shell variable \$srcfile for the compiler.
17.18681 +fix_srcfile_path="$fix_srcfile_path_RC"
17.18682 +
17.18683 +# Set to yes if exported symbols are required.
17.18684 +always_export_symbols=$always_export_symbols_RC
17.18685 +
17.18686 +# The commands to list exported symbols.
17.18687 +export_symbols_cmds=$lt_export_symbols_cmds_RC
17.18688 +
17.18689 +# The commands to extract the exported symbol list from a shared archive.
17.18690 +extract_expsyms_cmds=$lt_extract_expsyms_cmds
17.18691 +
17.18692 +# Symbols that should not be listed in the preloaded symbols.
17.18693 +exclude_expsyms=$lt_exclude_expsyms_RC
17.18694 +
17.18695 +# Symbols that must always be exported.
17.18696 +include_expsyms=$lt_include_expsyms_RC
17.18697 +
17.18698 +# ### END LIBTOOL TAG CONFIG: $tagname
17.18699 +
17.18700 +__EOF__
17.18701 +
17.18702 +
17.18703 +else
17.18704 +  # If there is no Makefile yet, we rely on a make rule to execute
17.18705 +  # `config.status --recheck' to rerun these tests and create the
17.18706 +  # libtool script then.
17.18707 +  ltmain_in=`echo $ltmain | sed -e 's/\.sh$/.in/'`
17.18708 +  if test -f "$ltmain_in"; then
17.18709 +    test -f Makefile && make "$ltmain"
17.18710 +  fi
17.18711 +fi
17.18712 +
17.18713 +
17.18714 +ac_ext=c
17.18715 +ac_cpp='$CPP $CPPFLAGS'
17.18716 +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
17.18717 +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
17.18718 +ac_compiler_gnu=$ac_cv_c_compiler_gnu
17.18719 +
17.18720 +CC="$lt_save_CC"
17.18721 +
17.18722 +	;;
17.18723 +
17.18724 +      *)
17.18725 +	{ { echo "$as_me:$LINENO: error: Unsupported tag name: $tagname" >&5
17.18726 +echo "$as_me: error: Unsupported tag name: $tagname" >&2;}
17.18727 +   { (exit 1); exit 1; }; }
17.18728 +	;;
17.18729 +      esac
17.18730 +
17.18731 +      # Append the new tag name to the list of available tags.
17.18732 +      if test -n "$tagname" ; then
17.18733 +      available_tags="$available_tags $tagname"
17.18734 +    fi
17.18735 +    fi
17.18736 +  done
17.18737 +  IFS="$lt_save_ifs"
17.18738 +
17.18739 +  # Now substitute the updated list of available tags.
17.18740 +  if eval "sed -e 's/^available_tags=.*\$/available_tags=\"$available_tags\"/' \"$ofile\" > \"${ofile}T\""; then
17.18741 +    mv "${ofile}T" "$ofile"
17.18742 +    chmod +x "$ofile"
17.18743 +  else
17.18744 +    rm -f "${ofile}T"
17.18745 +    { { echo "$as_me:$LINENO: error: unable to update list of available tagged configurations." >&5
17.18746 +echo "$as_me: error: unable to update list of available tagged configurations." >&2;}
17.18747 +   { (exit 1); exit 1; }; }
17.18748 +  fi
17.18749 +fi
17.18750 +
17.18751 +
17.18752 +
17.18753 +# This can be used to rebuild libtool when needed
17.18754 +LIBTOOL_DEPS="$ac_aux_dir/ltmain.sh"
17.18755 +
17.18756 +# Always use our own libtool.
17.18757 +LIBTOOL='$(SHELL) $(top_builddir)/libtool'
17.18758 +
17.18759 +# Prevent multiple expansion
17.18760 +
17.18761 +
17.18762 +
17.18763 +
17.18764 +
17.18765 +
17.18766 +
17.18767 +
17.18768 +
17.18769 +
17.18770 +
17.18771 +
17.18772 +
17.18773 +
17.18774 +
17.18775 +
17.18776 +
17.18777 +
17.18778 +
17.18779 +
17.18780 +
17.18781 +PLUGIN_LDFLAGS="-module -avoid-version"
17.18782 +
17.18783 +
17.18784 +# work around a bug where need_version is set to no by the above
17.18785 +# -avoid-version call when this is not supported on OpenBSD (or am I
17.18786 +# completely wrong about this?)
17.18787 +case "${host_os}" in
17.18788 +            openbsd*)
17.18789 +              sed 's/^need_version=no$/need_version=yes/' < libtool > libtool.tmp && mv -f libtool.tmp libtool
17.18790 +            ;;
17.18791 +          esac
17.18792 +
17.18793 +
17.18794 +
17.18795 +# Extract the first word of "pkg-config", so it can be a program name with args.
17.18796 +set dummy pkg-config; ac_word=$2
17.18797 +echo "$as_me:$LINENO: checking for $ac_word" >&5
17.18798 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
17.18799 +if test "${ac_cv_path_PKG_CONFIG+set}" = set; then
17.18800 +  echo $ECHO_N "(cached) $ECHO_C" >&6
17.18801 +else
17.18802 +  case $PKG_CONFIG in
17.18803 +  [\\/]* | ?:[\\/]*)
17.18804 +  ac_cv_path_PKG_CONFIG="$PKG_CONFIG" # Let the user override the test with a path.
17.18805 +  ;;
17.18806 +  *)
17.18807 +  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
17.18808 +for as_dir in $PATH
17.18809 +do
17.18810 +  IFS=$as_save_IFS
17.18811 +  test -z "$as_dir" && as_dir=.
17.18812 +  for ac_exec_ext in '' $ac_executable_extensions; do
17.18813 +  if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
17.18814 +    ac_cv_path_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext"
17.18815 +    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
17.18816 +    break 2
17.18817 +  fi
17.18818 +done
17.18819 +done
17.18820 +
17.18821 +  ;;
17.18822 +esac
17.18823 +fi
17.18824 +PKG_CONFIG=$ac_cv_path_PKG_CONFIG
17.18825 +
17.18826 +if test -n "$PKG_CONFIG"; then
17.18827 +  echo "$as_me:$LINENO: result: $PKG_CONFIG" >&5
17.18828 +echo "${ECHO_T}$PKG_CONFIG" >&6
17.18829 +else
17.18830 +  echo "$as_me:$LINENO: result: no" >&5
17.18831 +echo "${ECHO_T}no" >&6
17.18832 +fi
17.18833 +
17.18834 +
17.18835 +   if test x$prefix != xNONE; then
17.18836 +     PKG_CONFIG_PATH="$PKG_CONFIG_PATH:$prefix/lib/pkgconfig"
17.18837 +   fi
17.18838 +
17.18839 +   PKG_CONFIG_PATH="$PKG_CONFIG_PATH:/usr/local/lib/pkgconfig"
17.18840 +   export PKG_CONFIG_PATH
17.18841 +
17.18842 +
17.18843 +  succeeded=no
17.18844 +
17.18845 +  if test -z "$PKG_CONFIG"; then
17.18846 +    # Extract the first word of "pkg-config", so it can be a program name with args.
17.18847 +set dummy pkg-config; ac_word=$2
17.18848 +echo "$as_me:$LINENO: checking for $ac_word" >&5
17.18849 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
17.18850 +if test "${ac_cv_path_PKG_CONFIG+set}" = set; then
17.18851 +  echo $ECHO_N "(cached) $ECHO_C" >&6
17.18852 +else
17.18853 +  case $PKG_CONFIG in
17.18854 +  [\\/]* | ?:[\\/]*)
17.18855 +  ac_cv_path_PKG_CONFIG="$PKG_CONFIG" # Let the user override the test with a path.
17.18856 +  ;;
17.18857 +  *)
17.18858 +  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
17.18859 +for as_dir in $PATH
17.18860 +do
17.18861 +  IFS=$as_save_IFS
17.18862 +  test -z "$as_dir" && as_dir=.
17.18863 +  for ac_exec_ext in '' $ac_executable_extensions; do
17.18864 +  if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
17.18865 +    ac_cv_path_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext"
17.18866 +    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
17.18867 +    break 2
17.18868 +  fi
17.18869 +done
17.18870 +done
17.18871 +
17.18872 +  test -z "$ac_cv_path_PKG_CONFIG" && ac_cv_path_PKG_CONFIG="no"
17.18873 +  ;;
17.18874 +esac
17.18875 +fi
17.18876 +PKG_CONFIG=$ac_cv_path_PKG_CONFIG
17.18877 +
17.18878 +if test -n "$PKG_CONFIG"; then
17.18879 +  echo "$as_me:$LINENO: result: $PKG_CONFIG" >&5
17.18880 +echo "${ECHO_T}$PKG_CONFIG" >&6
17.18881 +else
17.18882 +  echo "$as_me:$LINENO: result: no" >&5
17.18883 +echo "${ECHO_T}no" >&6
17.18884 +fi
17.18885 +
17.18886 +  fi
17.18887 +
17.18888 +  if test "$PKG_CONFIG" = "no" ; then
17.18889 +     echo "*** The pkg-config script could not be found. Make sure it is"
17.18890 +     echo "*** in your path, or set the PKG_CONFIG environment variable"
17.18891 +     echo "*** to the full path to pkg-config."
17.18892 +     echo "*** Or see http://www.freedesktop.org/software/pkgconfig to get pkg-config."
17.18893 +  else
17.18894 +     PKG_CONFIG_MIN_VERSION=0.9.0
17.18895 +     if $PKG_CONFIG --atleast-pkgconfig-version $PKG_CONFIG_MIN_VERSION; then
17.18896 +        echo "$as_me:$LINENO: checking for libgift >= 0.11.4 libgift < 0.12.0" >&5
17.18897 +echo $ECHO_N "checking for libgift >= 0.11.4 libgift < 0.12.0... $ECHO_C" >&6
17.18898 +
17.18899 +        if $PKG_CONFIG --exists "libgift >= 0.11.4 libgift < 0.12.0" ; then
17.18900 +            echo "$as_me:$LINENO: result: yes" >&5
17.18901 +echo "${ECHO_T}yes" >&6
17.18902 +            succeeded=yes
17.18903 +
17.18904 +            echo "$as_me:$LINENO: checking GNUTELLA_CFLAGS" >&5
17.18905 +echo $ECHO_N "checking GNUTELLA_CFLAGS... $ECHO_C" >&6
17.18906 +            GNUTELLA_CFLAGS=`$PKG_CONFIG --cflags "libgift >= 0.11.4 libgift < 0.12.0"`
17.18907 +            echo "$as_me:$LINENO: result: $GNUTELLA_CFLAGS" >&5
17.18908 +echo "${ECHO_T}$GNUTELLA_CFLAGS" >&6
17.18909 +
17.18910 +            echo "$as_me:$LINENO: checking GNUTELLA_LIBS" >&5
17.18911 +echo $ECHO_N "checking GNUTELLA_LIBS... $ECHO_C" >&6
17.18912 +            GNUTELLA_LIBS=`$PKG_CONFIG --libs "libgift >= 0.11.4 libgift < 0.12.0"`
17.18913 +            echo "$as_me:$LINENO: result: $GNUTELLA_LIBS" >&5
17.18914 +echo "${ECHO_T}$GNUTELLA_LIBS" >&6
17.18915 +        else
17.18916 +            GNUTELLA_CFLAGS=""
17.18917 +            GNUTELLA_LIBS=""
17.18918 +            ## If we have a custom action on failure, don't print errors, but
17.18919 +            ## do set a variable so people can do so.
17.18920 +            GNUTELLA_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "libgift >= 0.11.4 libgift < 0.12.0"`
17.18921 +            echo $GNUTELLA_PKG_ERRORS
17.18922 +        fi
17.18923 +
17.18924 +
17.18925 +
17.18926 +     else
17.18927 +        echo "*** Your version of pkg-config is too old. You need version $PKG_CONFIG_MIN_VERSION or newer."
17.18928 +        echo "*** See http://www.freedesktop.org/software/pkgconfig"
17.18929 +     fi
17.18930 +  fi
17.18931 +
17.18932 +  if test $succeeded = yes; then
17.18933 +     :
17.18934 +  else
17.18935 +     { { echo "$as_me:$LINENO: error: Library requirements (libgift >= 0.11.4 libgift < 0.12.0) not met; consider adjusting the PKG_CONFIG_PATH environment variable if your libraries are in a nonstandard prefix so pkg-config can find them." >&5
17.18936 +echo "$as_me: error: Library requirements (libgift >= 0.11.4 libgift < 0.12.0) not met; consider adjusting the PKG_CONFIG_PATH environment variable if your libraries are in a nonstandard prefix so pkg-config can find them." >&2;}
17.18937 +   { (exit 1); exit 1; }; }
17.18938 +  fi
17.18939 +
17.18940 +
17.18941 +   # fudge libgiftproto in there which doesnt have any pkg-config entry
17.18942 +   GNUTELLA_LIBS="$GNUTELLA_LIBS -lgiftproto"
17.18943 +
17.18944 +   # hack to set libgift_version
17.18945 +   libgift_version=`pkg-config libgift --modversion`
17.18946 +
17.18947 +
17.18948 +
17.18949 +
17.18950 +
17.18951 +
17.18952 +
17.18953 +# Get rid of -g[0-9] -Wall -O[0-9] and add them unconditionally if
17.18954 +# compiling in maintainer mode
17.18955 +if test x"$USE_MAINTAINER_MODE" = xyes; then
17.18956 +   CFLAGS=`echo "$CFLAGS" | sed 's/-Wall\>//; s/-O[0-9]//; s/-g\([0-9]\)*//'`
17.18957 +   CFLAGS="$CFLAGS -Wall -g3 -O0"
17.18958 +fi
17.18959 +
17.18960 +
17.18961 +
17.18962 +
17.18963 +for ac_func in getpid getppid
17.18964 +do
17.18965 +as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
17.18966 +echo "$as_me:$LINENO: checking for $ac_func" >&5
17.18967 +echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6
17.18968 +if eval "test \"\${$as_ac_var+set}\" = set"; then
17.18969 +  echo $ECHO_N "(cached) $ECHO_C" >&6
17.18970 +else
17.18971 +  cat >conftest.$ac_ext <<_ACEOF
17.18972 +/* confdefs.h.  */
17.18973 +_ACEOF
17.18974 +cat confdefs.h >>conftest.$ac_ext
17.18975 +cat >>conftest.$ac_ext <<_ACEOF
17.18976 +/* end confdefs.h.  */
17.18977 +/* Define $ac_func to an innocuous variant, in case <limits.h> declares $ac_func.
17.18978 +   For example, HP-UX 11i <limits.h> declares gettimeofday.  */
17.18979 +#define $ac_func innocuous_$ac_func
17.18980 +
17.18981 +/* System header to define __stub macros and hopefully few prototypes,
17.18982 +    which can conflict with char $ac_func (); below.
17.18983 +    Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
17.18984 +    <limits.h> exists even on freestanding compilers.  */
17.18985 +
17.18986 +#ifdef __STDC__
17.18987 +# include <limits.h>
17.18988 +#else
17.18989 +# include <assert.h>
17.18990 +#endif
17.18991 +
17.18992 +#undef $ac_func
17.18993 +
17.18994 +/* Override any gcc2 internal prototype to avoid an error.  */
17.18995 +#ifdef __cplusplus
17.18996 +extern "C"
17.18997 +{
17.18998 +#endif
17.18999 +/* We use char because int might match the return type of a gcc2
17.19000 +   builtin and then its argument prototype would still apply.  */
17.19001 +char $ac_func ();
17.19002 +/* The GNU C library defines this for functions which it implements
17.19003 +    to always fail with ENOSYS.  Some functions are actually named
17.19004 +    something starting with __ and the normal name is an alias.  */
17.19005 +#if defined (__stub_$ac_func) || defined (__stub___$ac_func)
17.19006 +choke me
17.19007 +#else
17.19008 +char (*f) () = $ac_func;
17.19009 +#endif
17.19010 +#ifdef __cplusplus
17.19011 +}
17.19012 +#endif
17.19013 +
17.19014 +int
17.19015 +main ()
17.19016 +{
17.19017 +return f != $ac_func;
17.19018 +  ;
17.19019 +  return 0;
17.19020 +}
17.19021 +_ACEOF
17.19022 +rm -f conftest.$ac_objext conftest$ac_exeext
17.19023 +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
17.19024 +  (eval $ac_link) 2>conftest.er1
17.19025 +  ac_status=$?
17.19026 +  grep -v '^ *+' conftest.er1 >conftest.err
17.19027 +  rm -f conftest.er1
17.19028 +  cat conftest.err >&5
17.19029 +  echo "$as_me:$LINENO: \$? = $ac_status" >&5
17.19030 +  (exit $ac_status); } &&
17.19031 +	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
17.19032 +  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
17.19033 +  (eval $ac_try) 2>&5
17.19034 +  ac_status=$?
17.19035 +  echo "$as_me:$LINENO: \$? = $ac_status" >&5
17.19036 +  (exit $ac_status); }; } &&
17.19037 +	 { ac_try='test -s conftest$ac_exeext'
17.19038 +  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
17.19039 +  (eval $ac_try) 2>&5
17.19040 +  ac_status=$?
17.19041 +  echo "$as_me:$LINENO: \$? = $ac_status" >&5
17.19042 +  (exit $ac_status); }; }; then
17.19043 +  eval "$as_ac_var=yes"
17.19044 +else
17.19045 +  echo "$as_me: failed program was:" >&5
17.19046 +sed 's/^/| /' conftest.$ac_ext >&5
17.19047 +
17.19048 +eval "$as_ac_var=no"
17.19049 +fi
17.19050 +rm -f conftest.err conftest.$ac_objext \
17.19051 +      conftest$ac_exeext conftest.$ac_ext
17.19052 +fi
17.19053 +echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5
17.19054 +echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6
17.19055 +if test `eval echo '${'$as_ac_var'}'` = yes; then
17.19056 +  cat >>confdefs.h <<_ACEOF
17.19057 +#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1
17.19058 +_ACEOF
17.19059 +
17.19060 +fi
17.19061 +done
17.19062 +
17.19063 +
17.19064 +
17.19065 +
17.19066 +for ac_func in hstrerror
17.19067 +do
17.19068 +as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
17.19069 +echo "$as_me:$LINENO: checking for $ac_func" >&5
17.19070 +echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6
17.19071 +if eval "test \"\${$as_ac_var+set}\" = set"; then
17.19072 +  echo $ECHO_N "(cached) $ECHO_C" >&6
17.19073 +else
17.19074 +  cat >conftest.$ac_ext <<_ACEOF
17.19075 +/* confdefs.h.  */
17.19076 +_ACEOF
17.19077 +cat confdefs.h >>conftest.$ac_ext
17.19078 +cat >>conftest.$ac_ext <<_ACEOF
17.19079 +/* end confdefs.h.  */
17.19080 +/* Define $ac_func to an innocuous variant, in case <limits.h> declares $ac_func.
17.19081 +   For example, HP-UX 11i <limits.h> declares gettimeofday.  */
17.19082 +#define $ac_func innocuous_$ac_func
17.19083 +
17.19084 +/* System header to define __stub macros and hopefully few prototypes,
17.19085 +    which can conflict with char $ac_func (); below.
17.19086 +    Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
17.19087 +    <limits.h> exists even on freestanding compilers.  */
17.19088 +
17.19089 +#ifdef __STDC__
17.19090 +# include <limits.h>
17.19091 +#else
17.19092 +# include <assert.h>
17.19093 +#endif
17.19094 +
17.19095 +#undef $ac_func
17.19096 +
17.19097 +/* Override any gcc2 internal prototype to avoid an error.  */
17.19098 +#ifdef __cplusplus
17.19099 +extern "C"
17.19100 +{
17.19101 +#endif
17.19102 +/* We use char because int might match the return type of a gcc2
17.19103 +   builtin and then its argument prototype would still apply.  */
17.19104 +char $ac_func ();
17.19105 +/* The GNU C library defines this for functions which it implements
17.19106 +    to always fail with ENOSYS.  Some functions are actually named
17.19107 +    something starting with __ and the normal name is an alias.  */
17.19108 +#if defined (__stub_$ac_func) || defined (__stub___$ac_func)
17.19109 +choke me
17.19110 +#else
17.19111 +char (*f) () = $ac_func;
17.19112 +#endif
17.19113 +#ifdef __cplusplus
17.19114 +}
17.19115 +#endif
17.19116 +
17.19117 +int
17.19118 +main ()
17.19119 +{
17.19120 +return f != $ac_func;
17.19121 +  ;
17.19122 +  return 0;
17.19123 +}
17.19124 +_ACEOF
17.19125 +rm -f conftest.$ac_objext conftest$ac_exeext
17.19126 +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
17.19127 +  (eval $ac_link) 2>conftest.er1
17.19128 +  ac_status=$?
17.19129 +  grep -v '^ *+' conftest.er1 >conftest.err
17.19130 +  rm -f conftest.er1
17.19131 +  cat conftest.err >&5
17.19132 +  echo "$as_me:$LINENO: \$? = $ac_status" >&5
17.19133 +  (exit $ac_status); } &&
17.19134 +	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
17.19135 +  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
17.19136 +  (eval $ac_try) 2>&5
17.19137 +  ac_status=$?
17.19138 +  echo "$as_me:$LINENO: \$? = $ac_status" >&5
17.19139 +  (exit $ac_status); }; } &&
17.19140 +	 { ac_try='test -s conftest$ac_exeext'
17.19141 +  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
17.19142 +  (eval $ac_try) 2>&5
17.19143 +  ac_status=$?
17.19144 +  echo "$as_me:$LINENO: \$? = $ac_status" >&5
17.19145 +  (exit $ac_status); }; }; then
17.19146 +  eval "$as_ac_var=yes"
17.19147 +else
17.19148 +  echo "$as_me: failed program was:" >&5
17.19149 +sed 's/^/| /' conftest.$ac_ext >&5
17.19150 +
17.19151 +eval "$as_ac_var=no"
17.19152 +fi
17.19153 +rm -f conftest.err conftest.$ac_objext \
17.19154 +      conftest$ac_exeext conftest.$ac_ext
17.19155 +fi
17.19156 +echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5
17.19157 +echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6
17.19158 +if test `eval echo '${'$as_ac_var'}'` = yes; then
17.19159 +  cat >>confdefs.h <<_ACEOF
17.19160 +#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1
17.19161 +_ACEOF
17.19162 +
17.19163 +fi
17.19164 +done
17.19165 +
17.19166 +
17.19167 +
17.19168 +OPT_ZLIB=
17.19169 +
17.19170 +# Check whether --with-zlib or --without-zlib was given.
17.19171 +if test "${with_zlib+set}" = set; then
17.19172 +  withval="$with_zlib"
17.19173 +  OPT_ZLIB=$withval
17.19174 +fi;
17.19175 +
17.19176 +if test x"$OPT_ZLIB" = xno; then
17.19177 +   { { echo "$as_me:$LINENO: error: zlib support is required" >&5
17.19178 +echo "$as_me: error: zlib support is required" >&2;}
17.19179 +   { (exit 1); exit 1; }; }
17.19180 +fi
17.19181 +
17.19182 +
17.19183 +   # set the minimum ZLIB_VER we're willing to link against...
17.19184 +   ZLIB_VER=1.1.4
17.19185 +
17.19186 +   # for some reason Darwin has a 1.1.3 version with the 1.1.4 security fix
17.19187 +   # applied backwards...
17.19188 +   case "${host}" in
17.19189 +   *-*-darwin* )
17.19190 +     ZLIB_VER=1.1.3
17.19191 +   ;;
17.19192 +   esac
17.19193 +
17.19194 +   if test x"$OPT_ZLIB" = xno; then
17.19195 +      zlib_ok=no
17.19196 +   else
17.19197 +      ZLIB_DIRS="$OPT_ZLIB /usr /usr/local /sw"
17.19198 +      for ZLIB_DIR in $ZLIB_DIRS;
17.19199 +      do
17.19200 +         LIBS_SAVE="$LIBS"
17.19201 +         CPPFLAGS_SAVE="$CPPFLAGS"
17.19202 +         LIBS="$LIBS -L${ZLIB_DIR}/lib"
17.19203 +         CPPFLAGS="$CPPFLAGS -I${ZLIB_DIR}/include"
17.19204 +         echo "$as_me:$LINENO: checking for zlib version ${ZLIB_VER}+ in ${ZLIB_DIR}" >&5
17.19205 +echo $ECHO_N "checking for zlib version ${ZLIB_VER}+ in ${ZLIB_DIR}... $ECHO_C" >&6
17.19206 +if test "${zlib_ok+set}" = set; then
17.19207 +  echo $ECHO_N "(cached) $ECHO_C" >&6
17.19208 +else
17.19209 +  if test "$cross_compiling" = yes; then
17.19210 +  zlib_ok=yes
17.19211 +else
17.19212 +  cat >conftest.$ac_ext <<_ACEOF
17.19213 +/* confdefs.h.  */
17.19214 +_ACEOF
17.19215 +cat confdefs.h >>conftest.$ac_ext
17.19216 +cat >>conftest.$ac_ext <<_ACEOF
17.19217 +/* end confdefs.h.  */
17.19218 +#include <zlib.h>
17.19219 +               #include <string.h>
17.19220 +               void main() {
17.19221 +                 exit(strcmp(ZLIB_VERSION, "${ZLIB_VER}") < 0);
17.19222 +               }
17.19223 +
17.19224 +_ACEOF
17.19225 +rm -f conftest$ac_exeext
17.19226 +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
17.19227 +  (eval $ac_link) 2>&5
17.19228 +  ac_status=$?
17.19229 +  echo "$as_me:$LINENO: \$? = $ac_status" >&5
17.19230 +  (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
17.19231 +  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
17.19232 +  (eval $ac_try) 2>&5
17.19233 +  ac_status=$?
17.19234 +  echo "$as_me:$LINENO: \$? = $ac_status" >&5
17.19235 +  (exit $ac_status); }; }; then
17.19236 +  zlib_ok=yes
17.19237 +else
17.19238 +  echo "$as_me: program exited with status $ac_status" >&5
17.19239 +echo "$as_me: failed program was:" >&5
17.19240 +sed 's/^/| /' conftest.$ac_ext >&5
17.19241 +
17.19242 +( exit $ac_status )
17.19243 +zlib_ok=no
17.19244 +fi
17.19245 +rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
17.19246 +fi
17.19247 +fi
17.19248 +echo "$as_me:$LINENO: result: $zlib_ok" >&5
17.19249 +echo "${ECHO_T}$zlib_ok" >&6
17.19250 +
17.19251 +         if test "$zlib_ok" != "no"; then
17.19252 +            echo "$as_me:$LINENO: checking for gzread" >&5
17.19253 +echo $ECHO_N "checking for gzread... $ECHO_C" >&6
17.19254 +if test "${ac_cv_func_gzread+set}" = set; then
17.19255 +  echo $ECHO_N "(cached) $ECHO_C" >&6
17.19256 +else
17.19257 +  cat >conftest.$ac_ext <<_ACEOF
17.19258 +/* confdefs.h.  */
17.19259 +_ACEOF
17.19260 +cat confdefs.h >>conftest.$ac_ext
17.19261 +cat >>conftest.$ac_ext <<_ACEOF
17.19262 +/* end confdefs.h.  */
17.19263 +/* Define gzread to an innocuous variant, in case <limits.h> declares gzread.
17.19264 +   For example, HP-UX 11i <limits.h> declares gettimeofday.  */
17.19265 +#define gzread innocuous_gzread
17.19266 +
17.19267 +/* System header to define __stub macros and hopefully few prototypes,
17.19268 +    which can conflict with char gzread (); below.
17.19269 +    Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
17.19270 +    <limits.h> exists even on freestanding compilers.  */
17.19271 +
17.19272 +#ifdef __STDC__
17.19273 +# include <limits.h>
17.19274 +#else
17.19275 +# include <assert.h>
17.19276 +#endif
17.19277 +
17.19278 +#undef gzread
17.19279 +
17.19280 +/* Override any gcc2 internal prototype to avoid an error.  */
17.19281 +#ifdef __cplusplus
17.19282 +extern "C"
17.19283 +{
17.19284 +#endif
17.19285 +/* We use char because int might match the return type of a gcc2
17.19286 +   builtin and then its argument prototype would still apply.  */
17.19287 +char gzread ();
17.19288 +/* The GNU C library defines this for functions which it implements
17.19289 +    to always fail with ENOSYS.  Some functions are actually named
17.19290 +    something starting with __ and the normal name is an alias.  */
17.19291 +#if defined (__stub_gzread) || defined (__stub___gzread)
17.19292 +choke me
17.19293 +#else
17.19294 +char (*f) () = gzread;
17.19295 +#endif
17.19296 +#ifdef __cplusplus
17.19297 +}
17.19298 +#endif
17.19299 +
17.19300 +int
17.19301 +main ()
17.19302 +{
17.19303 +return f != gzread;
17.19304 +  ;
17.19305 +  return 0;
17.19306 +}
17.19307 +_ACEOF
17.19308 +rm -f conftest.$ac_objext conftest$ac_exeext
17.19309 +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
17.19310 +  (eval $ac_link) 2>conftest.er1
17.19311 +  ac_status=$?
17.19312 +  grep -v '^ *+' conftest.er1 >conftest.err
17.19313 +  rm -f conftest.er1
17.19314 +  cat conftest.err >&5
17.19315 +  echo "$as_me:$LINENO: \$? = $ac_status" >&5
17.19316 +  (exit $ac_status); } &&
17.19317 +	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
17.19318 +  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
17.19319 +  (eval $ac_try) 2>&5
17.19320 +  ac_status=$?
17.19321 +  echo "$as_me:$LINENO: \$? = $ac_status" >&5
17.19322 +  (exit $ac_status); }; } &&
17.19323 +	 { ac_try='test -s conftest$ac_exeext'
17.19324 +  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
17.19325 +  (eval $ac_try) 2>&5
17.19326 +  ac_status=$?
17.19327 +  echo "$as_me:$LINENO: \$? = $ac_status" >&5
17.19328 +  (exit $ac_status); }; }; then
17.19329 +  ac_cv_func_gzread=yes
17.19330 +else
17.19331 +  echo "$as_me: failed program was:" >&5
17.19332 +sed 's/^/| /' conftest.$ac_ext >&5
17.19333 +
17.19334 +ac_cv_func_gzread=no
17.19335 +fi
17.19336 +rm -f conftest.err conftest.$ac_objext \
17.19337 +      conftest$ac_exeext conftest.$ac_ext
17.19338 +fi
17.19339 +echo "$as_me:$LINENO: result: $ac_cv_func_gzread" >&5
17.19340 +echo "${ECHO_T}$ac_cv_func_gzread" >&6
17.19341 +if test $ac_cv_func_gzread = yes; then
17.19342 +  :
17.19343 +else
17.19344 +
17.19345 +echo "$as_me:$LINENO: checking for gzread in -lz" >&5
17.19346 +echo $ECHO_N "checking for gzread in -lz... $ECHO_C" >&6
17.19347 +if test "${ac_cv_lib_z_gzread+set}" = set; then
17.19348 +  echo $ECHO_N "(cached) $ECHO_C" >&6
17.19349 +else
17.19350 +  ac_check_lib_save_LIBS=$LIBS
17.19351 +LIBS="-lz  $LIBS"
17.19352 +cat >conftest.$ac_ext <<_ACEOF
17.19353 +/* confdefs.h.  */
17.19354 +_ACEOF
17.19355 +cat confdefs.h >>conftest.$ac_ext
17.19356 +cat >>conftest.$ac_ext <<_ACEOF
17.19357 +/* end confdefs.h.  */
17.19358 +
17.19359 +/* Override any gcc2 internal prototype to avoid an error.  */
17.19360 +#ifdef __cplusplus
17.19361 +extern "C"
17.19362 +#endif
17.19363 +/* We use char because int might match the return type of a gcc2
17.19364 +   builtin and then its argument prototype would still apply.  */
17.19365 +char gzread ();
17.19366 +int
17.19367 +main ()
17.19368 +{
17.19369 +gzread ();
17.19370 +  ;
17.19371 +  return 0;
17.19372 +}
17.19373 +_ACEOF
17.19374 +rm -f conftest.$ac_objext conftest$ac_exeext
17.19375 +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
17.19376 +  (eval $ac_link) 2>conftest.er1
17.19377 +  ac_status=$?
17.19378 +  grep -v '^ *+' conftest.er1 >conftest.err
17.19379 +  rm -f conftest.er1
17.19380 +  cat conftest.err >&5
17.19381 +  echo "$as_me:$LINENO: \$? = $ac_status" >&5
17.19382 +  (exit $ac_status); } &&
17.19383 +	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
17.19384 +  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
17.19385 +  (eval $ac_try) 2>&5
17.19386 +  ac_status=$?
17.19387 +  echo "$as_me:$LINENO: \$? = $ac_status" >&5
17.19388 +  (exit $ac_status); }; } &&
17.19389 +	 { ac_try='test -s conftest$ac_exeext'
17.19390 +  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
17.19391 +  (eval $ac_try) 2>&5
17.19392 +  ac_status=$?
17.19393 +  echo "$as_me:$LINENO: \$? = $ac_status" >&5
17.19394 +  (exit $ac_status); }; }; then
17.19395 +  ac_cv_lib_z_gzread=yes
17.19396 +else
17.19397 +  echo "$as_me: failed program was:" >&5
17.19398 +sed 's/^/| /' conftest.$ac_ext >&5
17.19399 +
17.19400 +ac_cv_lib_z_gzread=no
17.19401 +fi
17.19402 +rm -f conftest.err conftest.$ac_objext \
17.19403 +      conftest$ac_exeext conftest.$ac_ext
17.19404 +LIBS=$ac_check_lib_save_LIBS
17.19405 +fi
17.19406 +echo "$as_me:$LINENO: result: $ac_cv_lib_z_gzread" >&5
17.19407 +echo "${ECHO_T}$ac_cv_lib_z_gzread" >&6
17.19408 +if test $ac_cv_lib_z_gzread = yes; then
17.19409 +  cat >>confdefs.h <<_ACEOF
17.19410 +#define HAVE_LIBZ 1
17.19411 +_ACEOF
17.19412 +
17.19413 +  LIBS="-lz $LIBS"
17.19414 +
17.19415 +fi
17.19416 +
17.19417 +fi
17.19418 +
17.19419 +            cat >>confdefs.h <<\_ACEOF
17.19420 +#define USE_ZLIB 1
17.19421 +_ACEOF
17.19422 +
17.19423 +
17.19424 +            break
17.19425 +         fi
17.19426 +         LIBS="$LIBS_SAVE"
17.19427 +         CPPFLAGS="$CPPFLAGS_SAVE"
17.19428 +      done
17.19429 +
17.19430 +      if test "$zlib_ok" = "no"; then
17.19431 +         { { echo "$as_me:$LINENO: error:
17.19432 +NOTE: The zlib compression library version ${ZLIB_VER} or greater was not found
17.19433 +      on your system.
17.19434 +
17.19435 +      If zlib ${ZLIB_VER}+ is not installed, install it.
17.19436 +         " >&5
17.19437 +echo "$as_me: error:
17.19438 +NOTE: The zlib compression library version ${ZLIB_VER} or greater was not found
17.19439 +      on your system.
17.19440 +
17.19441 +      If zlib ${ZLIB_VER}+ is not installed, install it.
17.19442 +         " >&2;}
17.19443 +   { (exit 1); exit 1; }; }
17.19444 +      fi
17.19445 +   fi
17.19446 +
17.19447 +
17.19448 +
17.19449 +OPT_LIBXML=no
17.19450 +
17.19451 +# Check whether --with-libxml or --without-libxml was given.
17.19452 +if test "${with_libxml+set}" = set; then
17.19453 +  withval="$with_libxml"
17.19454 +  OPT_LIBXML=$withval
17.19455 +fi;
17.19456 +
17.19457 +echo "$as_me:$LINENO: checking whether libxml should be used" >&5
17.19458 +echo $ECHO_N "checking whether libxml should be used... $ECHO_C" >&6
17.19459 +use_libxml=no
17.19460 +
17.19461 +if test x"$OPT_LIBXML" != xno; then
17.19462 +   echo "$as_me:$LINENO: result: yes" >&5
17.19463 +echo "${ECHO_T}yes" >&6
17.19464 +
17.19465 +   #
17.19466 +   # Check on the user's PATH if no path was specified in OPT_LIBXML,
17.19467 +   # when the user has passed --with-libxml without a directory,
17.19468 +   # or check the directory if one was supplied.
17.19469 +   #
17.19470 +   if test x"$OPT_LIBXML" = xyes; then
17.19471 +      # Extract the first word of "xml2-config", so it can be a program name with args.
17.19472 +set dummy xml2-config; ac_word=$2
17.19473 +echo "$as_me:$LINENO: checking for $ac_word" >&5
17.19474 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
17.19475 +if test "${ac_cv_path_XML2_CONFIG+set}" = set; then
17.19476 +  echo $ECHO_N "(cached) $ECHO_C" >&6
17.19477 +else
17.19478 +  case $XML2_CONFIG in
17.19479 +  [\\/]* | ?:[\\/]*)
17.19480 +  ac_cv_path_XML2_CONFIG="$XML2_CONFIG" # Let the user override the test with a path.
17.19481 +  ;;
17.19482 +  *)
17.19483 +  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
17.19484 +for as_dir in $PATH
17.19485 +do
17.19486 +  IFS=$as_save_IFS
17.19487 +  test -z "$as_dir" && as_dir=.
17.19488 +  for ac_exec_ext in '' $ac_executable_extensions; do
17.19489 +  if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
17.19490 +    ac_cv_path_XML2_CONFIG="$as_dir/$ac_word$ac_exec_ext"
17.19491 +    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
17.19492 +    break 2
17.19493 +  fi
17.19494 +done
17.19495 +done
17.19496 +
17.19497 +  test -z "$ac_cv_path_XML2_CONFIG" && ac_cv_path_XML2_CONFIG="no"
17.19498 +  ;;
17.19499 +esac
17.19500 +fi
17.19501 +XML2_CONFIG=$ac_cv_path_XML2_CONFIG
17.19502 +
17.19503 +if test -n "$XML2_CONFIG"; then
17.19504 +  echo "$as_me:$LINENO: result: $XML2_CONFIG" >&5
17.19505 +echo "${ECHO_T}$XML2_CONFIG" >&6
17.19506 +else
17.19507 +  echo "$as_me:$LINENO: result: no" >&5
17.19508 +echo "${ECHO_T}no" >&6
17.19509 +fi
17.19510 +
17.19511 +   else
17.19512 +      XMLPATH="$OPT_LIBXML/bin"
17.19513 +      # Extract the first word of "xml2-config", so it can be a program name with args.
17.19514 +set dummy xml2-config; ac_word=$2
17.19515 +echo "$as_me:$LINENO: checking for $ac_word" >&5
17.19516 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
17.19517 +if test "${ac_cv_path_XML2_CONFIG+set}" = set; then
17.19518 +  echo $ECHO_N "(cached) $ECHO_C" >&6
17.19519 +else
17.19520 +  case $XML2_CONFIG in
17.19521 +  [\\/]* | ?:[\\/]*)
17.19522 +  ac_cv_path_XML2_CONFIG="$XML2_CONFIG" # Let the user override the test with a path.
17.19523 +  ;;
17.19524 +  *)
17.19525 +  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
17.19526 +for as_dir in $XMLPATH
17.19527 +do
17.19528 +  IFS=$as_save_IFS
17.19529 +  test -z "$as_dir" && as_dir=.
17.19530 +  for ac_exec_ext in '' $ac_executable_extensions; do
17.19531 +  if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
17.19532 +    ac_cv_path_XML2_CONFIG="$as_dir/$ac_word$ac_exec_ext"
17.19533 +    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
17.19534 +    break 2
17.19535 +  fi
17.19536 +done
17.19537 +done
17.19538 +
17.19539 +  test -z "$ac_cv_path_XML2_CONFIG" && ac_cv_path_XML2_CONFIG="no"
17.19540 +  ;;
17.19541 +esac
17.19542 +fi
17.19543 +XML2_CONFIG=$ac_cv_path_XML2_CONFIG
17.19544 +
17.19545 +if test -n "$XML2_CONFIG"; then
17.19546 +  echo "$as_me:$LINENO: result: $XML2_CONFIG" >&5
17.19547 +echo "${ECHO_T}$XML2_CONFIG" >&6
17.19548 +else
17.19549 +  echo "$as_me:$LINENO: result: no" >&5
17.19550 +echo "${ECHO_T}no" >&6
17.19551 +fi
17.19552 +
17.19553 +   fi
17.19554 +
17.19555 +   if test x"$XML2_CONFIG" != xno; then
17.19556 +      LIBXML2_CFLAGS=`$XML2_CONFIG --cflags`
17.19557 +      LIBXML2_LIBS=`$XML2_CONFIG --libs`
17.19558 +
17.19559 +
17.19560 +
17.19561 +      cat >>confdefs.h <<\_ACEOF
17.19562 +#define USE_LIBXML2 1
17.19563 +_ACEOF
17.19564 +
17.19565 +   else
17.19566 +      { { echo "$as_me:$LINENO: error:
17.19567 +Couldn't run ${OPT_LIBXML}/bin/xml2-config
17.19568 +
17.19569 +" >&5
17.19570 +echo "$as_me: error:
17.19571 +Couldn't run ${OPT_LIBXML}/bin/xml2-config
17.19572 +
17.19573 +" >&2;}
17.19574 +   { (exit 1); exit 1; }; }
17.19575 +   fi
17.19576 +
17.19577 +   use_libxml=yes
17.19578 +else
17.19579 +   echo "$as_me:$LINENO: result: no" >&5
17.19580 +echo "${ECHO_T}no" >&6
17.19581 +fi
17.19582 +
17.19583 +
17.19584 +                                                                                          ac_config_files="$ac_config_files Makefile m4/Makefile src/Makefile src/encoding/Makefile src/io/Makefile src/message/Makefile src/transfer/Makefile data/Makefile gnutella.spec"
17.19585 +
17.19586 +
17.19587 +cat >confcache <<\_ACEOF
17.19588 +# This file is a shell script that caches the results of configure
17.19589 +# tests run on this system so they can be shared between configure
17.19590 +# scripts and configure runs, see configure's option --config-cache.
17.19591 +# It is not useful on other systems.  If it contains results you don't
17.19592 +# want to keep, you may remove or edit it.
17.19593 +#
17.19594 +# config.status only pays attention to the cache file if you give it
17.19595 +# the --recheck option to rerun configure.
17.19596 +#
17.19597 +# `ac_cv_env_foo' variables (set or unset) will be overridden when
17.19598 +# loading this file, other *unset* `ac_cv_foo' will be assigned the
17.19599 +# following values.
17.19600 +
17.19601 +_ACEOF
17.19602 +
17.19603 +# The following way of writing the cache mishandles newlines in values,
17.19604 +# but we know of no workaround that is simple, portable, and efficient.
17.19605 +# So, don't put newlines in cache variables' values.
17.19606 +# Ultrix sh set writes to stderr and can't be redirected directly,
17.19607 +# and sets the high bit in the cache file unless we assign to the vars.
17.19608 +{
17.19609 +  (set) 2>&1 |
17.19610 +    case `(ac_space=' '; set | grep ac_space) 2>&1` in
17.19611 +    *ac_space=\ *)
17.19612 +      # `set' does not quote correctly, so add quotes (double-quote
17.19613 +      # substitution turns \\\\ into \\, and sed turns \\ into \).
17.19614 +      sed -n \
17.19615 +	"s/'/'\\\\''/g;
17.19616 +	  s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p"
17.19617 +      ;;
17.19618 +    *)
17.19619 +      # `set' quotes correctly as required by POSIX, so do not add quotes.
17.19620 +      sed -n \
17.19621 +	"s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1=\\2/p"
17.19622 +      ;;
17.19623 +    esac;
17.19624 +} |
17.19625 +  sed '
17.19626 +     t clear
17.19627 +     : clear
17.19628 +     s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/
17.19629 +     t end
17.19630 +     /^ac_cv_env/!s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/
17.19631 +     : end' >>confcache
17.19632 +if diff $cache_file confcache >/dev/null 2>&1; then :; else
17.19633 +  if test -w $cache_file; then
17.19634 +    test "x$cache_file" != "x/dev/null" && echo "updating cache $cache_file"
17.19635 +    cat confcache >$cache_file
17.19636 +  else
17.19637 +    echo "not updating unwritable cache $cache_file"
17.19638 +  fi
17.19639 +fi
17.19640 +rm -f confcache
17.19641 +
17.19642 +test "x$prefix" = xNONE && prefix=$ac_default_prefix
17.19643 +# Let make expand exec_prefix.
17.19644 +test "x$exec_prefix" = xNONE && exec_prefix='${prefix}'
17.19645 +
17.19646 +# VPATH may cause trouble with some makes, so we remove $(srcdir),
17.19647 +# ${srcdir} and @srcdir@ from VPATH if srcdir is ".", strip leading and
17.19648 +# trailing colons and then remove the whole line if VPATH becomes empty
17.19649 +# (actually we leave an empty line to preserve line numbers).
17.19650 +if test "x$srcdir" = x.; then
17.19651 +  ac_vpsub='/^[	 ]*VPATH[	 ]*=/{
17.19652 +s/:*\$(srcdir):*/:/;
17.19653 +s/:*\${srcdir}:*/:/;
17.19654 +s/:*@srcdir@:*/:/;
17.19655 +s/^\([^=]*=[	 ]*\):*/\1/;
17.19656 +s/:*$//;
17.19657 +s/^[^=]*=[	 ]*$//;
17.19658 +}'
17.19659 +fi
17.19660 +
17.19661 +DEFS=-DHAVE_CONFIG_H
17.19662 +
17.19663 +ac_libobjs=
17.19664 +ac_ltlibobjs=
17.19665 +for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue
17.19666 +  # 1. Remove the extension, and $U if already installed.
17.19667 +  ac_i=`echo "$ac_i" |
17.19668 +	 sed 's/\$U\././;s/\.o$//;s/\.obj$//'`
17.19669 +  # 2. Add them.
17.19670 +  ac_libobjs="$ac_libobjs $ac_i\$U.$ac_objext"
17.19671 +  ac_ltlibobjs="$ac_ltlibobjs $ac_i"'$U.lo'
17.19672 +done
17.19673 +LIBOBJS=$ac_libobjs
17.19674 +
17.19675 +LTLIBOBJS=$ac_ltlibobjs
17.19676 +
17.19677 +
17.19678 +if test -z "${MAINTAINER_MODE_TRUE}" && test -z "${MAINTAINER_MODE_FALSE}"; then
17.19679 +  { { echo "$as_me:$LINENO: error: conditional \"MAINTAINER_MODE\" was never defined.
17.19680 +Usually this means the macro was only invoked conditionally." >&5
17.19681 +echo "$as_me: error: conditional \"MAINTAINER_MODE\" was never defined.
17.19682 +Usually this means the macro was only invoked conditionally." >&2;}
17.19683 +   { (exit 1); exit 1; }; }
17.19684 +fi
17.19685 +if test -z "${AMDEP_TRUE}" && test -z "${AMDEP_FALSE}"; then
17.19686 +  { { echo "$as_me:$LINENO: error: conditional \"AMDEP\" was never defined.
17.19687 +Usually this means the macro was only invoked conditionally." >&5
17.19688 +echo "$as_me: error: conditional \"AMDEP\" was never defined.
17.19689 +Usually this means the macro was only invoked conditionally." >&2;}
17.19690 +   { (exit 1); exit 1; }; }
17.19691 +fi
17.19692 +if test -z "${am__fastdepCC_TRUE}" && test -z "${am__fastdepCC_FALSE}"; then
17.19693 +  { { echo "$as_me:$LINENO: error: conditional \"am__fastdepCC\" was never defined.
17.19694 +Usually this means the macro was only invoked conditionally." >&5
17.19695 +echo "$as_me: error: conditional \"am__fastdepCC\" was never defined.
17.19696 +Usually this means the macro was only invoked conditionally." >&2;}
17.19697 +   { (exit 1); exit 1; }; }
17.19698 +fi
17.19699 +if test -z "${am__fastdepCXX_TRUE}" && test -z "${am__fastdepCXX_FALSE}"; then
17.19700 +  { { echo "$as_me:$LINENO: error: conditional \"am__fastdepCXX\" was never defined.
17.19701 +Usually this means the macro was only invoked conditionally." >&5
17.19702 +echo "$as_me: error: conditional \"am__fastdepCXX\" was never defined.
17.19703 +Usually this means the macro was only invoked conditionally." >&2;}
17.19704 +   { (exit 1); exit 1; }; }
17.19705 +fi
17.19706 +
17.19707 +: ${CONFIG_STATUS=./config.status}
17.19708 +ac_clean_files_save=$ac_clean_files
17.19709 +ac_clean_files="$ac_clean_files $CONFIG_STATUS"
17.19710 +{ echo "$as_me:$LINENO: creating $CONFIG_STATUS" >&5
17.19711 +echo "$as_me: creating $CONFIG_STATUS" >&6;}
17.19712 +cat >$CONFIG_STATUS <<_ACEOF
17.19713 +#! $SHELL
17.19714 +# Generated by $as_me.
17.19715 +# Run this file to recreate the current configuration.
17.19716 +# Compiler output produced by configure, useful for debugging
17.19717 +# configure, is in config.log if it exists.
17.19718 +
17.19719 +debug=false
17.19720 +ac_cs_recheck=false
17.19721 +ac_cs_silent=false
17.19722 +SHELL=\${CONFIG_SHELL-$SHELL}
17.19723 +_ACEOF
17.19724 +
17.19725 +cat >>$CONFIG_STATUS <<\_ACEOF
17.19726 +## --------------------- ##
17.19727 +## M4sh Initialization.  ##
17.19728 +## --------------------- ##
17.19729 +
17.19730 +# Be Bourne compatible
17.19731 +if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then
17.19732 +  emulate sh
17.19733 +  NULLCMD=:
17.19734 +  # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which
17.19735 +  # is contrary to our usage.  Disable this feature.
17.19736 +  alias -g '${1+"$@"}'='"$@"'
17.19737 +elif test -n "${BASH_VERSION+set}" && (set -o posix) >/dev/null 2>&1; then
17.19738 +  set -o posix
17.19739 +fi
17.19740 +DUALCASE=1; export DUALCASE # for MKS sh
17.19741 +
17.19742 +# Support unset when possible.
17.19743 +if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then
17.19744 +  as_unset=unset
17.19745 +else
17.19746 +  as_unset=false
17.19747 +fi
17.19748 +
17.19749 +
17.19750 +# Work around bugs in pre-3.0 UWIN ksh.
17.19751 +$as_unset ENV MAIL MAILPATH
17.19752 +PS1='$ '
17.19753 +PS2='> '
17.19754 +PS4='+ '
17.19755 +
17.19756 +# NLS nuisances.
17.19757 +for as_var in \
17.19758 +  LANG LANGUAGE LC_ADDRESS LC_ALL LC_COLLATE LC_CTYPE LC_IDENTIFICATION \
17.19759 +  LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER \
17.19760 +  LC_TELEPHONE LC_TIME
17.19761 +do
17.19762 +  if (set +x; test -z "`(eval $as_var=C; export $as_var) 2>&1`"); then
17.19763 +    eval $as_var=C; export $as_var
17.19764 +  else
17.19765 +    $as_unset $as_var
17.19766 +  fi
17.19767 +done
17.19768 +
17.19769 +# Required to use basename.
17.19770 +if expr a : '\(a\)' >/dev/null 2>&1; then
17.19771 +  as_expr=expr
17.19772 +else
17.19773 +  as_expr=false
17.19774 +fi
17.19775 +
17.19776 +if (basename /) >/dev/null 2>&1 && test "X`basename / 2>&1`" = "X/"; then
17.19777 +  as_basename=basename
17.19778 +else
17.19779 +  as_basename=false
17.19780 +fi
17.19781 +
17.19782 +
17.19783 +# Name of the executable.
17.19784 +as_me=`$as_basename "$0" ||
17.19785 +$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \
17.19786 +	 X"$0" : 'X\(//\)$' \| \
17.19787 +	 X"$0" : 'X\(/\)$' \| \
17.19788 +	 .     : '\(.\)' 2>/dev/null ||
17.19789 +echo X/"$0" |
17.19790 +    sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/; q; }
17.19791 +  	  /^X\/\(\/\/\)$/{ s//\1/; q; }
17.19792 +  	  /^X\/\(\/\).*/{ s//\1/; q; }
17.19793 +  	  s/.*/./; q'`
17.19794 +
17.19795 +
17.19796 +# PATH needs CR, and LINENO needs CR and PATH.
17.19797 +# Avoid depending upon Character Ranges.
17.19798 +as_cr_letters='abcdefghijklmnopqrstuvwxyz'
17.19799 +as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ'
17.19800 +as_cr_Letters=$as_cr_letters$as_cr_LETTERS
17.19801 +as_cr_digits='0123456789'
17.19802 +as_cr_alnum=$as_cr_Letters$as_cr_digits
17.19803 +
17.19804 +# The user is always right.
17.19805 +if test "${PATH_SEPARATOR+set}" != set; then
17.19806 +  echo "#! /bin/sh" >conf$$.sh
17.19807 +  echo  "exit 0"   >>conf$$.sh
17.19808 +  chmod +x conf$$.sh
17.19809 +  if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then
17.19810 +    PATH_SEPARATOR=';'
17.19811 +  else
17.19812 +    PATH_SEPARATOR=:
17.19813 +  fi
17.19814 +  rm -f conf$$.sh
17.19815 +fi
17.19816 +
17.19817 +
17.19818 +  as_lineno_1=$LINENO
17.19819 +  as_lineno_2=$LINENO
17.19820 +  as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null`
17.19821 +  test "x$as_lineno_1" != "x$as_lineno_2" &&
17.19822 +  test "x$as_lineno_3"  = "x$as_lineno_2"  || {
17.19823 +  # Find who we are.  Look in the path if we contain no path at all
17.19824 +  # relative or not.
17.19825 +  case $0 in
17.19826 +    *[\\/]* ) as_myself=$0 ;;
17.19827 +    *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
17.19828 +for as_dir in $PATH
17.19829 +do
17.19830 +  IFS=$as_save_IFS
17.19831 +  test -z "$as_dir" && as_dir=.
17.19832 +  test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break
17.19833 +done
17.19834 +
17.19835 +       ;;
17.19836 +  esac
17.19837 +  # We did not find ourselves, most probably we were run as `sh COMMAND'
17.19838 +  # in which case we are not to be found in the path.
17.19839 +  if test "x$as_myself" = x; then
17.19840 +    as_myself=$0
17.19841 +  fi
17.19842 +  if test ! -f "$as_myself"; then
17.19843 +    { { echo "$as_me:$LINENO: error: cannot find myself; rerun with an absolute path" >&5
17.19844 +echo "$as_me: error: cannot find myself; rerun with an absolute path" >&2;}
17.19845 +   { (exit 1); exit 1; }; }
17.19846 +  fi
17.19847 +  case $CONFIG_SHELL in
17.19848 +  '')
17.19849 +    as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
17.19850 +for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH
17.19851 +do
17.19852 +  IFS=$as_save_IFS
17.19853 +  test -z "$as_dir" && as_dir=.
17.19854 +  for as_base in sh bash ksh sh5; do
17.19855 +	 case $as_dir in
17.19856 +	 /*)
17.19857 +	   if ("$as_dir/$as_base" -c '
17.19858 +  as_lineno_1=$LINENO
17.19859 +  as_lineno_2=$LINENO
17.19860 +  as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null`
17.19861 +  test "x$as_lineno_1" != "x$as_lineno_2" &&
17.19862 +  test "x$as_lineno_3"  = "x$as_lineno_2" ') 2>/dev/null; then
17.19863 +	     $as_unset BASH_ENV || test "${BASH_ENV+set}" != set || { BASH_ENV=; export BASH_ENV; }
17.19864 +	     $as_unset ENV || test "${ENV+set}" != set || { ENV=; export ENV; }
17.19865 +	     CONFIG_SHELL=$as_dir/$as_base
17.19866 +	     export CONFIG_SHELL
17.19867 +	     exec "$CONFIG_SHELL" "$0" ${1+"$@"}
17.19868 +	   fi;;
17.19869 +	 esac
17.19870 +       done
17.19871 +done
17.19872 +;;
17.19873 +  esac
17.19874 +
17.19875 +  # Create $as_me.lineno as a copy of $as_myself, but with $LINENO
17.19876 +  # uniformly replaced by the line number.  The first 'sed' inserts a
17.19877 +  # line-number line before each line; the second 'sed' does the real
17.19878 +  # work.  The second script uses 'N' to pair each line-number line
17.19879 +  # with the numbered line, and appends trailing '-' during
17.19880 +  # substitution so that $LINENO is not a special case at line end.
17.19881 +  # (Raja R Harinath suggested sed '=', and Paul Eggert wrote the
17.19882 +  # second 'sed' script.  Blame Lee E. McMahon for sed's syntax.  :-)
17.19883 +  sed '=' <$as_myself |
17.19884 +    sed '
17.19885 +      N
17.19886 +      s,$,-,
17.19887 +      : loop
17.19888 +      s,^\(['$as_cr_digits']*\)\(.*\)[$]LINENO\([^'$as_cr_alnum'_]\),\1\2\1\3,
17.19889 +      t loop
17.19890 +      s,-$,,
17.19891 +      s,^['$as_cr_digits']*\n,,
17.19892 +    ' >$as_me.lineno &&
17.19893 +  chmod +x $as_me.lineno ||
17.19894 +    { { echo "$as_me:$LINENO: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&5
17.19895 +echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2;}
17.19896 +   { (exit 1); exit 1; }; }
17.19897 +
17.19898 +  # Don't try to exec as it changes $[0], causing all sort of problems
17.19899 +  # (the dirname of $[0] is not the place where we might find the
17.19900 +  # original and so on.  Autoconf is especially sensible to this).
17.19901 +  . ./$as_me.lineno
17.19902 +  # Exit status is that of the last command.
17.19903 +  exit
17.19904 +}
17.19905 +
17.19906 +
17.19907 +case `echo "testing\c"; echo 1,2,3`,`echo -n testing; echo 1,2,3` in
17.19908 +  *c*,-n*) ECHO_N= ECHO_C='
17.19909 +' ECHO_T='	' ;;
17.19910 +  *c*,*  ) ECHO_N=-n ECHO_C= ECHO_T= ;;
17.19911 +  *)       ECHO_N= ECHO_C='\c' ECHO_T= ;;
17.19912 +esac
17.19913 +
17.19914 +if expr a : '\(a\)' >/dev/null 2>&1; then
17.19915 +  as_expr=expr
17.19916 +else
17.19917 +  as_expr=false
17.19918 +fi
17.19919 +
17.19920 +rm -f conf$$ conf$$.exe conf$$.file
17.19921 +echo >conf$$.file
17.19922 +if ln -s conf$$.file conf$$ 2>/dev/null; then
17.19923 +  # We could just check for DJGPP; but this test a) works b) is more generic
17.19924 +  # and c) will remain valid once DJGPP supports symlinks (DJGPP 2.04).
17.19925 +  if test -f conf$$.exe; then
17.19926 +    # Don't use ln at all; we don't have any links
17.19927 +    as_ln_s='cp -p'
17.19928 +  else
17.19929 +    as_ln_s='ln -s'
17.19930 +  fi
17.19931 +elif ln conf$$.file conf$$ 2>/dev/null; then
17.19932 +  as_ln_s=ln
17.19933 +else
17.19934 +  as_ln_s='cp -p'
17.19935 +fi
17.19936 +rm -f conf$$ conf$$.exe conf$$.file
17.19937 +
17.19938 +if mkdir -p . 2>/dev/null; then
17.19939 +  as_mkdir_p=:
17.19940 +else
17.19941 +  test -d ./-p && rmdir ./-p
17.19942 +  as_mkdir_p=false
17.19943 +fi
17.19944 +
17.19945 +as_executable_p="test -f"
17.19946 +
17.19947 +# Sed expression to map a string onto a valid CPP name.
17.19948 +as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'"
17.19949 +
17.19950 +# Sed expression to map a string onto a valid variable name.
17.19951 +as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'"
17.19952 +
17.19953 +
17.19954 +# IFS
17.19955 +# We need space, tab and new line, in precisely that order.
17.19956 +as_nl='
17.19957 +'
17.19958 +IFS=" 	$as_nl"
17.19959 +
17.19960 +# CDPATH.
17.19961 +$as_unset CDPATH
17.19962 +
17.19963 +exec 6>&1
17.19964 +
17.19965 +# Open the log real soon, to keep \$[0] and so on meaningful, and to
17.19966 +# report actual input values of CONFIG_FILES etc. instead of their
17.19967 +# values after options handling.  Logging --version etc. is OK.
17.19968 +exec 5>>config.log
17.19969 +{
17.19970 +  echo
17.19971 +  sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX
17.19972 +## Running $as_me. ##
17.19973 +_ASBOX
17.19974 +} >&5
17.19975 +cat >&5 <<_CSEOF
17.19976 +
17.19977 +This file was extended by gift-gnutella $as_me 0.0.11, which was
17.19978 +generated by GNU Autoconf 2.59.  Invocation command line was
17.19979 +
17.19980 +  CONFIG_FILES    = $CONFIG_FILES
17.19981 +  CONFIG_HEADERS  = $CONFIG_HEADERS
17.19982 +  CONFIG_LINKS    = $CONFIG_LINKS
17.19983 +  CONFIG_COMMANDS = $CONFIG_COMMANDS
17.19984 +  $ $0 $@
17.19985 +
17.19986 +_CSEOF
17.19987 +echo "on `(hostname || uname -n) 2>/dev/null | sed 1q`" >&5
17.19988 +echo >&5
17.19989 +_ACEOF
17.19990 +
17.19991 +# Files that config.status was made for.
17.19992 +if test -n "$ac_config_files"; then
17.19993 +  echo "config_files=\"$ac_config_files\"" >>$CONFIG_STATUS
17.19994 +fi
17.19995 +
17.19996 +if test -n "$ac_config_headers"; then
17.19997 +  echo "config_headers=\"$ac_config_headers\"" >>$CONFIG_STATUS
17.19998 +fi
17.19999 +
17.20000 +if test -n "$ac_config_links"; then
17.20001 +  echo "config_links=\"$ac_config_links\"" >>$CONFIG_STATUS
17.20002 +fi
17.20003 +
17.20004 +if test -n "$ac_config_commands"; then
17.20005 +  echo "config_commands=\"$ac_config_commands\"" >>$CONFIG_STATUS
17.20006 +fi
17.20007 +
17.20008 +cat >>$CONFIG_STATUS <<\_ACEOF
17.20009 +
17.20010 +ac_cs_usage="\
17.20011 +\`$as_me' instantiates files from templates according to the
17.20012 +current configuration.
17.20013 +
17.20014 +Usage: $0 [OPTIONS] [FILE]...
17.20015 +
17.20016 +  -h, --help       print this help, then exit
17.20017 +  -V, --version    print version number, then exit
17.20018 +  -q, --quiet      do not print progress messages
17.20019 +  -d, --debug      don't remove temporary files
17.20020 +      --recheck    update $as_me by reconfiguring in the same conditions
17.20021 +  --file=FILE[:TEMPLATE]
17.20022 +		   instantiate the configuration file FILE
17.20023 +  --header=FILE[:TEMPLATE]
17.20024 +		   instantiate the configuration header FILE
17.20025 +
17.20026 +Configuration files:
17.20027 +$config_files
17.20028 +
17.20029 +Configuration headers:
17.20030 +$config_headers
17.20031 +
17.20032 +Configuration commands:
17.20033 +$config_commands
17.20034 +
17.20035 +Report bugs to <bug-autoconf@gnu.org>."
17.20036 +_ACEOF
17.20037 +
17.20038 +cat >>$CONFIG_STATUS <<_ACEOF
17.20039 +ac_cs_version="\\
17.20040 +gift-gnutella config.status 0.0.11
17.20041 +configured by $0, generated by GNU Autoconf 2.59,
17.20042 +  with options \\"`echo "$ac_configure_args" | sed 's/[\\""\`\$]/\\\\&/g'`\\"
17.20043 +
17.20044 +Copyright (C) 2003 Free Software Foundation, Inc.
17.20045 +This config.status script is free software; the Free Software Foundation
17.20046 +gives unlimited permission to copy, distribute and modify it."
17.20047 +srcdir=$srcdir
17.20048 +INSTALL="$INSTALL"
17.20049 +_ACEOF
17.20050 +
17.20051 +cat >>$CONFIG_STATUS <<\_ACEOF
17.20052 +# If no file are specified by the user, then we need to provide default
17.20053 +# value.  By we need to know if files were specified by the user.
17.20054 +ac_need_defaults=:
17.20055 +while test $# != 0
17.20056 +do
17.20057 +  case $1 in
17.20058 +  --*=*)
17.20059 +    ac_option=`expr "x$1" : 'x\([^=]*\)='`
17.20060 +    ac_optarg=`expr "x$1" : 'x[^=]*=\(.*\)'`
17.20061 +    ac_shift=:
17.20062 +    ;;
17.20063 +  -*)
17.20064 +    ac_option=$1
17.20065 +    ac_optarg=$2
17.20066 +    ac_shift=shift
17.20067 +    ;;
17.20068 +  *) # This is not an option, so the user has probably given explicit
17.20069 +     # arguments.
17.20070 +     ac_option=$1
17.20071 +     ac_need_defaults=false;;
17.20072 +  esac
17.20073 +
17.20074 +  case $ac_option in
17.20075 +  # Handling of the options.
17.20076 +_ACEOF
17.20077 +cat >>$CONFIG_STATUS <<\_ACEOF
17.20078 +  -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r)
17.20079 +    ac_cs_recheck=: ;;
17.20080 +  --version | --vers* | -V )
17.20081 +    echo "$ac_cs_version"; exit 0 ;;
17.20082 +  --he | --h)
17.20083 +    # Conflict between --help and --header
17.20084 +    { { echo "$as_me:$LINENO: error: ambiguous option: $1
17.20085 +Try \`$0 --help' for more information." >&5
17.20086 +echo "$as_me: error: ambiguous option: $1
17.20087 +Try \`$0 --help' for more information." >&2;}
17.20088 +   { (exit 1); exit 1; }; };;
17.20089 +  --help | --hel | -h )
17.20090 +    echo "$ac_cs_usage"; exit 0 ;;
17.20091 +  --debug | --d* | -d )
17.20092 +    debug=: ;;
17.20093 +  --file | --fil | --fi | --f )
17.20094 +    $ac_shift
17.20095 +    CONFIG_FILES="$CONFIG_FILES $ac_optarg"
17.20096 +    ac_need_defaults=false;;
17.20097 +  --header | --heade | --head | --hea )
17.20098 +    $ac_shift
17.20099 +    CONFIG_HEADERS="$CONFIG_HEADERS $ac_optarg"
17.20100 +    ac_need_defaults=false;;
17.20101 +  -q | -quiet | --quiet | --quie | --qui | --qu | --q \
17.20102 +  | -silent | --silent | --silen | --sile | --sil | --si | --s)
17.20103 +    ac_cs_silent=: ;;
17.20104 +
17.20105 +  # This is an error.
17.20106 +  -*) { { echo "$as_me:$LINENO: error: unrecognized option: $1
17.20107 +Try \`$0 --help' for more information." >&5
17.20108 +echo "$as_me: error: unrecognized option: $1
17.20109 +Try \`$0 --help' for more information." >&2;}
17.20110 +   { (exit 1); exit 1; }; } ;;
17.20111 +
17.20112 +  *) ac_config_targets="$ac_config_targets $1" ;;
17.20113 +
17.20114 +  esac
17.20115 +  shift
17.20116 +done
17.20117 +
17.20118 +ac_configure_extra_args=
17.20119 +
17.20120 +if $ac_cs_silent; then
17.20121 +  exec 6>/dev/null
17.20122 +  ac_configure_extra_args="$ac_configure_extra_args --silent"
17.20123 +fi
17.20124 +
17.20125 +_ACEOF
17.20126 +cat >>$CONFIG_STATUS <<_ACEOF
17.20127 +if \$ac_cs_recheck; then
17.20128 +  echo "running $SHELL $0 " $ac_configure_args \$ac_configure_extra_args " --no-create --no-recursion" >&6
17.20129 +  exec $SHELL $0 $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion
17.20130 +fi
17.20131 +
17.20132 +_ACEOF
17.20133 +
17.20134 +cat >>$CONFIG_STATUS <<_ACEOF
17.20135 +#
17.20136 +# INIT-COMMANDS section.
17.20137 +#
17.20138 +
17.20139 +AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir"
17.20140 +
17.20141 +_ACEOF
17.20142 +
17.20143 +
17.20144 +
17.20145 +cat >>$CONFIG_STATUS <<\_ACEOF
17.20146 +for ac_config_target in $ac_config_targets
17.20147 +do
17.20148 +  case "$ac_config_target" in
17.20149 +  # Handling of arguments.
17.20150 +  "Makefile" ) CONFIG_FILES="$CONFIG_FILES Makefile" ;;
17.20151 +  "m4/Makefile" ) CONFIG_FILES="$CONFIG_FILES m4/Makefile" ;;
17.20152 +  "src/Makefile" ) CONFIG_FILES="$CONFIG_FILES src/Makefile" ;;
17.20153 +  "src/encoding/Makefile" ) CONFIG_FILES="$CONFIG_FILES src/encoding/Makefile" ;;
17.20154 +  "src/io/Makefile" ) CONFIG_FILES="$CONFIG_FILES src/io/Makefile" ;;
17.20155 +  "src/message/Makefile" ) CONFIG_FILES="$CONFIG_FILES src/message/Makefile" ;;
17.20156 +  "src/transfer/Makefile" ) CONFIG_FILES="$CONFIG_FILES src/transfer/Makefile" ;;
17.20157 +  "data/Makefile" ) CONFIG_FILES="$CONFIG_FILES data/Makefile" ;;
17.20158 +  "gnutella.spec" ) CONFIG_FILES="$CONFIG_FILES gnutella.spec" ;;
17.20159 +  "depfiles" ) CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;;
17.20160 +  "config.h" ) CONFIG_HEADERS="$CONFIG_HEADERS config.h" ;;
17.20161 +  *) { { echo "$as_me:$LINENO: error: invalid argument: $ac_config_target" >&5
17.20162 +echo "$as_me: error: invalid argument: $ac_config_target" >&2;}
17.20163 +   { (exit 1); exit 1; }; };;
17.20164 +  esac
17.20165 +done
17.20166 +
17.20167 +# If the user did not use the arguments to specify the items to instantiate,
17.20168 +# then the envvar interface is used.  Set only those that are not.
17.20169 +# We use the long form for the default assignment because of an extremely
17.20170 +# bizarre bug on SunOS 4.1.3.
17.20171 +if $ac_need_defaults; then
17.20172 +  test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files
17.20173 +  test "${CONFIG_HEADERS+set}" = set || CONFIG_HEADERS=$config_headers
17.20174 +  test "${CONFIG_COMMANDS+set}" = set || CONFIG_COMMANDS=$config_commands
17.20175 +fi
17.20176 +
17.20177 +# Have a temporary directory for convenience.  Make it in the build tree
17.20178 +# simply because there is no reason to put it here, and in addition,
17.20179 +# creating and moving files from /tmp can sometimes cause problems.
17.20180 +# Create a temporary directory, and hook for its removal unless debugging.
17.20181 +$debug ||
17.20182 +{
17.20183 +  trap 'exit_status=$?; rm -rf $tmp && exit $exit_status' 0
17.20184 +  trap '{ (exit 1); exit 1; }' 1 2 13 15
17.20185 +}
17.20186 +
17.20187 +# Create a (secure) tmp directory for tmp files.
17.20188 +
17.20189 +{
17.20190 +  tmp=`(umask 077 && mktemp -d -q "./confstatXXXXXX") 2>/dev/null` &&
17.20191 +  test -n "$tmp" && test -d "$tmp"
17.20192 +}  ||
17.20193 +{
17.20194 +  tmp=./confstat$$-$RANDOM
17.20195 +  (umask 077 && mkdir $tmp)
17.20196 +} ||
17.20197 +{
17.20198 +   echo "$me: cannot create a temporary directory in ." >&2
17.20199 +   { (exit 1); exit 1; }
17.20200 +}
17.20201 +
17.20202 +_ACEOF
17.20203 +
17.20204 +cat >>$CONFIG_STATUS <<_ACEOF
17.20205 +
17.20206 +#
17.20207 +# CONFIG_FILES section.
17.20208 +#
17.20209 +
17.20210 +# No need to generate the scripts if there are no CONFIG_FILES.
17.20211 +# This happens for instance when ./config.status config.h
17.20212 +if test -n "\$CONFIG_FILES"; then
17.20213 +  # Protect against being on the right side of a sed subst in config.status.
17.20214 +  sed 's/,@/@@/; s/@,/@@/; s/,;t t\$/@;t t/; /@;t t\$/s/[\\\\&,]/\\\\&/g;
17.20215 +   s/@@/,@/; s/@@/@,/; s/@;t t\$/,;t t/' >\$tmp/subs.sed <<\\CEOF
17.20216 +s,@SHELL@,$SHELL,;t t
17.20217 +s,@PATH_SEPARATOR@,$PATH_SEPARATOR,;t t
17.20218 +s,@PACKAGE_NAME@,$PACKAGE_NAME,;t t
17.20219 +s,@PACKAGE_TARNAME@,$PACKAGE_TARNAME,;t t
17.20220 +s,@PACKAGE_VERSION@,$PACKAGE_VERSION,;t t
17.20221 +s,@PACKAGE_STRING@,$PACKAGE_STRING,;t t
17.20222 +s,@PACKAGE_BUGREPORT@,$PACKAGE_BUGREPORT,;t t
17.20223 +s,@exec_prefix@,$exec_prefix,;t t
17.20224 +s,@prefix@,$prefix,;t t
17.20225 +s,@program_transform_name@,$program_transform_name,;t t
17.20226 +s,@bindir@,$bindir,;t t
17.20227 +s,@sbindir@,$sbindir,;t t
17.20228 +s,@libexecdir@,$libexecdir,;t t
17.20229 +s,@datadir@,$datadir,;t t
17.20230 +s,@sysconfdir@,$sysconfdir,;t t
17.20231 +s,@sharedstatedir@,$sharedstatedir,;t t
17.20232 +s,@localstatedir@,$localstatedir,;t t
17.20233 +s,@libdir@,$libdir,;t t
17.20234 +s,@includedir@,$includedir,;t t
17.20235 +s,@oldincludedir@,$oldincludedir,;t t
17.20236 +s,@infodir@,$infodir,;t t
17.20237 +s,@mandir@,$mandir,;t t
17.20238 +s,@build_alias@,$build_alias,;t t
17.20239 +s,@host_alias@,$host_alias,;t t
17.20240 +s,@target_alias@,$target_alias,;t t
17.20241 +s,@DEFS@,$DEFS,;t t
17.20242 +s,@ECHO_C@,$ECHO_C,;t t
17.20243 +s,@ECHO_N@,$ECHO_N,;t t
17.20244 +s,@ECHO_T@,$ECHO_T,;t t
17.20245 +s,@LIBS@,$LIBS,;t t
17.20246 +s,@INSTALL_PROGRAM@,$INSTALL_PROGRAM,;t t
17.20247 +s,@INSTALL_SCRIPT@,$INSTALL_SCRIPT,;t t
17.20248 +s,@INSTALL_DATA@,$INSTALL_DATA,;t t
17.20249 +s,@CYGPATH_W@,$CYGPATH_W,;t t
17.20250 +s,@PACKAGE@,$PACKAGE,;t t
17.20251 +s,@VERSION@,$VERSION,;t t
17.20252 +s,@ACLOCAL@,$ACLOCAL,;t t
17.20253 +s,@AUTOCONF@,$AUTOCONF,;t t
17.20254 +s,@AUTOMAKE@,$AUTOMAKE,;t t
17.20255 +s,@AUTOHEADER@,$AUTOHEADER,;t t
17.20256 +s,@MAKEINFO@,$MAKEINFO,;t t
17.20257 +s,@AMTAR@,$AMTAR,;t t
17.20258 +s,@install_sh@,$install_sh,;t t
17.20259 +s,@STRIP@,$STRIP,;t t
17.20260 +s,@ac_ct_STRIP@,$ac_ct_STRIP,;t t
17.20261 +s,@INSTALL_STRIP_PROGRAM@,$INSTALL_STRIP_PROGRAM,;t t
17.20262 +s,@AWK@,$AWK,;t t
17.20263 +s,@SET_MAKE@,$SET_MAKE,;t t
17.20264 +s,@am__leading_dot@,$am__leading_dot,;t t
17.20265 +s,@MAINTAINER_MODE_TRUE@,$MAINTAINER_MODE_TRUE,;t t
17.20266 +s,@MAINTAINER_MODE_FALSE@,$MAINTAINER_MODE_FALSE,;t t
17.20267 +s,@MAINT@,$MAINT,;t t
17.20268 +s,@CC@,$CC,;t t
17.20269 +s,@CFLAGS@,$CFLAGS,;t t
17.20270 +s,@LDFLAGS@,$LDFLAGS,;t t
17.20271 +s,@CPPFLAGS@,$CPPFLAGS,;t t
17.20272 +s,@ac_ct_CC@,$ac_ct_CC,;t t
17.20273 +s,@EXEEXT@,$EXEEXT,;t t
17.20274 +s,@OBJEXT@,$OBJEXT,;t t
17.20275 +s,@DEPDIR@,$DEPDIR,;t t
17.20276 +s,@am__include@,$am__include,;t t
17.20277 +s,@am__quote@,$am__quote,;t t
17.20278 +s,@AMDEP_TRUE@,$AMDEP_TRUE,;t t
17.20279 +s,@AMDEP_FALSE@,$AMDEP_FALSE,;t t
17.20280 +s,@AMDEPBACKSLASH@,$AMDEPBACKSLASH,;t t
17.20281 +s,@CCDEPMODE@,$CCDEPMODE,;t t
17.20282 +s,@am__fastdepCC_TRUE@,$am__fastdepCC_TRUE,;t t
17.20283 +s,@am__fastdepCC_FALSE@,$am__fastdepCC_FALSE,;t t
17.20284 +s,@CPP@,$CPP,;t t
17.20285 +s,@EGREP@,$EGREP,;t t
17.20286 +s,@build@,$build,;t t
17.20287 +s,@build_cpu@,$build_cpu,;t t
17.20288 +s,@build_vendor@,$build_vendor,;t t
17.20289 +s,@build_os@,$build_os,;t t
17.20290 +s,@host@,$host,;t t
17.20291 +s,@host_cpu@,$host_cpu,;t t
17.20292 +s,@host_vendor@,$host_vendor,;t t
17.20293 +s,@host_os@,$host_os,;t t
17.20294 +s,@LN_S@,$LN_S,;t t
17.20295 +s,@ECHO@,$ECHO,;t t
17.20296 +s,@AR@,$AR,;t t
17.20297 +s,@ac_ct_AR@,$ac_ct_AR,;t t
17.20298 +s,@RANLIB@,$RANLIB,;t t
17.20299 +s,@ac_ct_RANLIB@,$ac_ct_RANLIB,;t t
17.20300 +s,@CXX@,$CXX,;t t
17.20301 +s,@CXXFLAGS@,$CXXFLAGS,;t t
17.20302 +s,@ac_ct_CXX@,$ac_ct_CXX,;t t
17.20303 +s,@CXXDEPMODE@,$CXXDEPMODE,;t t
17.20304 +s,@am__fastdepCXX_TRUE@,$am__fastdepCXX_TRUE,;t t
17.20305 +s,@am__fastdepCXX_FALSE@,$am__fastdepCXX_FALSE,;t t
17.20306 +s,@CXXCPP@,$CXXCPP,;t t
17.20307 +s,@F77@,$F77,;t t
17.20308 +s,@FFLAGS@,$FFLAGS,;t t
17.20309 +s,@ac_ct_F77@,$ac_ct_F77,;t t
17.20310 +s,@LIBTOOL@,$LIBTOOL,;t t
17.20311 +s,@PLUGIN_LDFLAGS@,$PLUGIN_LDFLAGS,;t t
17.20312 +s,@PKG_CONFIG@,$PKG_CONFIG,;t t
17.20313 +s,@GNUTELLA_CFLAGS@,$GNUTELLA_CFLAGS,;t t
17.20314 +s,@GNUTELLA_LIBS@,$GNUTELLA_LIBS,;t t
17.20315 +s,@USE_ZLIB@,$USE_ZLIB,;t t
17.20316 +s,@XML2_CONFIG@,$XML2_CONFIG,;t t
17.20317 +s,@LIBXML2_CFLAGS@,$LIBXML2_CFLAGS,;t t
17.20318 +s,@LIBXML2_LIBS@,$LIBXML2_LIBS,;t t
17.20319 +s,@LIBOBJS@,$LIBOBJS,;t t
17.20320 +s,@LTLIBOBJS@,$LTLIBOBJS,;t t
17.20321 +CEOF
17.20322 +
17.20323 +_ACEOF
17.20324 +
17.20325 +  cat >>$CONFIG_STATUS <<\_ACEOF
17.20326 +  # Split the substitutions into bite-sized pieces for seds with
17.20327 +  # small command number limits, like on Digital OSF/1 and HP-UX.
17.20328 +  ac_max_sed_lines=48
17.20329 +  ac_sed_frag=1 # Number of current file.
17.20330 +  ac_beg=1 # First line for current file.
17.20331 +  ac_end=$ac_max_sed_lines # Line after last line for current file.
17.20332 +  ac_more_lines=:
17.20333 +  ac_sed_cmds=
17.20334 +  while $ac_more_lines; do
17.20335 +    if test $ac_beg -gt 1; then
17.20336 +      sed "1,${ac_beg}d; ${ac_end}q" $tmp/subs.sed >$tmp/subs.frag
17.20337 +    else
17.20338 +      sed "${ac_end}q" $tmp/subs.sed >$tmp/subs.frag
17.20339 +    fi
17.20340 +    if test ! -s $tmp/subs.frag; then
17.20341 +      ac_more_lines=false
17.20342 +    else
17.20343 +      # The purpose of the label and of the branching condition is to
17.20344 +      # speed up the sed processing (if there are no `@' at all, there
17.20345 +      # is no need to browse any of the substitutions).
17.20346 +      # These are the two extra sed commands mentioned above.
17.20347 +      (echo ':t
17.20348 +  /@[a-zA-Z_][a-zA-Z_0-9]*@/!b' && cat $tmp/subs.frag) >$tmp/subs-$ac_sed_frag.sed
17.20349 +      if test -z "$ac_sed_cmds"; then
17.20350 +	ac_sed_cmds="sed -f $tmp/subs-$ac_sed_frag.sed"
17.20351 +      else
17.20352 +	ac_sed_cmds="$ac_sed_cmds | sed -f $tmp/subs-$ac_sed_frag.sed"
17.20353 +      fi
17.20354 +      ac_sed_frag=`expr $ac_sed_frag + 1`
17.20355 +      ac_beg=$ac_end
17.20356 +      ac_end=`expr $ac_end + $ac_max_sed_lines`
17.20357 +    fi
17.20358 +  done
17.20359 +  if test -z "$ac_sed_cmds"; then
17.20360 +    ac_sed_cmds=cat
17.20361 +  fi
17.20362 +fi # test -n "$CONFIG_FILES"
17.20363 +
17.20364 +_ACEOF
17.20365 +cat >>$CONFIG_STATUS <<\_ACEOF
17.20366 +for ac_file in : $CONFIG_FILES; do test "x$ac_file" = x: && continue
17.20367 +  # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in".
17.20368 +  case $ac_file in
17.20369 +  - | *:- | *:-:* ) # input from stdin
17.20370 +	cat >$tmp/stdin
17.20371 +	ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'`
17.20372 +	ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;;
17.20373 +  *:* ) ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'`
17.20374 +	ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;;
17.20375 +  * )   ac_file_in=$ac_file.in ;;
17.20376 +  esac
17.20377 +
17.20378 +  # Compute @srcdir@, @top_srcdir@, and @INSTALL@ for subdirectories.
17.20379 +  ac_dir=`(dirname "$ac_file") 2>/dev/null ||
17.20380 +$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
17.20381 +	 X"$ac_file" : 'X\(//\)[^/]' \| \
17.20382 +	 X"$ac_file" : 'X\(//\)$' \| \
17.20383 +	 X"$ac_file" : 'X\(/\)' \| \
17.20384 +	 .     : '\(.\)' 2>/dev/null ||
17.20385 +echo X"$ac_file" |
17.20386 +    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
17.20387 +  	  /^X\(\/\/\)[^/].*/{ s//\1/; q; }
17.20388 +  	  /^X\(\/\/\)$/{ s//\1/; q; }
17.20389 +  	  /^X\(\/\).*/{ s//\1/; q; }
17.20390 +  	  s/.*/./; q'`
17.20391 +  { if $as_mkdir_p; then
17.20392 +    mkdir -p "$ac_dir"
17.20393 +  else
17.20394 +    as_dir="$ac_dir"
17.20395 +    as_dirs=
17.20396 +    while test ! -d "$as_dir"; do
17.20397 +      as_dirs="$as_dir $as_dirs"
17.20398 +      as_dir=`(dirname "$as_dir") 2>/dev/null ||
17.20399 +$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
17.20400 +	 X"$as_dir" : 'X\(//\)[^/]' \| \
17.20401 +	 X"$as_dir" : 'X\(//\)$' \| \
17.20402 +	 X"$as_dir" : 'X\(/\)' \| \
17.20403 +	 .     : '\(.\)' 2>/dev/null ||
17.20404 +echo X"$as_dir" |
17.20405 +    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
17.20406 +  	  /^X\(\/\/\)[^/].*/{ s//\1/; q; }
17.20407 +  	  /^X\(\/\/\)$/{ s//\1/; q; }
17.20408 +  	  /^X\(\/\).*/{ s//\1/; q; }
17.20409 +  	  s/.*/./; q'`
17.20410 +    done
17.20411 +    test ! -n "$as_dirs" || mkdir $as_dirs
17.20412 +  fi || { { echo "$as_me:$LINENO: error: cannot create directory \"$ac_dir\"" >&5
17.20413 +echo "$as_me: error: cannot create directory \"$ac_dir\"" >&2;}
17.20414 +   { (exit 1); exit 1; }; }; }
17.20415 +
17.20416 +  ac_builddir=.
17.20417 +
17.20418 +if test "$ac_dir" != .; then
17.20419 +  ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'`
17.20420 +  # A "../" for each directory in $ac_dir_suffix.
17.20421 +  ac_top_builddir=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,../,g'`
17.20422 +else
17.20423 +  ac_dir_suffix= ac_top_builddir=
17.20424 +fi
17.20425 +
17.20426 +case $srcdir in
17.20427 +  .)  # No --srcdir option.  We are building in place.
17.20428 +    ac_srcdir=.
17.20429 +    if test -z "$ac_top_builddir"; then
17.20430 +       ac_top_srcdir=.
17.20431 +    else
17.20432 +       ac_top_srcdir=`echo $ac_top_builddir | sed 's,/$,,'`
17.20433 +    fi ;;
17.20434 +  [\\/]* | ?:[\\/]* )  # Absolute path.
17.20435 +    ac_srcdir=$srcdir$ac_dir_suffix;
17.20436 +    ac_top_srcdir=$srcdir ;;
17.20437 +  *) # Relative path.
17.20438 +    ac_srcdir=$ac_top_builddir$srcdir$ac_dir_suffix
17.20439 +    ac_top_srcdir=$ac_top_builddir$srcdir ;;
17.20440 +esac
17.20441 +
17.20442 +# Do not use `cd foo && pwd` to compute absolute paths, because
17.20443 +# the directories may not exist.
17.20444 +case `pwd` in
17.20445 +.) ac_abs_builddir="$ac_dir";;
17.20446 +*)
17.20447 +  case "$ac_dir" in
17.20448 +  .) ac_abs_builddir=`pwd`;;
17.20449 +  [\\/]* | ?:[\\/]* ) ac_abs_builddir="$ac_dir";;
17.20450 +  *) ac_abs_builddir=`pwd`/"$ac_dir";;
17.20451 +  esac;;
17.20452 +esac
17.20453 +case $ac_abs_builddir in
17.20454 +.) ac_abs_top_builddir=${ac_top_builddir}.;;
17.20455 +*)
17.20456 +  case ${ac_top_builddir}. in
17.20457 +  .) ac_abs_top_builddir=$ac_abs_builddir;;
17.20458 +  [\\/]* | ?:[\\/]* ) ac_abs_top_builddir=${ac_top_builddir}.;;
17.20459 +  *) ac_abs_top_builddir=$ac_abs_builddir/${ac_top_builddir}.;;
17.20460 +  esac;;
17.20461 +esac
17.20462 +case $ac_abs_builddir in
17.20463 +.) ac_abs_srcdir=$ac_srcdir;;
17.20464 +*)
17.20465 +  case $ac_srcdir in
17.20466 +  .) ac_abs_srcdir=$ac_abs_builddir;;
17.20467 +  [\\/]* | ?:[\\/]* ) ac_abs_srcdir=$ac_srcdir;;
17.20468 +  *) ac_abs_srcdir=$ac_abs_builddir/$ac_srcdir;;
17.20469 +  esac;;
17.20470 +esac
17.20471 +case $ac_abs_builddir in
17.20472 +.) ac_abs_top_srcdir=$ac_top_srcdir;;
17.20473 +*)
17.20474 +  case $ac_top_srcdir in
17.20475 +  .) ac_abs_top_srcdir=$ac_abs_builddir;;
17.20476 +  [\\/]* | ?:[\\/]* ) ac_abs_top_srcdir=$ac_top_srcdir;;
17.20477 +  *) ac_abs_top_srcdir=$ac_abs_builddir/$ac_top_srcdir;;
17.20478 +  esac;;
17.20479 +esac
17.20480 +
17.20481 +
17.20482 +  case $INSTALL in
17.20483 +  [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;;
17.20484 +  *) ac_INSTALL=$ac_top_builddir$INSTALL ;;
17.20485 +  esac
17.20486 +
17.20487 +  # Let's still pretend it is `configure' which instantiates (i.e., don't
17.20488 +  # use $as_me), people would be surprised to read:
17.20489 +  #    /* config.h.  Generated by config.status.  */
17.20490 +  if test x"$ac_file" = x-; then
17.20491 +    configure_input=
17.20492 +  else
17.20493 +    configure_input="$ac_file.  "
17.20494 +  fi
17.20495 +  configure_input=$configure_input"Generated from `echo $ac_file_in |
17.20496 +				     sed 's,.*/,,'` by configure."
17.20497 +
17.20498 +  # First look for the input files in the build tree, otherwise in the
17.20499 +  # src tree.
17.20500 +  ac_file_inputs=`IFS=:
17.20501 +    for f in $ac_file_in; do
17.20502 +      case $f in
17.20503 +      -) echo $tmp/stdin ;;
17.20504 +      [\\/$]*)
17.20505 +	 # Absolute (can't be DOS-style, as IFS=:)
17.20506 +	 test -f "$f" || { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5
17.20507 +echo "$as_me: error: cannot find input file: $f" >&2;}
17.20508 +   { (exit 1); exit 1; }; }
17.20509 +	 echo "$f";;
17.20510 +      *) # Relative
17.20511 +	 if test -f "$f"; then
17.20512 +	   # Build tree
17.20513 +	   echo "$f"
17.20514 +	 elif test -f "$srcdir/$f"; then
17.20515 +	   # Source tree
17.20516 +	   echo "$srcdir/$f"
17.20517 +	 else
17.20518 +	   # /dev/null tree
17.20519 +	   { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5
17.20520 +echo "$as_me: error: cannot find input file: $f" >&2;}
17.20521 +   { (exit 1); exit 1; }; }
17.20522 +	 fi;;
17.20523 +      esac
17.20524 +    done` || { (exit 1); exit 1; }
17.20525 +
17.20526 +  if test x"$ac_file" != x-; then
17.20527 +    { echo "$as_me:$LINENO: creating $ac_file" >&5
17.20528 +echo "$as_me: creating $ac_file" >&6;}
17.20529 +    rm -f "$ac_file"
17.20530 +  fi
17.20531 +_ACEOF
17.20532 +cat >>$CONFIG_STATUS <<_ACEOF
17.20533 +  sed "$ac_vpsub
17.20534 +$extrasub
17.20535 +_ACEOF
17.20536 +cat >>$CONFIG_STATUS <<\_ACEOF
17.20537 +:t
17.20538 +/@[a-zA-Z_][a-zA-Z_0-9]*@/!b
17.20539 +s,@configure_input@,$configure_input,;t t
17.20540 +s,@srcdir@,$ac_srcdir,;t t
17.20541 +s,@abs_srcdir@,$ac_abs_srcdir,;t t
17.20542 +s,@top_srcdir@,$ac_top_srcdir,;t t
17.20543 +s,@abs_top_srcdir@,$ac_abs_top_srcdir,;t t
17.20544 +s,@builddir@,$ac_builddir,;t t
17.20545 +s,@abs_builddir@,$ac_abs_builddir,;t t
17.20546 +s,@top_builddir@,$ac_top_builddir,;t t
17.20547 +s,@abs_top_builddir@,$ac_abs_top_builddir,;t t
17.20548 +s,@INSTALL@,$ac_INSTALL,;t t
17.20549 +" $ac_file_inputs | (eval "$ac_sed_cmds") >$tmp/out
17.20550 +  rm -f $tmp/stdin
17.20551 +  if test x"$ac_file" != x-; then
17.20552 +    mv $tmp/out $ac_file
17.20553 +  else
17.20554 +    cat $tmp/out
17.20555 +    rm -f $tmp/out
17.20556 +  fi
17.20557 +
17.20558 +done
17.20559 +_ACEOF
17.20560 +cat >>$CONFIG_STATUS <<\_ACEOF
17.20561 +
17.20562 +#
17.20563 +# CONFIG_HEADER section.
17.20564 +#
17.20565 +
17.20566 +# These sed commands are passed to sed as "A NAME B NAME C VALUE D", where
17.20567 +# NAME is the cpp macro being defined and VALUE is the value it is being given.
17.20568 +#
17.20569 +# ac_d sets the value in "#define NAME VALUE" lines.
17.20570 +ac_dA='s,^\([	 ]*\)#\([	 ]*define[	 ][	 ]*\)'
17.20571 +ac_dB='[	 ].*$,\1#\2'
17.20572 +ac_dC=' '
17.20573 +ac_dD=',;t'
17.20574 +# ac_u turns "#undef NAME" without trailing blanks into "#define NAME VALUE".
17.20575 +ac_uA='s,^\([	 ]*\)#\([	 ]*\)undef\([	 ][	 ]*\)'
17.20576 +ac_uB='$,\1#\2define\3'
17.20577 +ac_uC=' '
17.20578 +ac_uD=',;t'
17.20579 +
17.20580 +for ac_file in : $CONFIG_HEADERS; do test "x$ac_file" = x: && continue
17.20581 +  # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in".
17.20582 +  case $ac_file in
17.20583 +  - | *:- | *:-:* ) # input from stdin
17.20584 +	cat >$tmp/stdin
17.20585 +	ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'`
17.20586 +	ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;;
17.20587 +  *:* ) ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'`
17.20588 +	ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;;
17.20589 +  * )   ac_file_in=$ac_file.in ;;
17.20590 +  esac
17.20591 +
17.20592 +  test x"$ac_file" != x- && { echo "$as_me:$LINENO: creating $ac_file" >&5
17.20593 +echo "$as_me: creating $ac_file" >&6;}
17.20594 +
17.20595 +  # First look for the input files in the build tree, otherwise in the
17.20596 +  # src tree.
17.20597 +  ac_file_inputs=`IFS=:
17.20598 +    for f in $ac_file_in; do
17.20599 +      case $f in
17.20600 +      -) echo $tmp/stdin ;;
17.20601 +      [\\/$]*)
17.20602 +	 # Absolute (can't be DOS-style, as IFS=:)
17.20603 +	 test -f "$f" || { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5
17.20604 +echo "$as_me: error: cannot find input file: $f" >&2;}
17.20605 +   { (exit 1); exit 1; }; }
17.20606 +	 # Do quote $f, to prevent DOS paths from being IFS'd.
17.20607 +	 echo "$f";;
17.20608 +      *) # Relative
17.20609 +	 if test -f "$f"; then
17.20610 +	   # Build tree
17.20611 +	   echo "$f"
17.20612 +	 elif test -f "$srcdir/$f"; then
17.20613 +	   # Source tree
17.20614 +	   echo "$srcdir/$f"
17.20615 +	 else
17.20616 +	   # /dev/null tree
17.20617 +	   { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5
17.20618 +echo "$as_me: error: cannot find input file: $f" >&2;}
17.20619 +   { (exit 1); exit 1; }; }
17.20620 +	 fi;;
17.20621 +      esac
17.20622 +    done` || { (exit 1); exit 1; }
17.20623 +  # Remove the trailing spaces.
17.20624 +  sed 's/[	 ]*$//' $ac_file_inputs >$tmp/in
17.20625 +
17.20626 +_ACEOF
17.20627 +
17.20628 +# Transform confdefs.h into two sed scripts, `conftest.defines' and
17.20629 +# `conftest.undefs', that substitutes the proper values into
17.20630 +# config.h.in to produce config.h.  The first handles `#define'
17.20631 +# templates, and the second `#undef' templates.
17.20632 +# And first: Protect against being on the right side of a sed subst in
17.20633 +# config.status.  Protect against being in an unquoted here document
17.20634 +# in config.status.
17.20635 +rm -f conftest.defines conftest.undefs
17.20636 +# Using a here document instead of a string reduces the quoting nightmare.
17.20637 +# Putting comments in sed scripts is not portable.
17.20638 +#
17.20639 +# `end' is used to avoid that the second main sed command (meant for
17.20640 +# 0-ary CPP macros) applies to n-ary macro definitions.
17.20641 +# See the Autoconf documentation for `clear'.
17.20642 +cat >confdef2sed.sed <<\_ACEOF
17.20643 +s/[\\&,]/\\&/g
17.20644 +s,[\\$`],\\&,g
17.20645 +t clear
17.20646 +: clear
17.20647 +s,^[	 ]*#[	 ]*define[	 ][	 ]*\([^	 (][^	 (]*\)\(([^)]*)\)[	 ]*\(.*\)$,${ac_dA}\1${ac_dB}\1\2${ac_dC}\3${ac_dD},gp
17.20648 +t end
17.20649 +s,^[	 ]*#[	 ]*define[	 ][	 ]*\([^	 ][^	 ]*\)[	 ]*\(.*\)$,${ac_dA}\1${ac_dB}\1${ac_dC}\2${ac_dD},gp
17.20650 +: end
17.20651 +_ACEOF
17.20652 +# If some macros were called several times there might be several times
17.20653 +# the same #defines, which is useless.  Nevertheless, we may not want to
17.20654 +# sort them, since we want the *last* AC-DEFINE to be honored.
17.20655 +uniq confdefs.h | sed -n -f confdef2sed.sed >conftest.defines
17.20656 +sed 's/ac_d/ac_u/g' conftest.defines >conftest.undefs
17.20657 +rm -f confdef2sed.sed
17.20658 +
17.20659 +# This sed command replaces #undef with comments.  This is necessary, for
17.20660 +# example, in the case of _POSIX_SOURCE, which is predefined and required
17.20661 +# on some systems where configure will not decide to define it.
17.20662 +cat >>conftest.undefs <<\_ACEOF
17.20663 +s,^[	 ]*#[	 ]*undef[	 ][	 ]*[a-zA-Z_][a-zA-Z_0-9]*,/* & */,
17.20664 +_ACEOF
17.20665 +
17.20666 +# Break up conftest.defines because some shells have a limit on the size
17.20667 +# of here documents, and old seds have small limits too (100 cmds).
17.20668 +echo '  # Handle all the #define templates only if necessary.' >>$CONFIG_STATUS
17.20669 +echo '  if grep "^[	 ]*#[	 ]*define" $tmp/in >/dev/null; then' >>$CONFIG_STATUS
17.20670 +echo '  # If there are no defines, we may have an empty if/fi' >>$CONFIG_STATUS
17.20671 +echo '  :' >>$CONFIG_STATUS
17.20672 +rm -f conftest.tail
17.20673 +while grep . conftest.defines >/dev/null
17.20674 +do
17.20675 +  # Write a limited-size here document to $tmp/defines.sed.
17.20676 +  echo '  cat >$tmp/defines.sed <<CEOF' >>$CONFIG_STATUS
17.20677 +  # Speed up: don't consider the non `#define' lines.
17.20678 +  echo '/^[	 ]*#[	 ]*define/!b' >>$CONFIG_STATUS
17.20679 +  # Work around the forget-to-reset-the-flag bug.
17.20680 +  echo 't clr' >>$CONFIG_STATUS
17.20681 +  echo ': clr' >>$CONFIG_STATUS
17.20682 +  sed ${ac_max_here_lines}q conftest.defines >>$CONFIG_STATUS
17.20683 +  echo 'CEOF
17.20684 +  sed -f $tmp/defines.sed $tmp/in >$tmp/out
17.20685 +  rm -f $tmp/in
17.20686 +  mv $tmp/out $tmp/in
17.20687 +' >>$CONFIG_STATUS
17.20688 +  sed 1,${ac_max_here_lines}d conftest.defines >conftest.tail
17.20689 +  rm -f conftest.defines
17.20690 +  mv conftest.tail conftest.defines
17.20691 +done
17.20692 +rm -f conftest.defines
17.20693 +echo '  fi # grep' >>$CONFIG_STATUS
17.20694 +echo >>$CONFIG_STATUS
17.20695 +
17.20696 +# Break up conftest.undefs because some shells have a limit on the size
17.20697 +# of here documents, and old seds have small limits too (100 cmds).
17.20698 +echo '  # Handle all the #undef templates' >>$CONFIG_STATUS
17.20699 +rm -f conftest.tail
17.20700 +while grep . conftest.undefs >/dev/null
17.20701 +do
17.20702 +  # Write a limited-size here document to $tmp/undefs.sed.
17.20703 +  echo '  cat >$tmp/undefs.sed <<CEOF' >>$CONFIG_STATUS
17.20704 +  # Speed up: don't consider the non `#undef'
17.20705 +  echo '/^[	 ]*#[	 ]*undef/!b' >>$CONFIG_STATUS
17.20706 +  # Work around the forget-to-reset-the-flag bug.
17.20707 +  echo 't clr' >>$CONFIG_STATUS
17.20708 +  echo ': clr' >>$CONFIG_STATUS
17.20709 +  sed ${ac_max_here_lines}q conftest.undefs >>$CONFIG_STATUS
17.20710 +  echo 'CEOF
17.20711 +  sed -f $tmp/undefs.sed $tmp/in >$tmp/out
17.20712 +  rm -f $tmp/in
17.20713 +  mv $tmp/out $tmp/in
17.20714 +' >>$CONFIG_STATUS
17.20715 +  sed 1,${ac_max_here_lines}d conftest.undefs >conftest.tail
17.20716 +  rm -f conftest.undefs
17.20717 +  mv conftest.tail conftest.undefs
17.20718 +done
17.20719 +rm -f conftest.undefs
17.20720 +
17.20721 +cat >>$CONFIG_STATUS <<\_ACEOF
17.20722 +  # Let's still pretend it is `configure' which instantiates (i.e., don't
17.20723 +  # use $as_me), people would be surprised to read:
17.20724 +  #    /* config.h.  Generated by config.status.  */
17.20725 +  if test x"$ac_file" = x-; then
17.20726 +    echo "/* Generated by configure.  */" >$tmp/config.h
17.20727 +  else
17.20728 +    echo "/* $ac_file.  Generated by configure.  */" >$tmp/config.h
17.20729 +  fi
17.20730 +  cat $tmp/in >>$tmp/config.h
17.20731 +  rm -f $tmp/in
17.20732 +  if test x"$ac_file" != x-; then
17.20733 +    if diff $ac_file $tmp/config.h >/dev/null 2>&1; then
17.20734 +      { echo "$as_me:$LINENO: $ac_file is unchanged" >&5
17.20735 +echo "$as_me: $ac_file is unchanged" >&6;}
17.20736 +    else
17.20737 +      ac_dir=`(dirname "$ac_file") 2>/dev/null ||
17.20738 +$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
17.20739 +	 X"$ac_file" : 'X\(//\)[^/]' \| \
17.20740 +	 X"$ac_file" : 'X\(//\)$' \| \
17.20741 +	 X"$ac_file" : 'X\(/\)' \| \
17.20742 +	 .     : '\(.\)' 2>/dev/null ||
17.20743 +echo X"$ac_file" |
17.20744 +    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
17.20745 +  	  /^X\(\/\/\)[^/].*/{ s//\1/; q; }
17.20746 +  	  /^X\(\/\/\)$/{ s//\1/; q; }
17.20747 +  	  /^X\(\/\).*/{ s//\1/; q; }
17.20748 +  	  s/.*/./; q'`
17.20749 +      { if $as_mkdir_p; then
17.20750 +    mkdir -p "$ac_dir"
17.20751 +  else
17.20752 +    as_dir="$ac_dir"
17.20753 +    as_dirs=
17.20754 +    while test ! -d "$as_dir"; do
17.20755 +      as_dirs="$as_dir $as_dirs"
17.20756 +      as_dir=`(dirname "$as_dir") 2>/dev/null ||
17.20757 +$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
17.20758 +	 X"$as_dir" : 'X\(//\)[^/]' \| \
17.20759 +	 X"$as_dir" : 'X\(//\)$' \| \
17.20760 +	 X"$as_dir" : 'X\(/\)' \| \
17.20761 +	 .     : '\(.\)' 2>/dev/null ||
17.20762 +echo X"$as_dir" |
17.20763 +    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
17.20764 +  	  /^X\(\/\/\)[^/].*/{ s//\1/; q; }
17.20765 +  	  /^X\(\/\/\)$/{ s//\1/; q; }
17.20766 +  	  /^X\(\/\).*/{ s//\1/; q; }
17.20767 +  	  s/.*/./; q'`
17.20768 +    done
17.20769 +    test ! -n "$as_dirs" || mkdir $as_dirs
17.20770 +  fi || { { echo "$as_me:$LINENO: error: cannot create directory \"$ac_dir\"" >&5
17.20771 +echo "$as_me: error: cannot create directory \"$ac_dir\"" >&2;}
17.20772 +   { (exit 1); exit 1; }; }; }
17.20773 +
17.20774 +      rm -f $ac_file
17.20775 +      mv $tmp/config.h $ac_file
17.20776 +    fi
17.20777 +  else
17.20778 +    cat $tmp/config.h
17.20779 +    rm -f $tmp/config.h
17.20780 +  fi
17.20781 +# Compute $ac_file's index in $config_headers.
17.20782 +_am_stamp_count=1
17.20783 +for _am_header in $config_headers :; do
17.20784 +  case $_am_header in
17.20785 +    $ac_file | $ac_file:* )
17.20786 +      break ;;
17.20787 +    * )
17.20788 +      _am_stamp_count=`expr $_am_stamp_count + 1` ;;
17.20789 +  esac
17.20790 +done
17.20791 +echo "timestamp for $ac_file" >`(dirname $ac_file) 2>/dev/null ||
17.20792 +$as_expr X$ac_file : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
17.20793 +	 X$ac_file : 'X\(//\)[^/]' \| \
17.20794 +	 X$ac_file : 'X\(//\)$' \| \
17.20795 +	 X$ac_file : 'X\(/\)' \| \
17.20796 +	 .     : '\(.\)' 2>/dev/null ||
17.20797 +echo X$ac_file |
17.20798 +    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
17.20799 +  	  /^X\(\/\/\)[^/].*/{ s//\1/; q; }
17.20800 +  	  /^X\(\/\/\)$/{ s//\1/; q; }
17.20801 +  	  /^X\(\/\).*/{ s//\1/; q; }
17.20802 +  	  s/.*/./; q'`/stamp-h$_am_stamp_count
17.20803 +done
17.20804 +_ACEOF
17.20805 +cat >>$CONFIG_STATUS <<\_ACEOF
17.20806 +
17.20807 +#
17.20808 +# CONFIG_COMMANDS section.
17.20809 +#
17.20810 +for ac_file in : $CONFIG_COMMANDS; do test "x$ac_file" = x: && continue
17.20811 +  ac_dest=`echo "$ac_file" | sed 's,:.*,,'`
17.20812 +  ac_source=`echo "$ac_file" | sed 's,[^:]*:,,'`
17.20813 +  ac_dir=`(dirname "$ac_dest") 2>/dev/null ||
17.20814 +$as_expr X"$ac_dest" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
17.20815 +	 X"$ac_dest" : 'X\(//\)[^/]' \| \
17.20816 +	 X"$ac_dest" : 'X\(//\)$' \| \
17.20817 +	 X"$ac_dest" : 'X\(/\)' \| \
17.20818 +	 .     : '\(.\)' 2>/dev/null ||
17.20819 +echo X"$ac_dest" |
17.20820 +    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
17.20821 +  	  /^X\(\/\/\)[^/].*/{ s//\1/; q; }
17.20822 +  	  /^X\(\/\/\)$/{ s//\1/; q; }
17.20823 +  	  /^X\(\/\).*/{ s//\1/; q; }
17.20824 +  	  s/.*/./; q'`
17.20825 +  { if $as_mkdir_p; then
17.20826 +    mkdir -p "$ac_dir"
17.20827 +  else
17.20828 +    as_dir="$ac_dir"
17.20829 +    as_dirs=
17.20830 +    while test ! -d "$as_dir"; do
17.20831 +      as_dirs="$as_dir $as_dirs"
17.20832 +      as_dir=`(dirname "$as_dir") 2>/dev/null ||
17.20833 +$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
17.20834 +	 X"$as_dir" : 'X\(//\)[^/]' \| \
17.20835 +	 X"$as_dir" : 'X\(//\)$' \| \
17.20836 +	 X"$as_dir" : 'X\(/\)' \| \
17.20837 +	 .     : '\(.\)' 2>/dev/null ||
17.20838 +echo X"$as_dir" |
17.20839 +    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
17.20840 +  	  /^X\(\/\/\)[^/].*/{ s//\1/; q; }
17.20841 +  	  /^X\(\/\/\)$/{ s//\1/; q; }
17.20842 +  	  /^X\(\/\).*/{ s//\1/; q; }
17.20843 +  	  s/.*/./; q'`
17.20844 +    done
17.20845 +    test ! -n "$as_dirs" || mkdir $as_dirs
17.20846 +  fi || { { echo "$as_me:$LINENO: error: cannot create directory \"$ac_dir\"" >&5
17.20847 +echo "$as_me: error: cannot create directory \"$ac_dir\"" >&2;}
17.20848 +   { (exit 1); exit 1; }; }; }
17.20849 +
17.20850 +  ac_builddir=.
17.20851 +
17.20852 +if test "$ac_dir" != .; then
17.20853 +  ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'`
17.20854 +  # A "../" for each directory in $ac_dir_suffix.
17.20855 +  ac_top_builddir=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,../,g'`
17.20856 +else
17.20857 +  ac_dir_suffix= ac_top_builddir=
17.20858 +fi
17.20859 +
17.20860 +case $srcdir in
17.20861 +  .)  # No --srcdir option.  We are building in place.
17.20862 +    ac_srcdir=.
17.20863 +    if test -z "$ac_top_builddir"; then
17.20864 +       ac_top_srcdir=.
17.20865 +    else
17.20866 +       ac_top_srcdir=`echo $ac_top_builddir | sed 's,/$,,'`
17.20867 +    fi ;;
17.20868 +  [\\/]* | ?:[\\/]* )  # Absolute path.
17.20869 +    ac_srcdir=$srcdir$ac_dir_suffix;
17.20870 +    ac_top_srcdir=$srcdir ;;
17.20871 +  *) # Relative path.
17.20872 +    ac_srcdir=$ac_top_builddir$srcdir$ac_dir_suffix
17.20873 +    ac_top_srcdir=$ac_top_builddir$srcdir ;;
17.20874 +esac
17.20875 +
17.20876 +# Do not use `cd foo && pwd` to compute absolute paths, because
17.20877 +# the directories may not exist.
17.20878 +case `pwd` in
17.20879 +.) ac_abs_builddir="$ac_dir";;
17.20880 +*)
17.20881 +  case "$ac_dir" in
17.20882 +  .) ac_abs_builddir=`pwd`;;
17.20883 +  [\\/]* | ?:[\\/]* ) ac_abs_builddir="$ac_dir";;
17.20884 +  *) ac_abs_builddir=`pwd`/"$ac_dir";;
17.20885 +  esac;;
17.20886 +esac
17.20887 +case $ac_abs_builddir in
17.20888 +.) ac_abs_top_builddir=${ac_top_builddir}.;;
17.20889 +*)
17.20890 +  case ${ac_top_builddir}. in
17.20891 +  .) ac_abs_top_builddir=$ac_abs_builddir;;
17.20892 +  [\\/]* | ?:[\\/]* ) ac_abs_top_builddir=${ac_top_builddir}.;;
17.20893 +  *) ac_abs_top_builddir=$ac_abs_builddir/${ac_top_builddir}.;;
17.20894 +  esac;;
17.20895 +esac
17.20896 +case $ac_abs_builddir in
17.20897 +.) ac_abs_srcdir=$ac_srcdir;;
17.20898 +*)
17.20899 +  case $ac_srcdir in
17.20900 +  .) ac_abs_srcdir=$ac_abs_builddir;;
17.20901 +  [\\/]* | ?:[\\/]* ) ac_abs_srcdir=$ac_srcdir;;
17.20902 +  *) ac_abs_srcdir=$ac_abs_builddir/$ac_srcdir;;
17.20903 +  esac;;
17.20904 +esac
17.20905 +case $ac_abs_builddir in
17.20906 +.) ac_abs_top_srcdir=$ac_top_srcdir;;
17.20907 +*)
17.20908 +  case $ac_top_srcdir in
17.20909 +  .) ac_abs_top_srcdir=$ac_abs_builddir;;
17.20910 +  [\\/]* | ?:[\\/]* ) ac_abs_top_srcdir=$ac_top_srcdir;;
17.20911 +  *) ac_abs_top_srcdir=$ac_abs_builddir/$ac_top_srcdir;;
17.20912 +  esac;;
17.20913 +esac
17.20914 +
17.20915 +
17.20916 +  { echo "$as_me:$LINENO: executing $ac_dest commands" >&5
17.20917 +echo "$as_me: executing $ac_dest commands" >&6;}
17.20918 +  case $ac_dest in
17.20919 +    depfiles ) test x"$AMDEP_TRUE" != x"" || for mf in $CONFIG_FILES; do
17.20920 +  # Strip MF so we end up with the name of the file.
17.20921 +  mf=`echo "$mf" | sed -e 's/:.*$//'`
17.20922 +  # Check whether this is an Automake generated Makefile or not.
17.20923 +  # We used to match only the files named `Makefile.in', but
17.20924 +  # some people rename them; so instead we look at the file content.
17.20925 +  # Grep'ing the first line is not enough: some people post-process
17.20926 +  # each Makefile.in and add a new line on top of each file to say so.
17.20927 +  # So let's grep whole file.
17.20928 +  if grep '^#.*generated by automake' $mf > /dev/null 2>&1; then
17.20929 +    dirpart=`(dirname "$mf") 2>/dev/null ||
17.20930 +$as_expr X"$mf" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
17.20931 +	 X"$mf" : 'X\(//\)[^/]' \| \
17.20932 +	 X"$mf" : 'X\(//\)$' \| \
17.20933 +	 X"$mf" : 'X\(/\)' \| \
17.20934 +	 .     : '\(.\)' 2>/dev/null ||
17.20935 +echo X"$mf" |
17.20936 +    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
17.20937 +  	  /^X\(\/\/\)[^/].*/{ s//\1/; q; }
17.20938 +  	  /^X\(\/\/\)$/{ s//\1/; q; }
17.20939 +  	  /^X\(\/\).*/{ s//\1/; q; }
17.20940 +  	  s/.*/./; q'`
17.20941 +  else
17.20942 +    continue
17.20943 +  fi
17.20944 +  grep '^DEP_FILES *= *[^ #]' < "$mf" > /dev/null || continue
17.20945 +  # Extract the definition of DEP_FILES from the Makefile without
17.20946 +  # running `make'.
17.20947 +  DEPDIR=`sed -n -e '/^DEPDIR = / s///p' < "$mf"`
17.20948 +  test -z "$DEPDIR" && continue
17.20949 +  # When using ansi2knr, U may be empty or an underscore; expand it
17.20950 +  U=`sed -n -e '/^U = / s///p' < "$mf"`
17.20951 +  test -d "$dirpart/$DEPDIR" || mkdir "$dirpart/$DEPDIR"
17.20952 +  # We invoke sed twice because it is the simplest approach to
17.20953 +  # changing $(DEPDIR) to its actual value in the expansion.
17.20954 +  for file in `sed -n -e '
17.20955 +    /^DEP_FILES = .*\\\\$/ {
17.20956 +      s/^DEP_FILES = //
17.20957 +      :loop
17.20958 +	s/\\\\$//
17.20959 +	p
17.20960 +	n
17.20961 +	/\\\\$/ b loop
17.20962 +      p
17.20963 +    }
17.20964 +    /^DEP_FILES = / s/^DEP_FILES = //p' < "$mf" | \
17.20965 +       sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do
17.20966 +    # Make sure the directory exists.
17.20967 +    test -f "$dirpart/$file" && continue
17.20968 +    fdir=`(dirname "$file") 2>/dev/null ||
17.20969 +$as_expr X"$file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
17.20970 +	 X"$file" : 'X\(//\)[^/]' \| \
17.20971 +	 X"$file" : 'X\(//\)$' \| \
17.20972 +	 X"$file" : 'X\(/\)' \| \
17.20973 +	 .     : '\(.\)' 2>/dev/null ||
17.20974 +echo X"$file" |
17.20975 +    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
17.20976 +  	  /^X\(\/\/\)[^/].*/{ s//\1/; q; }
17.20977 +  	  /^X\(\/\/\)$/{ s//\1/; q; }
17.20978 +  	  /^X\(\/\).*/{ s//\1/; q; }
17.20979 +  	  s/.*/./; q'`
17.20980 +    { if $as_mkdir_p; then
17.20981 +    mkdir -p $dirpart/$fdir
17.20982 +  else
17.20983 +    as_dir=$dirpart/$fdir
17.20984 +    as_dirs=
17.20985 +    while test ! -d "$as_dir"; do
17.20986 +      as_dirs="$as_dir $as_dirs"
17.20987 +      as_dir=`(dirname "$as_dir") 2>/dev/null ||
17.20988 +$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
17.20989 +	 X"$as_dir" : 'X\(//\)[^/]' \| \
17.20990 +	 X"$as_dir" : 'X\(//\)$' \| \
17.20991 +	 X"$as_dir" : 'X\(/\)' \| \
17.20992 +	 .     : '\(.\)' 2>/dev/null ||
17.20993 +echo X"$as_dir" |
17.20994 +    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
17.20995 +  	  /^X\(\/\/\)[^/].*/{ s//\1/; q; }
17.20996 +  	  /^X\(\/\/\)$/{ s//\1/; q; }
17.20997 +  	  /^X\(\/\).*/{ s//\1/; q; }
17.20998 +  	  s/.*/./; q'`
17.20999 +    done
17.21000 +    test ! -n "$as_dirs" || mkdir $as_dirs
17.21001 +  fi || { { echo "$as_me:$LINENO: error: cannot create directory $dirpart/$fdir" >&5
17.21002 +echo "$as_me: error: cannot create directory $dirpart/$fdir" >&2;}
17.21003 +   { (exit 1); exit 1; }; }; }
17.21004 +
17.21005 +    # echo "creating $dirpart/$file"
17.21006 +    echo '# dummy' > "$dirpart/$file"
17.21007 +  done
17.21008 +done
17.21009 + ;;
17.21010 +  esac
17.21011 +done
17.21012 +_ACEOF
17.21013 +
17.21014 +cat >>$CONFIG_STATUS <<\_ACEOF
17.21015 +
17.21016 +{ (exit 0); exit 0; }
17.21017 +_ACEOF
17.21018 +chmod +x $CONFIG_STATUS
17.21019 +ac_clean_files=$ac_clean_files_save
17.21020 +
17.21021 +
17.21022 +# configure is writing to config.log, and then calls config.status.
17.21023 +# config.status does its own redirection, appending to config.log.
17.21024 +# Unfortunately, on DOS this fails, as config.log is still kept open
17.21025 +# by configure, so config.status won't be able to write to it; its
17.21026 +# output is simply discarded.  So we exec the FD to /dev/null,
17.21027 +# effectively closing config.log, so it can be properly (re)opened and
17.21028 +# appended to by config.status.  When coming back to configure, we
17.21029 +# need to make the FD available again.
17.21030 +if test "$no_create" != yes; then
17.21031 +  ac_cs_success=:
17.21032 +  ac_config_status_args=
17.21033 +  test "$silent" = yes &&
17.21034 +    ac_config_status_args="$ac_config_status_args --quiet"
17.21035 +  exec 5>/dev/null
17.21036 +  $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false
17.21037 +  exec 5>>config.log
17.21038 +  # Use ||, not &&, to avoid exiting from the if with $? = 1, which
17.21039 +  # would make configure fail if this is the last instruction.
17.21040 +  $ac_cs_success || { (exit 1); exit 1; }
17.21041 +fi
17.21042 +
17.21043 +
17.21044 +
17.21045 +echo
17.21046 +echo "$PACKAGE_NAME $VERSION"
17.21047 +echo
17.21048 +echo "-------------------- core ---"
17.21049 +echo
17.21050 +echo "libgift.................: $libgift_version"
17.21051 +echo "libgiftproto............: $libgift_version"
17.21052 +echo
17.21053 +echo "-------------- extensions ---"
17.21054 +echo
17.21055 +echo "use zlib................: yes (required)"
17.21056 +echo "use libxml..............: $use_libxml"
17.21057 +echo
17.21058 +echo "-----------------------------"
17.21059 +echo
17.21060 +
17.21061 +
17.21062 +
17.21063 +   libgift_prefix=`pkg-config --variable=prefix libgift`
17.21064 +
17.21065 +   gift_plugin_prefix=$prefix
17.21066 +   if test x"$prefix" = xNONE; then
17.21067 +      gift_plugin_prefix=/usr/local
17.21068 +   fi
17.21069 +
17.21070 +   if test x"$libgift_prefix" != x"$gift_plugin_prefix"; then
17.21071 +      { echo "$as_me:$LINENO: WARNING:
17.21072 +   You are trying to install in $gift_plugin_prefix, but I only
17.21073 +   detected a giFT installation in $libgift_prefix.
17.21074 +   You may be installing in the wrong place.
17.21075 +
17.21076 +   You should probably supply --prefix=$libgift_prefix
17.21077 +   to configure. Or, if you have a giFT installation in
17.21078 +   $gift_plugin_prefix, you could add ${gift_plugin_prefix}/lib/pkgconfig
17.21079 +   to the PKG_CONFIG_PATH environment variable, so I can detect it.
17.21080 +" >&5
17.21081 +echo "$as_me: WARNING:
17.21082 +   You are trying to install in $gift_plugin_prefix, but I only
17.21083 +   detected a giFT installation in $libgift_prefix.
17.21084 +   You may be installing in the wrong place.
17.21085 +
17.21086 +   You should probably supply --prefix=$libgift_prefix
17.21087 +   to configure. Or, if you have a giFT installation in
17.21088 +   $gift_plugin_prefix, you could add ${gift_plugin_prefix}/lib/pkgconfig
17.21089 +   to the PKG_CONFIG_PATH environment variable, so I can detect it.
17.21090 +" >&2;}
17.21091 +   fi
17.21092 +
17.21093 +
17.21094 +
17.21095 +echo
17.21096 +echo "Type 'make' ('gmake' on some systems) to compile gift-gnutella."
17.21097 +echo
    18.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    18.2 +++ b/configure.ac	Sat Feb 20 21:18:28 2010 -0800
    18.3 @@ -0,0 +1,192 @@
    18.4 +###############################################################################
    18.5 +##
    18.6 +## $Id: configure.ac,v 1.38 2006/08/06 17:26:39 hexwab Exp $
    18.7 +##
    18.8 +## Copyright (C) 2001-2003 giFT project (gift.sourceforge.net)
    18.9 +##
   18.10 +## This program is free software; you can redistribute it and/or modify it
   18.11 +## under the terms of the GNU General Public License as published by the
   18.12 +## Free Software Foundation; either version 2, or (at your option) any
   18.13 +## later version.
   18.14 +##
   18.15 +## This program is distributed in the hope that it will be useful, but
   18.16 +## WITHOUT ANY WARRANTY; without even the implied warranty of
   18.17 +## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
   18.18 +## General Public License for more details.
   18.19 +##
   18.20 +###############################################################################
   18.21 +
   18.22 +dnl ###########################################################################
   18.23 +dnl Initialize autoconf...
   18.24 +dnl ###########################################################################
   18.25 +
   18.26 +AC_PREREQ(2.53)
   18.27 +
   18.28 +AC_INIT(gift-gnutella, 0.0.11)
   18.29 +AC_CONFIG_SRCDIR([src/gt_gnutella.h])
   18.30 +
   18.31 +AC_DEFINE(GT_MAJOR_VERSION, ["0"],    [Major])
   18.32 +AC_DEFINE(GT_MINOR_VERSION, ["0"],    [Minor])
   18.33 +AC_DEFINE(GT_MICRO_VERSION, ["11"],   [Micro])
   18.34 +
   18.35 +if test -e "$srcdir/CVS"; then
   18.36 +   AC_DEFINE(GT_EXTRA_VERSION, ["-cvs"], [Extra])
   18.37 +else
   18.38 +   AC_DEFINE(GT_EXTRA_VERSION, [""], [Extra])
   18.39 +fi
   18.40 +
   18.41 +dnl ###########################################################################
   18.42 +dnl Initialize automake...
   18.43 +dnl ###########################################################################
   18.44 +
   18.45 +AM_INIT_AUTOMAKE([dist-bzip2])
   18.46 +AM_CONFIG_HEADER(config.h)
   18.47 +
   18.48 +AM_MAINTAINER_MODE
   18.49 +
   18.50 +dnl ###########################################################################
   18.51 +dnl Initialize autoheader... 
   18.52 +dnl ###########################################################################
   18.53 +
   18.54 +AH_VERBATIM([USE_ZLIB],     [#undef USE_ZLIB])
   18.55 +AH_VERBATIM([USE_LIBXML2],  [#undef USE_LIBXML2])
   18.56 +
   18.57 +dnl ###########################################################################
   18.58 +dnl Check for the necessary build tools and configure libtool
   18.59 +dnl ###########################################################################
   18.60 +
   18.61 +AC_PROG_CC
   18.62 +AM_PROG_CC_STDC
   18.63 +AC_HEADER_STDC
   18.64 +AC_PROG_INSTALL
   18.65 +
   18.66 +AM_DISABLE_STATIC
   18.67 +AC_PROG_LIBTOOL
   18.68 +
   18.69 +PLUGIN_LDFLAGS="-module -avoid-version"
   18.70 +AC_SUBST(PLUGIN_LDFLAGS)
   18.71 +
   18.72 +# work around a bug where need_version is set to no by the above
   18.73 +# -avoid-version call when this is not supported on OpenBSD (or am I
   18.74 +# completely wrong about this?)
   18.75 +OPENBSD_LIBTOOL_WORKAROUND
   18.76 +
   18.77 +dnl ###########################################################################
   18.78 +dnl Test for libgift and libgiftproto...
   18.79 +dnl ###########################################################################
   18.80 +
   18.81 +GIFT_PLUGIN_PKGCONFIG(GNUTELLA, 0.11.4, 0.12.0)
   18.82 +AC_SUBST(GNUTELLA_CFLAGS)
   18.83 +AC_SUBST(GNUTELLA_LIBS)
   18.84 +
   18.85 +# Get rid of -g[0-9] -Wall -O[0-9] and add them unconditionally if
   18.86 +# compiling in maintainer mode
   18.87 +if test x"$USE_MAINTAINER_MODE" = xyes; then
   18.88 +   CFLAGS=`echo "$CFLAGS" | sed 's/-Wall\>//; s/-O[[0-9]]//; s/-g\([[0-9]]\)*//'`
   18.89 +   CFLAGS="$CFLAGS -Wall -g3 -O0"
   18.90 +fi
   18.91 +
   18.92 +dnl ###########################################################################
   18.93 +dnl Check for platform functions
   18.94 +dnl ###########################################################################
   18.95 +
   18.96 +AC_CHECK_FUNCS(getpid getppid)
   18.97 +
   18.98 +dnl ###########################################################################
   18.99 +dnl Check for gethostbyname/h_errno/hstrerror
  18.100 +dnl ###########################################################################
  18.101 +
  18.102 +dnl This is not really the best that can be done but it's enough atm
  18.103 +AC_CHECK_FUNCS(hstrerror)
  18.104 +
  18.105 +dnl ###########################################################################
  18.106 +dnl Test for zlib...
  18.107 +dnl ###########################################################################
  18.108 +
  18.109 +dnl Default to compiler & linker defaults for files & libraries.
  18.110 +OPT_ZLIB=
  18.111 +AC_ARG_WITH(zlib,dnl
  18.112 +[  --with-zlib[=DIR]         where to look for ZLIB [compiler/linker default paths]
  18.113 +                        DIR points to the ZLIB installation prefix [/usr/local]],
  18.114 +OPT_ZLIB=$withval,
  18.115 +)
  18.116 +
  18.117 +if test x"$OPT_ZLIB" = xno; then 
  18.118 +   AC_MSG_ERROR([zlib support is required])
  18.119 +fi
  18.120 +
  18.121 +GIFT_PLUGIN_CHECK_ZLIB
  18.122 +
  18.123 +dnl ###########################################################################
  18.124 +dnl Test for libxml...
  18.125 +dnl ###########################################################################
  18.126 +
  18.127 +OPT_LIBXML=no
  18.128 +AC_ARG_WITH(libxml,dnl
  18.129 +[  --with-libxml[=DIR]         where to look for libxml [compiler/linker default paths]
  18.130 +                        DIR points to the libxml installation prefix [/usr/local]],
  18.131 +OPT_LIBXML=$withval,
  18.132 +)
  18.133 +
  18.134 +AC_MSG_CHECKING([whether libxml should be used])
  18.135 +use_libxml=no
  18.136 +
  18.137 +if test x"$OPT_LIBXML" != xno; then
  18.138 +   AC_MSG_RESULT([yes]) 
  18.139 +   GIFT_GNUTELLA_CHECK_LIBXML
  18.140 +   use_libxml=yes
  18.141 +else
  18.142 +   AC_MSG_RESULT([no])
  18.143 +fi
  18.144 +
  18.145 +dnl ###########################################################################
  18.146 +dnl Finish generation of the build environment
  18.147 +dnl ###########################################################################
  18.148 +
  18.149 +AC_CONFIG_FILES([
  18.150 +Makefile
  18.151 +m4/Makefile
  18.152 +src/Makefile
  18.153 +src/encoding/Makefile
  18.154 +src/io/Makefile
  18.155 +src/message/Makefile
  18.156 +src/transfer/Makefile
  18.157 +data/Makefile
  18.158 +gnutella.spec
  18.159 +])
  18.160 +
  18.161 +AC_OUTPUT
  18.162 +
  18.163 +dnl ###########################################################################
  18.164 +dnl Print summary to the user...
  18.165 +dnl ###########################################################################
  18.166 +
  18.167 +echo
  18.168 +echo "$PACKAGE_NAME $VERSION"
  18.169 +echo
  18.170 +echo "-------------------- core ---"
  18.171 +echo
  18.172 +echo "libgift.................: $libgift_version"
  18.173 +echo "libgiftproto............: $libgift_version"
  18.174 +echo
  18.175 +echo "-------------- extensions ---"
  18.176 +echo
  18.177 +echo "use zlib................: yes (required)"
  18.178 +echo "use libxml..............: $use_libxml"
  18.179 +echo
  18.180 +echo "-----------------------------"
  18.181 +echo
  18.182 +
  18.183 +dnl ###########################################################################
  18.184 +dnl Sanity check the prefix where we're installing
  18.185 +dnl ###########################################################################
  18.186 +
  18.187 +GIFT_PLUGIN_CHECK_PREFIX
  18.188 +
  18.189 +dnl ###########################################################################
  18.190 +dnl Warn about needing GNU make
  18.191 +dnl ###########################################################################
  18.192 +
  18.193 +echo
  18.194 +echo "Type 'make' ('gmake' on some systems) to compile gift-gnutella."
  18.195 +echo
    19.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    19.2 +++ b/data/Gnutella.conf	Sat Feb 20 21:18:28 2010 -0800
    19.3 @@ -0,0 +1,49 @@
    19.4 +#
    19.5 +#   This is the configuration file for the Gnutella plugin.
    19.6 +#   The default settings are listed, but commented out.
    19.7 +#
    19.8 +
    19.9 +[main]
   19.10 +#
   19.11 +#   This is the port the Gnutella plugin uses. If you want to download
   19.12 +#   from firewalled users, other users must be able to connect to this port.
   19.13 +#
   19.14 +#port = 6346
   19.15 +
   19.16 +[local]
   19.17 +#
   19.18 +#   Set this if you want to run locally
   19.19 +#
   19.20 +#lan_mode = 0
   19.21 +#
   19.22 +#   This controls which hosts will be allowed to download
   19.23 +#
   19.24 +#hosts_allow = LOCAL
   19.25 +
   19.26 +[http]
   19.27 +#
   19.28 +#   Use the proxy server for communicating HTTP. Currently, this is
   19.29 +#   only used for requests to the gwebcaches, not for download/uploads.
   19.30 +#
   19.31 +#   This field must be formatted as hostname:port, with an optional 'http://'
   19.32 +#   prefix and optional trailing slash. For example, http://my.proxy.com:8080/
   19.33 +#   and my.proxy.com:8080 are valid.
   19.34 +#
   19.35 +#proxy =
   19.36 +
   19.37 +[packet]
   19.38 +#
   19.39 +#   This will print information about each packet received/sent on stdout
   19.40 +#
   19.41 +#debug = 0
   19.42 +
   19.43 +[search]
   19.44 +#
   19.45 +#   Print information about each search performed to the log file
   19.46 +#
   19.47 +#log_results = 0
   19.48 +#
   19.49 +#   Print a line for each result packet generated to the log file
   19.50 +#   This line includes just the number of results in each packet
   19.51 +#
   19.52 +#log_result_packets = 0
    20.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    20.2 +++ b/data/Gnutella.conf.template	Sat Feb 20 21:18:28 2010 -0800
    20.3 @@ -0,0 +1,43 @@
    20.4 +##############################################################################
    20.5 +# MAIN
    20.6 +
    20.7 +[main]
    20.8 +
    20.9 +#
   20.10 +# Which port the Gnutella plugin uses.  The default for the Gnutella network
   20.11 +# is normally 6346, but it is random for this plugin in order not to interfere
   20.12 +# with other Gnutella clients.
   20.13 +#
   20.14 +# Unlike OpenFT, the Gnutella plugin uses a single port for both HTTP and
   20.15 +# protocol communication.  Similar to OpenFT, this port must be reachable from
   20.16 +# the outside Internet if you want to download from firewalled users.  Download
   20.17 +# and search result performance is much better when this port is reachable, as
   20.18 +# quite a fair number of hosts on the Gnutella network are firewalled.
   20.19 +#
   20.20 +# Default: random (3312, 4312)
   20.21 +#
   20.22 +port = 3512
   20.23 +
   20.24 +##############################################################################
   20.25 +# HTTP CONFIGURATION
   20.26 +
   20.27 +[http]
   20.28 +
   20.29 +#
   20.30 +# Should the Gnutella plugin use an HTTP proxy server?
   20.31 +#
   20.32 +# The Gnutella plugin will contact some websites over HTTP for finding an
   20.33 +# initial list of nodes.  If you need to go through a proxy server to access
   20.34 +# websites, the plugin will fail to connect to the Gnutella network unless you
   20.35 +# fill in your proxy server here.  This should probably go away and be replaced
   20.36 +# by checking the 'http_proxy' environment variable instead.  Please fix me.
   20.37 +#
   20.38 +# This field can be formatted as hostname:port, with an optional 'http://'
   20.39 +# prefix and optional trailing slash.  For example, http://my.proxy.com:8080/
   20.40 +# and my.proxy.com:8080 are valid.
   20.41 +#
   20.42 +# Most people can probably leave this blank.
   20.43 +#
   20.44 +# Default: none
   20.45 +#
   20.46 +proxy =
    21.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    21.2 +++ b/data/Makefile.am	Sat Feb 20 21:18:28 2010 -0800
    21.3 @@ -0,0 +1,12 @@
    21.4 +# $Id: Makefile.am,v 1.4 2003/09/08 05:52:41 jasta Exp $
    21.5 +###############################################################################
    21.6 +
    21.7 +Gnutelladatadir = $(datadir)/giFT/Gnutella
    21.8 +Gnutelladata_DATA = \
    21.9 +	gwebcaches \
   21.10 +	hostiles.txt \
   21.11 +	Gnutella.conf.template \
   21.12 +	Gnutella.conf
   21.13 +
   21.14 +EXTRA_DIST = \
   21.15 +	$(Gnutelladata_DATA)
    22.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    22.2 +++ b/data/Makefile.in	Sat Feb 20 21:18:28 2010 -0800
    22.3 @@ -0,0 +1,327 @@
    22.4 +# Makefile.in generated by automake 1.7.9 from Makefile.am.
    22.5 +# @configure_input@
    22.6 +
    22.7 +# Copyright 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003
    22.8 +# Free Software Foundation, Inc.
    22.9 +# This Makefile.in is free software; the Free Software Foundation
   22.10 +# gives unlimited permission to copy and/or distribute it,
   22.11 +# with or without modifications, as long as this notice is preserved.
   22.12 +
   22.13 +# This program is distributed in the hope that it will be useful,
   22.14 +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
   22.15 +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
   22.16 +# PARTICULAR PURPOSE.
   22.17 +
   22.18 +@SET_MAKE@
   22.19 +
   22.20 +# $Id: Makefile.am,v 1.4 2003/09/08 05:52:41 jasta Exp $
   22.21 +###############################################################################
   22.22 +
   22.23 +srcdir = @srcdir@
   22.24 +top_srcdir = @top_srcdir@
   22.25 +VPATH = @srcdir@
   22.26 +pkgdatadir = $(datadir)/@PACKAGE@
   22.27 +pkglibdir = $(libdir)/@PACKAGE@
   22.28 +pkgincludedir = $(includedir)/@PACKAGE@
   22.29 +top_builddir = ..
   22.30 +
   22.31 +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
   22.32 +INSTALL = @INSTALL@
   22.33 +install_sh_DATA = $(install_sh) -c -m 644
   22.34 +install_sh_PROGRAM = $(install_sh) -c
   22.35 +install_sh_SCRIPT = $(install_sh) -c
   22.36 +INSTALL_HEADER = $(INSTALL_DATA)
   22.37 +transform = $(program_transform_name)
   22.38 +NORMAL_INSTALL = :
   22.39 +PRE_INSTALL = :
   22.40 +POST_INSTALL = :
   22.41 +NORMAL_UNINSTALL = :
   22.42 +PRE_UNINSTALL = :
   22.43 +POST_UNINSTALL = :
   22.44 +host_triplet = @host@
   22.45 +ACLOCAL = @ACLOCAL@
   22.46 +AMDEP_FALSE = @AMDEP_FALSE@
   22.47 +AMDEP_TRUE = @AMDEP_TRUE@
   22.48 +AMTAR = @AMTAR@
   22.49 +AR = @AR@
   22.50 +AUTOCONF = @AUTOCONF@
   22.51 +AUTOHEADER = @AUTOHEADER@
   22.52 +AUTOMAKE = @AUTOMAKE@
   22.53 +AWK = @AWK@
   22.54 +CC = @CC@
   22.55 +CCDEPMODE = @CCDEPMODE@
   22.56 +CFLAGS = @CFLAGS@
   22.57 +CPP = @CPP@
   22.58 +CPPFLAGS = @CPPFLAGS@
   22.59 +CXX = @CXX@
   22.60 +CXXCPP = @CXXCPP@
   22.61 +CXXDEPMODE = @CXXDEPMODE@
   22.62 +CXXFLAGS = @CXXFLAGS@
   22.63 +CYGPATH_W = @CYGPATH_W@
   22.64 +DEFS = @DEFS@
   22.65 +DEPDIR = @DEPDIR@
   22.66 +ECHO = @ECHO@
   22.67 +ECHO_C = @ECHO_C@
   22.68 +ECHO_N = @ECHO_N@
   22.69 +ECHO_T = @ECHO_T@
   22.70 +EGREP = @EGREP@
   22.71 +EXEEXT = @EXEEXT@
   22.72 +F77 = @F77@
   22.73 +FFLAGS = @FFLAGS@
   22.74 +GNUTELLA_CFLAGS = @GNUTELLA_CFLAGS@
   22.75 +GNUTELLA_LIBS = @GNUTELLA_LIBS@
   22.76 +INSTALL_DATA = @INSTALL_DATA@
   22.77 +INSTALL_PROGRAM = @INSTALL_PROGRAM@
   22.78 +INSTALL_SCRIPT = @INSTALL_SCRIPT@
   22.79 +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
   22.80 +LDFLAGS = @LDFLAGS@
   22.81 +LIBOBJS = @LIBOBJS@
   22.82 +LIBS = @LIBS@
   22.83 +LIBTOOL = @LIBTOOL@
   22.84 +LIBXML2_CFLAGS = @LIBXML2_CFLAGS@
   22.85 +LIBXML2_LIBS = @LIBXML2_LIBS@
   22.86 +LN_S = @LN_S@
   22.87 +LTLIBOBJS = @LTLIBOBJS@
   22.88 +MAINT = @MAINT@
   22.89 +MAINTAINER_MODE_FALSE = @MAINTAINER_MODE_FALSE@
   22.90 +MAINTAINER_MODE_TRUE = @MAINTAINER_MODE_TRUE@
   22.91 +MAKEINFO = @MAKEINFO@
   22.92 +OBJEXT = @OBJEXT@
   22.93 +PACKAGE = @PACKAGE@
   22.94 +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
   22.95 +PACKAGE_NAME = @PACKAGE_NAME@
   22.96 +PACKAGE_STRING = @PACKAGE_STRING@
   22.97 +PACKAGE_TARNAME = @PACKAGE_TARNAME@
   22.98 +PACKAGE_VERSION = @PACKAGE_VERSION@
   22.99 +PATH_SEPARATOR = @PATH_SEPARATOR@
  22.100 +PKG_CONFIG = @PKG_CONFIG@
  22.101 +PLUGIN_LDFLAGS = @PLUGIN_LDFLAGS@
  22.102 +RANLIB = @RANLIB@
  22.103 +SET_MAKE = @SET_MAKE@
  22.104 +SHELL = @SHELL@
  22.105 +STRIP = @STRIP@
  22.106 +USE_ZLIB = @USE_ZLIB@
  22.107 +VERSION = @VERSION@
  22.108 +XML2_CONFIG = @XML2_CONFIG@
  22.109 +ac_ct_AR = @ac_ct_AR@
  22.110 +ac_ct_CC = @ac_ct_CC@
  22.111 +ac_ct_CXX = @ac_ct_CXX@
  22.112 +ac_ct_F77 = @ac_ct_F77@
  22.113 +ac_ct_RANLIB = @ac_ct_RANLIB@
  22.114 +ac_ct_STRIP = @ac_ct_STRIP@
  22.115 +am__fastdepCC_FALSE = @am__fastdepCC_FALSE@
  22.116 +am__fastdepCC_TRUE = @am__fastdepCC_TRUE@
  22.117 +am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@
  22.118 +am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@
  22.119 +am__include = @am__include@
  22.120 +am__leading_dot = @am__leading_dot@
  22.121 +am__quote = @am__quote@
  22.122 +bindir = @bindir@
  22.123 +build = @build@
  22.124 +build_alias = @build_alias@
  22.125 +build_cpu = @build_cpu@
  22.126 +build_os = @build_os@
  22.127 +build_vendor = @build_vendor@
  22.128 +datadir = @datadir@
  22.129 +exec_prefix = @exec_prefix@
  22.130 +host = @host@
  22.131 +host_alias = @host_alias@
  22.132 +host_cpu = @host_cpu@
  22.133 +host_os = @host_os@
  22.134 +host_vendor = @host_vendor@
  22.135 +includedir = @includedir@
  22.136 +infodir = @infodir@
  22.137 +install_sh = @install_sh@
  22.138 +libdir = @libdir@
  22.139 +libexecdir = @libexecdir@
  22.140 +localstatedir = @localstatedir@
  22.141 +mandir = @mandir@
  22.142 +oldincludedir = @oldincludedir@
  22.143 +prefix = @prefix@
  22.144 +program_transform_name = @program_transform_name@
  22.145 +sbindir = @sbindir@
  22.146 +sharedstatedir = @sharedstatedir@
  22.147 +sysconfdir = @sysconfdir@
  22.148 +target_alias = @target_alias@
  22.149 +
  22.150 +Gnutelladatadir = $(datadir)/giFT/Gnutella
  22.151 +Gnutelladata_DATA = \
  22.152 +	gwebcaches \
  22.153 +	hostiles.txt \
  22.154 +	Gnutella.conf.template \
  22.155 +	Gnutella.conf
  22.156 +
  22.157 +
  22.158 +EXTRA_DIST = \
  22.159 +	$(Gnutelladata_DATA)
  22.160 +
  22.161 +subdir = data
  22.162 +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
  22.163 +mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
  22.164 +CONFIG_HEADER = $(top_builddir)/config.h
  22.165 +CONFIG_CLEAN_FILES =
  22.166 +DIST_SOURCES =
  22.167 +DATA = $(Gnutelladata_DATA)
  22.168 +
  22.169 +DIST_COMMON = $(srcdir)/Makefile.in Makefile.am
  22.170 +all: all-am
  22.171 +
  22.172 +.SUFFIXES:
  22.173 +$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ Makefile.am  $(top_srcdir)/configure.ac $(ACLOCAL_M4)
  22.174 +	cd $(top_srcdir) && \
  22.175 +	  $(AUTOMAKE) --gnu  data/Makefile
  22.176 +Makefile: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.in  $(top_builddir)/config.status
  22.177 +	cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)
  22.178 +
  22.179 +mostlyclean-libtool:
  22.180 +	-rm -f *.lo
  22.181 +
  22.182 +clean-libtool:
  22.183 +	-rm -rf .libs _libs
  22.184 +
  22.185 +distclean-libtool:
  22.186 +	-rm -f libtool
  22.187 +uninstall-info-am:
  22.188 +GnutelladataDATA_INSTALL = $(INSTALL_DATA)
  22.189 +install-GnutelladataDATA: $(Gnutelladata_DATA)
  22.190 +	@$(NORMAL_INSTALL)
  22.191 +	$(mkinstalldirs) $(DESTDIR)$(Gnutelladatadir)
  22.192 +	@list='$(Gnutelladata_DATA)'; for p in $$list; do \
  22.193 +	  if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
  22.194 +	  f="`echo $$p | sed -e 's|^.*/||'`"; \
  22.195 +	  echo " $(GnutelladataDATA_INSTALL) $$d$$p $(DESTDIR)$(Gnutelladatadir)/$$f"; \
  22.196 +	  $(GnutelladataDATA_INSTALL) $$d$$p $(DESTDIR)$(Gnutelladatadir)/$$f; \
  22.197 +	done
  22.198 +
  22.199 +uninstall-GnutelladataDATA:
  22.200 +	@$(NORMAL_UNINSTALL)
  22.201 +	@list='$(Gnutelladata_DATA)'; for p in $$list; do \
  22.202 +	  f="`echo $$p | sed -e 's|^.*/||'`"; \
  22.203 +	  echo " rm -f $(DESTDIR)$(Gnutelladatadir)/$$f"; \
  22.204 +	  rm -f $(DESTDIR)$(Gnutelladatadir)/$$f; \
  22.205 +	done
  22.206 +tags: TAGS
  22.207 +TAGS:
  22.208 +
  22.209 +ctags: CTAGS
  22.210 +CTAGS:
  22.211 +
  22.212 +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
  22.213 +
  22.214 +top_distdir = ..
  22.215 +distdir = $(top_distdir)/$(PACKAGE)-$(VERSION)
  22.216 +
  22.217 +distdir: $(DISTFILES)
  22.218 +	@srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \
  22.219 +	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \
  22.220 +	list='$(DISTFILES)'; for file in $$list; do \
  22.221 +	  case $$file in \
  22.222 +	    $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \
  22.223 +	    $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \
  22.224 +	  esac; \
  22.225 +	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
  22.226 +	  dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \
  22.227 +	  if test "$$dir" != "$$file" && test "$$dir" != "."; then \
  22.228 +	    dir="/$$dir"; \
  22.229 +	    $(mkinstalldirs) "$(distdir)$$dir"; \
  22.230 +	  else \
  22.231 +	    dir=''; \
  22.232 +	  fi; \
  22.233 +	  if test -d $$d/$$file; then \
  22.234 +	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
  22.235 +	      cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
  22.236 +	    fi; \
  22.237 +	    cp -pR $$d/$$file $(distdir)$$dir || exit 1; \
  22.238 +	  else \
  22.239 +	    test -f $(distdir)/$$file \
  22.240 +	    || cp -p $$d/$$file $(distdir)/$$file \
  22.241 +	    || exit 1; \
  22.242 +	  fi; \
  22.243 +	done
  22.244 +check-am: all-am
  22.245 +check: check-am
  22.246 +all-am: Makefile $(DATA)
  22.247 +
  22.248 +installdirs:
  22.249 +	$(mkinstalldirs) $(DESTDIR)$(Gnutelladatadir)
  22.250 +install: install-am
  22.251 +install-exec: install-exec-am
  22.252 +install-data: install-data-am
  22.253 +uninstall: uninstall-am
  22.254 +
  22.255 +install-am: all-am
  22.256 +	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
  22.257 +
  22.258 +installcheck: installcheck-am
  22.259 +install-strip:
  22.260 +	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
  22.261 +	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
  22.262 +	  `test -z '$(STRIP)' || \
  22.263 +	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
  22.264 +mostlyclean-generic:
  22.265 +
  22.266 +clean-generic:
  22.267 +
  22.268 +distclean-generic:
  22.269 +	-rm -f $(CONFIG_CLEAN_FILES)
  22.270 +
  22.271 +maintainer-clean-generic:
  22.272 +	@echo "This command is intended for maintainers to use"
  22.273 +	@echo "it deletes files that may require special tools to rebuild."
  22.274 +clean: clean-am
  22.275 +
  22.276 +clean-am: clean-generic clean-libtool mostlyclean-am
  22.277 +
  22.278 +distclean: distclean-am
  22.279 +	-rm -f Makefile
  22.280 +distclean-am: clean-am distclean-generic distclean-libtool
  22.281 +
  22.282 +dvi: dvi-am
  22.283 +
  22.284 +dvi-am:
  22.285 +
  22.286 +info: info-am
  22.287 +
  22.288 +info-am:
  22.289 +
  22.290 +install-data-am: install-GnutelladataDATA
  22.291 +
  22.292 +install-exec-am:
  22.293 +
  22.294 +install-info: install-info-am
  22.295 +
  22.296 +install-man:
  22.297 +
  22.298 +installcheck-am:
  22.299 +
  22.300 +maintainer-clean: maintainer-clean-am
  22.301 +	-rm -f Makefile
  22.302 +maintainer-clean-am: distclean-am maintainer-clean-generic
  22.303 +
  22.304 +mostlyclean: mostlyclean-am
  22.305 +
  22.306 +mostlyclean-am: mostlyclean-generic mostlyclean-libtool
  22.307 +
  22.308 +pdf: pdf-am
  22.309 +
  22.310 +pdf-am:
  22.311 +
  22.312 +ps: ps-am
  22.313 +
  22.314 +ps-am:
  22.315 +
  22.316 +uninstall-am: uninstall-GnutelladataDATA uninstall-info-am
  22.317 +
  22.318 +.PHONY: all all-am check check-am clean clean-generic clean-libtool \
  22.319 +	distclean distclean-generic distclean-libtool distdir dvi \
  22.320 +	dvi-am info info-am install install-GnutelladataDATA install-am \
  22.321 +	install-data install-data-am install-exec install-exec-am \
  22.322 +	install-info install-info-am install-man install-strip \
  22.323 +	installcheck installcheck-am installdirs maintainer-clean \
  22.324 +	maintainer-clean-generic mostlyclean mostlyclean-generic \
  22.325 +	mostlyclean-libtool pdf pdf-am ps ps-am uninstall \
  22.326 +	uninstall-GnutelladataDATA uninstall-am uninstall-info-am
  22.327 +
  22.328 +# Tell versions [3.59,3.63) of GNU make to not export all variables.
  22.329 +# Otherwise a system limit (for SysV at least) may be exceeded.
  22.330 +.NOEXPORT:
    23.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    23.2 +++ b/data/gwebcaches	Sat Feb 20 21:18:28 2010 -0800
    23.3 @@ -0,0 +1,43 @@
    23.4 +http://bootstrap.gtkg.net/ 0
    23.5 +http://cache.kicks-ass.net:8000/ 0
    23.6 +http://galvatron.dyndns.org:59009/gwcache 0
    23.7 +http://gwc1c.olden.ch.3557.nyud.net:8090/gwc/ 0
    23.8 +http://gwc2.nonexiste.net/ 0
    23.9 +http://gwcrab.sarcastro.com:8001/ 0
   23.10 +http://kisama.ath.cx:8080/ 0
   23.11 +http://krill.shacknet.nu:20095/gwc 0
   23.12 +http://loot.alumnigroup.org/ 0
   23.13 +http://overbeer.ghostwhitecrab.de/ 0
   23.14 +http://t.az.is.teh.r0x0r.gtkg.de/ 0
   23.15 +http://tribaldance.ibiza.bishopston.net:3558/ 0
   23.16 +http://xn--nc-hpa.de/ 0
   23.17 +http://pokerface.ibiza.bishopston.net:3558/ 0
   23.18 +http://mcache.firstlight.dk/mcache.php 0
   23.19 +http://gwc.greyfade.us:8080/gwc/ 0
   23.20 +http://gcache1.downtownurban.com/gwcii.php 0
   23.21 +http://g2cache.theg2.net/gwcache/lynnx.asp 0
   23.22 +http://gwc.nonexiste.net/ 0
   23.23 +http://www.deepnetexplorer.co.uk/webcache/ 0
   23.24 +http://www.deepnetexplorer.co.uk/webcache/index.asp 0
   23.25 +http://www.sexymobile.co.za/cache.asp 0
   23.26 +http://portalemedia.shinranet.com/modules/AllMyGuests/gcache.php 0
   23.27 +http://www.exactmobile.co.za/cache.asp 0
   23.28 +http://www.exactmobile.co.za/cache.asp/ 0
   23.29 +http://blogblogsoupdocwindowgluenewsuo.xolox.nl/gwebcache/default.asp 0
   23.30 +http://bloxtwasavsuedev.xolox.nl/gwebcache/default.asp 0
   23.31 +http://extrasap.xolox.nl/gwebcache/default.asp 0
   23.32 +http://gcachw.xolox.nl/gwebcache/ 0
   23.33 +http://intense.homelinux.coww.xolox.nl/gwebcache/ 0
   23.34 +http://noxnoxtelasox.xolox.nl/gwebcache/default.asp 0
   23.35 +http://ophlh8ohnjhxfvnnkoalokd8vxc.xolox.nl/gwebcache/default.asp 0
   23.36 +http://xyz.xolox.nl/gwebcache/ 0
   23.37 +http://reukiodo.dyndns.org/gwebcache/gwcii.php 0
   23.38 +http://wildcard-dns-sucks-biiiiig-time.xolox.nl/gwebcache/ 0
   23.39 +http://www.xolox.nl/gwebcache/ 0
   23.40 +http://www.xolox.nl/gwebcache/default.asp 0
   23.41 +http://www.easwww.xolox.nl/gwebcache/ 0
   23.42 +http://wefucktheworld.xolox.nl/gwebcache/default.asp 0
   23.43 +http://what.xolox.nl/gwebcache/ 0
   23.44 +http://wildcard-dns-sucks-biiiiig-time.xolox.nl/gwebcache/default.asp 0
   23.45 +http://www.easwww.xolox.nl/GWEBcache/ 0
   23.46 +http://www.easwww.xolox.nl/gwebcache/default.asp 0
    24.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    24.2 +++ b/data/hostiles.txt	Sat Feb 20 21:18:28 2010 -0800
    24.3 @@ -0,0 +1,16078 @@
    24.4 +204.9.116.0/255.255.253.0
    24.5 +204.193.136.0/255.255.255.0
    24.6 +212.71.252.0/255.255.255.0
    24.7 +38.118.150.0/255.255.235.0
    24.8 +0.0.0.1/252.0.0.1
    24.9 +4.0.38.42/255.255.255.245
   24.10 +4.0.38.74/255.255.255.249
   24.11 +4.0.38.114/255.255.255.249
   24.12 +4.0.242.66/255.255.255.241
   24.13 +4.1.75.142/255.255.255.241
   24.14 +4.1.137.10/255.255.255.237
   24.15 +4.1.137.30/255.255.255.241
   24.16 +4.1.137.218/255.255.255.219
   24.17 +4.1.138.150/255.255.255.249
   24.18 +4.1.143.86/255.255.255.249
   24.19 +4.2.144.64/255.255.255.224
   24.20 +4.2.144.224/255.255.255.248
   24.21 +4.2.144.248/255.255.255.248
   24.22 +4.2.153.0/255.255.255.248
   24.23 +4.2.160.64/255.255.255.240
   24.24 +4.2.161.0/255.255.255.248
   24.25 +4.2.161.128/255.255.255.128
   24.26 +4.2.162.128/255.255.255.248
   24.27 +4.2.162.144/255.255.255.248
   24.28 +4.2.170.144/255.255.255.248
   24.29 +4.2.173.32/255.255.255.224
   24.30 +4.2.176.64/255.255.255.248
   24.31 +4.2.176.88/255.255.255.248
   24.32 +4.2.176.224/255.255.255.240
   24.33 +4.2.179.32/255.255.255.240
   24.34 +4.2.179.232/255.255.255.248
   24.35 +4.2.179.240/255.255.255.248
   24.36 +4.2.187.128/255.255.255.128
   24.37 +4.2.188.96/255.255.255.248
   24.38 +4.2.192.64/255.255.255.240
   24.39 +4.2.225.248/255.255.255.248
   24.40 +4.2.227.0/255.255.255.224
   24.41 +4.2.227.72/255.255.255.248
   24.42 +4.2.227.80/255.255.255.248
   24.43 +4.2.227.128/255.255.255.248
   24.44 +4.17.1.64/255.255.255.224
   24.45 +4.17.2.240/255.255.255.240
   24.46 +4.17.3.128/255.255.255.192
   24.47 +4.17.24.0/255.255.251.0
   24.48 +4.17.71.200/255.255.255.248
   24.49 +4.17.129.64/255.255.255.248
   24.50 +4.17.130.0/255.255.255.224
   24.51 +4.17.130.88/255.255.255.248
   24.52 +4.17.135.8/255.255.255.248
   24.53 +4.17.140.48/255.255.255.240
   24.54 +4.17.142.128/255.255.255.192
   24.55 +4.17.160.128/255.255.255.224
   24.56 +4.17.160.240/255.255.255.248
   24.57 +4.17.168.224/255.255.255.224
   24.58 +4.17.180.0/255.255.254.0
   24.59 +4.17.183.112/255.255.255.248
   24.60 +4.17.183.128/255.255.255.128
   24.61 +4.17.192.64/255.255.255.240
   24.62 +4.17.192.128/255.255.255.128
   24.63 +4.17.222.96/255.255.255.224
   24.64 +4.17.229.0/255.255.255.224
   24.65 +4.17.245.128/255.255.255.128
   24.66 +4.18.5.128/255.255.255.192
   24.67 +4.18.32.96/255.255.255.224
   24.68 +4.18.32.128/255.255.255.224
   24.69 +4.18.32.184/255.255.255.248
   24.70 +4.18.34.136/255.255.255.248
   24.71 +4.18.34.224/255.255.255.248
   24.72 +4.18.35.200/255.255.255.248
   24.73 +4.18.37.16/255.255.255.240
   24.74 +4.18.37.128/255.255.255.128
   24.75 +4.18.40.64/255.255.255.240
   24.76 +4.18.40.160/255.255.255.248
   24.77 +4.18.42.8/255.255.255.248
   24.78 +4.18.44.80/255.255.255.240
   24.79 +4.18.49.0/255.255.255.240
   24.80 +4.18.49.224/255.255.255.240
   24.81 +4.18.52.176/255.255.255.240
   24.82 +4.18.55.144/255.255.255.248
   24.83 +4.18.55.152/255.255.255.248
   24.84 +4.18.63.0/255.255.255.192
   24.85 +4.18.78.128/255.255.255.128
   24.86 +4.18.96.168/255.255.255.248
   24.87 +4.18.101.0/255.255.255.248
   24.88 +4.18.101.16/255.255.255.240
   24.89 +4.18.101.64/255.255.255.192
   24.90 +4.18.101.224/255.255.255.224
   24.91 +4.18.128.88/255.255.255.248
   24.92 +4.18.142.128/255.255.255.192
   24.93 +4.18.154.0/255.255.255.0
   24.94 +4.18.162.48/255.255.255.240
   24.95 +4.18.192.176/255.255.255.240
   24.96 +4.18.228.0/255.255.255.0
   24.97 +4.18.234.0/255.255.255.0
   24.98 +4.18.239.48/255.255.255.240
   24.99 +4.18.239.192/255.255.255.192
  24.100 +4.18.246.0/255.255.255.224
  24.101 +4.18.247.128/255.255.255.128
  24.102 +4.18.253.0/255.255.255.240
  24.103 +4.18.253.48/255.255.255.240
  24.104 +4.18.253.64/255.255.255.192
  24.105 +4.19.32.0/255.255.255.248
  24.106 +4.19.32.8/255.255.255.248
  24.107 +4.19.32.16/255.255.255.240
  24.108 +4.19.67.32/255.255.255.248
  24.109 +4.19.67.48/255.255.255.248
  24.110 +4.19.68.112/255.255.255.240
  24.111 +4.19.72.0/255.255.254.0
  24.112 +4.19.74.0/255.255.255.0
  24.113 +4.19.76.0/255.255.255.224
  24.114 +4.19.83.0/255.255.255.0
  24.115 +4.19.84.128/255.255.255.0
  24.116 +4.19.90.0/255.255.255.128
  24.117 +4.19.90.128/255.255.255.128
  24.118 +4.19.93.48/255.255.255.240
  24.119 +4.19.93.160/255.255.255.240
  24.120 +4.19.99.48/255.255.255.240
  24.121 +4.19.225.0/255.255.255.0
  24.122 +4.20.2.0/255.255.254.0
  24.123 +4.20.14.0/255.255.254.0
  24.124 +4.20.17.0/255.255.253.0
  24.125 +4.20.32.0/255.255.255.248
  24.126 +4.20.75.0/255.255.255.128
  24.127 +4.20.96.48/255.255.255.248
  24.128 +4.20.105.0/255.255.255.240
  24.129 +4.20.128.64/255.255.255.224
  24.130 +4.20.161.0/255.255.255.248
  24.131 +4.20.161.136/255.255.255.248
  24.132 +4.20.192.32/255.255.255.240
  24.133 +4.20.192.48/255.255.255.240
  24.134 +4.20.192.128/255.255.255.240
  24.135 +4.20.224.64/255.255.255.224
  24.136 +4.20.224.128/255.255.255.192
  24.137 +4.20.228.0/255.255.255.0
  24.138 +4.21.40.0/255.255.255.128
  24.139 +4.21.42.0/255.255.255.0
  24.140 +4.21.68.48/255.255.255.248
  24.141 +4.21.70.0/255.255.255.0
  24.142 +4.21.76.32/255.255.255.224
  24.143 +4.21.76.120/255.255.255.248
  24.144 +4.21.87.64/255.255.255.240
  24.145 +4.21.87.224/255.255.255.240
  24.146 +4.21.96.16/255.255.255.248
  24.147 +4.21.96.112/255.255.255.240
  24.148 +4.21.100.0/255.255.255.128
  24.149 +4.21.100.128/255.255.255.248
  24.150 +4.21.100.184/255.255.255.248
  24.151 +4.21.100.192/255.255.255.192
  24.152 +4.21.108.8/255.255.255.248
  24.153 +4.21.108.32/255.255.255.248
  24.154 +4.21.108.48/255.255.255.248
  24.155 +4.21.108.224/255.255.255.240
  24.156 +4.21.111.208/255.255.255.240
  24.157 +4.21.111.240/255.255.255.248
  24.158 +4.21.114.80/255.255.255.240
  24.159 +4.21.114.96/255.255.255.224
  24.160 +4.21.114.144/255.255.255.248
  24.161 +4.21.116.0/255.255.255.128
  24.162 +4.21.120.24/255.255.255.248
  24.163 +4.21.122.0/255.255.255.248
  24.164 +4.21.122.8/255.255.255.248
  24.165 +4.21.122.16/255.255.255.248
  24.166 +4.21.122.24/255.255.255.248
  24.167 +4.21.122.64/255.255.255.248
  24.168 +4.21.122.192/255.255.255.192
  24.169 +4.21.126.0/255.255.254.192
  24.170 +4.21.129.16/255.255.255.240
  24.171 +4.21.132.0/255.255.255.248
  24.172 +4.21.132.64/255.255.255.192
  24.173 +4.21.133.0/255.255.255.0
  24.174 +4.21.139.64/255.255.255.224
  24.175 +4.21.139.128/255.255.255.128
  24.176 +4.21.140.0/255.255.255.192
  24.177 +4.21.148.64/255.255.255.224
  24.178 +4.21.148.96/255.255.255.224
  24.179 +4.21.148.128/255.255.255.240
  24.180 +4.21.148.144/255.255.255.240
  24.181 +4.21.154.224/255.255.255.224
  24.182 +4.21.155.0/255.255.255.128
  24.183 +4.21.160.0/255.255.255.248
  24.184 +4.21.161.216/255.255.255.248
  24.185 +4.21.161.224/255.255.255.248
  24.186 +4.21.161.232/255.255.255.248
  24.187 +4.21.164.0/255.255.255.192
  24.188 +4.21.165.32/255.255.255.240
  24.189 +4.21.166.64/255.255.255.240
  24.190 +4.21.166.80/255.255.255.248
  24.191 +4.21.166.128/255.255.255.192
  24.192 +4.21.167.160/255.255.255.224
  24.193 +4.21.169.0/255.255.255.0
  24.194 +4.21.170.0/255.255.254.0
  24.195 +4.21.176.128/255.255.255.128
  24.196 +4.21.179.32/255.255.255.224
  24.197 +4.21.181.112/255.255.255.240
  24.198 +4.21.181.184/255.255.255.248
  24.199 +4.21.192.192/255.255.255.240
  24.200 +4.21.194.192/255.255.255.224
  24.201 +4.21.194.232/255.255.255.248
  24.202 +4.21.196.128/255.255.255.248
  24.203 +4.21.196.224/255.255.255.240
  24.204 +4.21.197.128/255.255.255.192
  24.205 +4.21.197.192/255.255.255.224
  24.206 +4.21.197.224/255.255.255.248
  24.207 +4.21.198.0/255.255.255.240
  24.208 +4.21.211.0/255.255.255.248
  24.209 +4.21.212.0/255.255.255.0
  24.210 +4.21.214.0/255.255.255.128
  24.211 +4.22.32.88/255.255.255.248
  24.212 +4.22.66.0/255.255.254.0
  24.213 +4.22.72.0/255.255.248.0
  24.214 +4.22.106.56/255.255.255.248
  24.215 +4.22.121.0/255.255.255.0
  24.216 +4.22.125.128/255.255.255.128
  24.217 +4.22.129.0/255.255.255.0
  24.218 +4.22.134.0/255.255.254.0
  24.219 +4.22.136.160/255.255.255.248
  24.220 +4.22.138.128/255.255.255.128
  24.221 +4.22.139.192/255.255.255.192
  24.222 +4.22.140.128/255.255.255.192
  24.223 +4.22.150.0/255.255.255.248
  24.224 +4.22.150.8/255.255.255.248
  24.225 +4.22.151.0/255.255.255.224
  24.226 +4.22.173.192/255.255.255.240
  24.227 +4.22.237.0/255.255.255.0
  24.228 +4.22.248.64/255.255.255.224
  24.229 +4.23.9.96/255.255.255.240
  24.230 +4.23.12.0/255.255.255.0
  24.231 +4.23.64.0/255.255.255.0
  24.232 +4.23.65.24/255.255.255.248
  24.233 +4.23.96.0/255.255.252.0
  24.234 +4.23.104.176/255.255.255.240
  24.235 +4.23.105.0/255.255.255.0
  24.236 +4.23.132.224/255.255.255.240
  24.237 +4.23.160.176/255.255.255.248
  24.238 +4.23.160.184/255.255.255.248
  24.239 +4.23.160.240/255.255.255.240
  24.240 +4.23.161.208/255.255.255.240
  24.241 +4.23.170.16/255.255.255.240
  24.242 +4.23.170.128/255.255.255.240
  24.243 +4.23.170.224/255.255.255.240
  24.244 +4.23.172.32/255.255.255.240
  24.245 +4.23.179.120/255.255.255.248
  24.246 +4.23.183.192/255.255.255.192
  24.247 +4.24.32.238/255.255.255.238
  24.248 +4.24.48.206/255.255.255.241
  24.249 +4.24.48.230/255.255.255.249
  24.250 +4.24.48.238/255.255.255.239
  24.251 +4.24.58.138/255.255.255.241
  24.252 +4.24.70.58/255.255.255.213
  24.253 +4.24.70.194/255.255.255.229
  24.254 +4.24.70.222/255.255.255.249
  24.255 +4.24.86.154/255.255.255.249
  24.256 +4.24.92.66/255.255.255.249
  24.257 +4.24.154.206/255.255.255.206
  24.258 +4.24.176.54/255.255.255.54
  24.259 +4.24.195.38/255.255.255.249
  24.260 +4.24.195.58/255.255.255.201
  24.261 +4.24.198.222/255.255.255.249
  24.262 +4.24.203.58/255.255.255.249
  24.263 +4.24.214.150/255.255.255.249
  24.264 +4.24.239.58/255.255.255.249
  24.265 +4.24.247.114/255.255.255.249
  24.266 +4.34.0.0/255.255.128.0
  24.267 +4.36.109.0/255.255.255.0
  24.268 +4.36.129.0/255.255.255.192
  24.269 +4.36.129.128/255.255.255.192
  24.270 +4.36.198.0/255.255.255.128
  24.271 +4.36.226.128/255.255.255.128
  24.272 +4.37.64.136/255.255.255.248
  24.273 +4.37.64.144/255.255.255.248
  24.274 +4.37.64.152/255.255.255.248
  24.275 +4.37.68.8/255.255.255.248
  24.276 +4.37.71.8/255.255.255.248
  24.277 +4.37.72.0/255.255.255.128
  24.278 +4.37.96.80/255.255.255.248
  24.279 +4.37.96.120/255.255.255.248
  24.280 +4.37.109.0/255.255.255.0
  24.281 +4.37.113.0/255.255.255.224
  24.282 +4.37.113.32/255.255.255.224
  24.283 +4.37.160.112/255.255.255.248
  24.284 +4.37.248.0/255.255.248.0
  24.285 +4.38.38.0/255.255.255.128
  24.286 +4.38.41.128/255.255.255.128
  24.287 +4.38.79.0/255.255.255.128
  24.288 +4.38.79.128/255.255.255.128
  24.289 +4.38.93.96/255.255.255.224
  24.290 +4.38.94.0/255.255.255.160
  24.291 +4.38.94.96/255.255.255.248
  24.292 +4.39.37.0/255.255.255.128
  24.293 +4.42.176.184/255.255.255.248
  24.294 +4.42.189.80/255.255.255.240
  24.295 +4.42.192.200/255.255.255.248
  24.296 +4.42.204.192/255.255.255.192
  24.297 +4.42.208.16/255.255.255.248
  24.298 +4.42.208.24/255.255.255.248
  24.299 +4.42.209.184/255.255.255.248
  24.300 +4.42.209.224/255.255.255.248
  24.301 +4.42.224.96/255.255.255.248
  24.302 +4.42.224.112/255.255.255.240
  24.303 +4.42.237.224/255.255.255.224
  24.304 +4.42.244.160/255.255.255.240
  24.305 +4.42.244.192/255.255.255.224
  24.306 +4.42.244.224/255.255.255.240
  24.307 +4.43.32.200/255.255.255.248
  24.308 +4.43.36.0/255.255.255.192
  24.309 +4.43.47.0/255.255.255.0
  24.310 +4.43.64.160/255.255.255.248
  24.311 +4.43.67.64/255.255.255.192
  24.312 +4.43.96.0/255.255.255.0
  24.313 +4.43.101.0/255.255.255.128
  24.314 +4.43.108.0/255.255.255.0
  24.315 +4.43.121.224/255.255.255.240
  24.316 +4.43.124.64/255.255.255.192
  24.317 +4.43.124.192/255.255.255.192
  24.318 +4.67.10.0/255.255.255.192
  24.319 +4.67.10.128/255.255.255.128
  24.320 +4.67.18.0/255.255.255.0
  24.321 +4.67.43.0/255.255.255.0
  24.322 +4.67.72.0/255.255.255.0
  24.323 +4.67.80.64/255.255.255.192
  24.324 +4.134.133.64/255.255.255.192
  24.325 +8.0.0.0/255.0.0.0
  24.326 +9.0.0.0/255.0.0.0
  24.327 +12.0.27.0/255.255.255.0
  24.328 +12.0.32.232/255.255.255.248
  24.329 +12.0.45.208/255.255.255.248
  24.330 +12.1.175.96/255.255.255.240
  24.331 +12.1.224.0/255.255.255.240
  24.332 +12.1.224.32/255.255.255.240
  24.333 +12.1.224.96/255.255.255.240
  24.334 +12.1.231.128/255.255.255.128
  24.335 +12.1.240.0/255.255.254.128
  24.336 +12.2.21.0/255.255.255.0
  24.337 +12.2.27.0/255.255.255.128
  24.338 +12.2.121.0/255.255.255.128
  24.339 +12.2.153.224/255.255.255.224
  24.340 +12.2.215.0/255.255.255.0
  24.341 +12.2.224.0/255.255.255.248
  24.342 +12.2.231.0/255.255.255.128
  24.343 +12.3.50.120/255.255.255.248
  24.344 +12.3.126.0/255.255.254.0
  24.345 +12.3.159.0/255.255.255.128
  24.346 +12.4.3.0/255.255.255.0
  24.347 +12.4.10.0/255.255.255.128
  24.348 +12.4.21.192/255.255.255.192
  24.349 +12.4.48.128/255.255.255.128
  24.350 +12.4.69.32/255.255.255.224
  24.351 +12.4.102.0/255.255.255.0
  24.352 +12.4.123.32/255.255.255.224
  24.353 +12.4.123.64/255.255.255.240
  24.354 +12.4.196.21/255.255.255.240
  24.355 +12.4.208.144/255.255.255.240
  24.356 +12.4.208.192/255.255.255.192
  24.357 +12.4.214.24/255.255.255.248
  24.358 +12.4.214.96/255.255.255.224
  24.359 +12.4.214.128/255.255.255.240
  24.360 +12.4.214.160/255.255.255.240
  24.361 +12.4.217.16/255.255.255.240
  24.362 +12.5.153.0/255.255.255.128
  24.363 +12.5.171.80/255.255.255.240
  24.364 +12.5.225.8/255.255.255.248
  24.365 +12.5.239.0/255.255.255.0
  24.366 +12.5.248.128/255.255.255.128
  24.367 +12.6.42.0/255.255.254.0
  24.368 +12.6.96.0/255.255.255.0
  24.369 +12.6.138.168/255.255.255.248
  24.370 +12.6.146.0/255.255.255.0
  24.371 +12.6.157.128/255.255.255.192
  24.372 +12.6.225.0/255.255.255.0
  24.373 +12.6.243.80/255.255.255.240
  24.374 +12.6.246.128/255.255.255.128
  24.375 +12.7.133.0/255.255.255.0
  24.376 +12.7.209.0/255.255.255.128
  24.377 +12.8.0.128/255.255.255.248
  24.378 +12.8.0.160/255.255.255.240
  24.379 +12.8.1.192/255.255.255.240
  24.380 +12.8.2.0/255.255.254.0
  24.381 +12.8.6.128/255.255.255.240
  24.382 +12.8.6.144/255.255.255.240
  24.383 +12.8.6.160/255.255.255.240
  24.384 +12.8.17.80/255.255.255.240
  24.385 +12.8.17.192/255.255.255.248
  24.386 +12.8.19.144/255.255.255.240
  24.387 +12.8.21.128/255.255.255.0
  24.388 +12.8.36.32/255.255.255.240
  24.389 +12.8.47.64/255.255.255.240
  24.390 +12.9.17.0/255.255.255.0
  24.391 +12.9.27.64/255.255.255.160
  24.392 +12.9.27.176/255.255.255.240
  24.393 +12.9.27.192/255.255.255.240
  24.394 +12.9.27.240/255.255.255.240
  24.395 +12.9.125.0/255.255.255.0
  24.396 +12.9.145.96/255.255.255.224
  24.397 +12.9.200.144/255.255.255.240
  24.398 +12.9.240.160/255.255.255.240
  24.399 +12.9.242.0/255.255.255.0
  24.400 +12.9.246.0/255.255.255.248
  24.401 +12.9.246.48/255.255.255.240
  24.402 +12.9.246.224/255.255.255.224
  24.403 +12.10.17.192/255.255.255.224
  24.404 +12.10.34.48/255.255.255.240
  24.405 +12.10.117.144/255.255.255.240
  24.406 +12.10.146.0/255.255.255.0
  24.407 +12.10.147.128/255.255.255.128
  24.408 +12.10.149.0/255.255.255.0
  24.409 +12.10.192.0/255.255.248.0
  24.410 +12.10.208.0/255.255.254.0
  24.411 +12.10.216.128/255.255.255.128
  24.412 +12.11.145.64/255.255.255.192
  24.413 +12.11.145.128/255.255.255.128
  24.414 +12.11.178.192/255.255.255.240
  24.415 +12.11.179.0/255.255.255.0
  24.416 +12.13.60.128/255.255.255.128
  24.417 +12.13.61.192/255.255.255.224
  24.418 +12.13.102.208/255.255.255.240
  24.419 +12.13.114.208/255.255.255.240
  24.420 +12.13.167.128/255.255.255.128
  24.421 +12.13.174.128/255.255.255.128
  24.422 +12.13.178.200/255.255.255.248
  24.423 +12.13.207.0/255.255.255.0
  24.424 +12.13.216.64/255.255.255.224
  24.425 +12.14.23.0/255.255.255.192
  24.426 +12.14.64.0/255.255.255.192
  24.427 +12.14.82.192/255.255.255.192
  24.428 +12.14.126.0/255.255.255.192
  24.429 +12.14.218.128/255.255.255.192
  24.430 +12.15.11.0/255.255.255.0
  24.431 +12.15.208.0/255.255.255.128
  24.432 +12.16.33.16/255.255.255.224
  24.433 +12.16.156.96/255.255.255.240
  24.434 +12.17.12.64/255.255.255.240
  24.435 +12.17.12.112/255.255.255.248
  24.436 +12.17.23.48/255.255.255.248
  24.437 +12.17.76.0/255.255.252.0
  24.438 +12.17.117.96/255.255.255.240
  24.439 +12.17.122.112/255.255.255.240
  24.440 +12.17.125.208/255.255.255.240
  24.441 +12.17.131.176/255.255.255.248
  24.442 +12.17.136.128/255.255.255.128
  24.443 +12.17.172.8/255.255.255.248
  24.444 +12.17.195.0/255.255.255.0
  24.445 +12.17.210.96/255.255.255.240
  24.446 +12.17.221.240/255.255.255.240
  24.447 +12.17.225.96/255.255.255.224
  24.448 +12.18.6.0/255.255.255.128
  24.449 +12.18.63.96/255.255.255.224
  24.450 +12.18.71.80/255.255.255.240
  24.451 +12.18.119.0/255.255.255.0
  24.452 +12.18.140.144/255.255.255.240
  24.453 +12.18.145.0/255.255.255.128
  24.454 +12.18.154.0/255.255.255.128
  24.455 +12.18.252.128/255.255.255.192
  24.456 +12.19.23.0/255.255.255.0
  24.457 +12.19.52.64/255.255.255.240
  24.458 +12.19.82.0/255.255.255.0
  24.459 +12.20.24.0/255.255.255.240
  24.460 +12.20.25.112/255.255.255.240
  24.461 +12.20.128.0/255.255.255.128
  24.462 +12.20.200.0/255.255.252.0
  24.463 +12.20.217.184/255.255.255.248
  24.464 +12.20.225.0/255.255.255.192
  24.465 +12.21.10.160/255.255.255.224
  24.466 +12.21.94.0/255.255.255.192
  24.467 +12.21.129.0/255.255.255.192
  24.468 +12.21.167.128/255.255.255.192
  24.469 +12.21.172.0/255.255.255.128
  24.470 +12.21.174.112/255.255.255.240
  24.471 +12.21.181.0/255.255.255.192
  24.472 +12.21.182.0/255.255.255.192
  24.473 +12.21.183.0/255.255.255.192
  24.474 +12.21.186.8/255.255.255.248
  24.475 +12.22.36.192/255.255.255.192
  24.476 +12.22.53.80/255.255.255.248
  24.477 +12.22.82.224/255.255.255.224
  24.478 +12.22.131.0/255.255.255.0
  24.479 +12.22.163.112/255.255.255.240
  24.480 +12.22.220.240/255.255.255.240
  24.481 +12.22.223.32/255.255.255.240
  24.482 +12.23.28.0/255.255.254.240
  24.483 +12.23.29.32/255.255.255.224
  24.484 +12.23.29.96/255.255.255.224
  24.485 +12.23.29.176/255.255.255.240
  24.486 +12.23.84.0/255.255.255.0
  24.487 +12.23.96.224/255.255.255.248
  24.488 +12.23.97.0/255.255.255.0
  24.489 +12.23.100.0/255.255.254.0
  24.490 +12.23.247.128/255.255.255.128
  24.491 +12.24.116.32/255.255.255.224
  24.492 +12.24.137.128/255.255.255.128
  24.493 +12.25.46.0/255.255.255.0
  24.494 +12.25.165.232/255.255.255.248
  24.495 +12.25.173.64/255.255.255.192
  24.496 +12.25.180.0/255.255.255.0
  24.497 +12.25.204.0/255.255.254.0
  24.498 +12.26.26.32/255.255.255.224
  24.499 +12.26.52.16/255.255.255.240
  24.500 +12.26.70.0/255.255.255.192
  24.501 +12.26.71.128/255.255.255.128
  24.502 +12.26.74.112/255.255.255.240
  24.503 +12.26.85.192/255.255.255.224
  24.504 +12.26.224.192/255.255.255.224
  24.505 +12.26.225.0/255.255.255.192
  24.506 +12.27.22.80/255.255.255.240
  24.507 +12.27.76.80/255.255.255.240
  24.508 +12.27.204.0/255.255.255.0
  24.509 +12.27.233.0/255.255.255.128
  24.510 +12.28.8.192/255.255.255.240
  24.511 +12.28.12.0/255.255.255.248
  24.512 +12.28.17.0/255.255.255.0
  24.513 +12.28.72.128/255.255.255.192
  24.514 +12.28.199.0/255.255.255.0
  24.515 +12.28.222.0/255.255.254.0
  24.516 +12.28.233.0/255.255.255.192
  24.517 +12.29.112.0/255.255.255.240
  24.518 +12.30.34.0/255.255.255.0
  24.519 +12.30.64.16/255.255.255.240
  24.520 +12.30.80.128/255.255.255.128
  24.521 +12.30.88.80/255.255.255.240
  24.522 +12.30.152.128/255.255.255.128
  24.523 +12.30.156.64/255.255.255.192
  24.524 +12.30.240.192/255.255.255.240
  24.525 +12.30.241.0/255.255.255.0
  24.526 +12.30.242.0/255.255.254.0
  24.527 +12.30.248.144/255.255.255.240
  24.528 +12.31.35.0/255.255.255.128
  24.529 +12.31.64.0/255.255.255.0
  24.530 +12.31.116.32/255.255.255.240
  24.531 +12.31.142.96/255.255.255.240
  24.532 +12.31.168.240/255.255.255.240
  24.533 +12.31.240.112/255.255.255.240
  24.534 +12.32.10.64/255.255.255.224
  24.535 +12.32.69.64/255.255.255.224
  24.536 +12.32.69.128/255.255.255.224
  24.537 +12.32.128.128/255.255.255.224
  24.538 +12.32.180.32/255.255.255.240
  24.539 +12.32.193.128/255.255.255.128
  24.540 +12.33.0.64/255.255.255.240
  24.541 +12.33.0.112/255.255.255.240
  24.542 +12.33.3.32/255.255.255.248
  24.543 +12.33.79.0/255.255.255.128
  24.544 +12.33.92.112/255.255.255.240
  24.545 +12.33.137.0/255.255.255.240
  24.546 +12.33.141.8/255.255.255.248
  24.547 +12.33.141.32/255.255.255.224
  24.548 +12.33.141.128/255.255.255.176
  24.549 +12.33.144.16/255.255.255.248
  24.550 +12.33.144.48/255.255.255.240
  24.551 +12.33.203.240/255.255.255.240
  24.552 +12.34.24.192/255.255.255.192
  24.553 +12.34.27.96/255.255.255.224
  24.554 +12.34.56.128/255.255.255.128
  24.555 +12.34.64.48/255.255.255.240
  24.556 +12.34.102.16/255.255.255.248
  24.557 +12.34.125.192/255.255.255.240
  24.558 +12.34.196.32/255.255.255.224
  24.559 +12.35.47.112/255.255.255.240
  24.560 +12.35.47.160/255.255.255.240
  24.561 +12.35.80.0/255.255.240.0
  24.562 +12.35.166.0/255.255.255.0
  24.563 +12.35.167.0/255.255.255.224
  24.564 +12.35.205.208/255.255.255.240
  24.565 +12.35.244.112/255.255.255.240
  24.566 +12.35.253.176/255.255.255.248
  24.567 +12.36.20.48/255.255.255.240
  24.568 +12.36.131.192/255.255.255.224
  24.569 +12.36.136.48/255.255.255.240
  24.570 +12.36.209.0/255.255.255.0
  24.571 +12.36.242.0/255.255.254.128
  24.572 +12.37.72.0/255.255.255.240
  24.573 +12.37.128.32/255.255.255.240
  24.574 +12.37.128.128/255.255.255.128
  24.575 +12.37.139.168/255.255.255.248
  24.576 +12.37.209.64/255.255.255.240
  24.577 +12.37.209.176/255.255.255.240
  24.578 +12.38.31.216/255.255.255.248
  24.579 +12.38.86.72/255.255.255.248
  24.580 +12.38.87.0/255.255.255.0
  24.581 +12.38.128.48/255.255.255.240
  24.582 +12.38.210.0/255.255.255.192
  24.583 +12.39.34.128/255.255.255.192
  24.584 +12.39.196.80/255.255.255.240
  24.585 +12.39.200.16/255.255.255.224
  24.586 +12.39.202.32/255.255.255.224
  24.587 +12.39.240.0/255.255.255.224
  24.588 +12.39.242.64/255.255.255.224
  24.589 +12.39.247.128/255.255.255.192
  24.590 +12.40.12.176/255.255.255.248
  24.591 +12.40.85.0/255.255.255.0
  24.592 +12.40.92.176/255.255.255.240
  24.593 +12.40.133.192/255.255.255.240
  24.594 +12.40.135.128/255.255.255.240
  24.595 +12.40.163.128/255.255.255.128
  24.596 +12.41.10.96/255.255.255.224
  24.597 +12.41.10.192/255.255.255.192
  24.598 +12.41.57.240/255.255.255.240
  24.599 +12.41.72.0/255.255.255.232
  24.600 +12.41.72.128/255.255.255.128
  24.601 +12.41.172.64/255.255.255.240
  24.602 +12.41.237.0/255.255.255.0
  24.603 +12.42.32.88/255.255.255.248
  24.604 +12.42.43.80/255.255.255.248
  24.605 +12.42.52.0/255.255.255.0
  24.606 +12.42.84.160/255.255.255.240
  24.607 +12.42.160.112/255.255.255.240
  24.608 +12.42.163.24/255.255.255.216
  24.609 +12.42.226.208/255.255.255.248
  24.610 +12.43.212.160/255.255.255.240
  24.611 +12.44.12.64/255.255.255.248
  24.612 +12.44.28.144/255.255.255.240
  24.613 +12.44.31.152/255.255.255.248
  24.614 +12.44.50.112/255.255.255.248
  24.615 +12.44.251.32/255.255.255.248
  24.616 +12.45.13.0/255.255.255.0
  24.617 +12.45.34.224/255.255.255.240
  24.618 +12.45.97.80/255.255.255.248
  24.619 +12.45.127.0/255.255.255.0
  24.620 +12.45.172.152/255.255.255.248
  24.621 +12.45.173.128/255.255.255.128
  24.622 +12.45.230.96/255.255.255.224
  24.623 +12.45.231.0/255.255.255.248
  24.624 +12.45.231.160/255.255.255.224
  24.625 +12.46.0.176/255.255.255.240
  24.626 +12.46.15.0/255.255.255.0
  24.627 +12.46.120.0/255.255.255.128
  24.628 +12.46.138.128/255.255.255.240
  24.629 +12.47.48.144/255.255.255.240
  24.630 +12.47.164.96/255.255.255.248
  24.631 +12.60.32.0/255.255.255.240
  24.632 +12.60.136.80/255.255.255.240
  24.633 +12.61.17.32/255.255.255.240
  24.634 +12.61.168.64/255.255.255.240
  24.635 +12.61.200.128/255.255.255.240
  24.636 +12.62.226.80/255.255.255.240
  24.637 +12.62.229.128/255.255.255.192
  24.638 +12.62.240.0/255.255.255.128
  24.639 +12.96.13.0/255.255.255.128
  24.640 +12.96.39.0/255.255.255.0
  24.641 +12.96.129.192/255.255.255.192
  24.642 +12.96.131.0/255.255.255.224
  24.643 +12.96.236.16/255.255.255.240
  24.644 +12.104.55.80/255.255.255.240
  24.645 +12.104.97.144/255.255.255.248
  24.646 +12.104.152.152/255.255.255.248
  24.647 +12.104.153.0/255.255.255.0
  24.648 +12.104.194.32/255.255.255.224
  24.649 +12.104.222.0/255.255.255.128
  24.650 +12.105.35.16/255.255.255.240
  24.651 +12.105.79.128/255.255.255.240
  24.652 +12.105.235.224/255.255.255.240
  24.653 +12.106.28.128/255.255.255.128
  24.654 +12.106.67.0/255.255.255.0
  24.655 +12.106.237.64/255.255.255.240
  24.656 +12.106.237.192/255.255.255.240
  24.657 +12.107.1.0/255.255.255.0
  24.658 +12.107.2.16/255.255.255.240
  24.659 +12.107.55.64/255.255.255.240
  24.660 +12.107.70.128/255.255.255.224
  24.661 +12.107.80.64/255.255.255.192
  24.662 +12.107.83.96/255.255.255.248
  24.663 +12.107.84.64/255.255.255.240
  24.664 +12.107.84.208/255.255.255.240
  24.665 +12.107.124.96/255.255.255.224
  24.666 +12.107.134.0/255.255.255.128
  24.667 +12.107.134.144/255.255.255.240
  24.668 +12.107.206.128/255.255.255.128
  24.669 +12.107.210.128/255.255.255.128
  24.670 +12.108.4.144/255.255.255.240
  24.671 +12.108.192.168/255.255.255.248
  24.672 +12.109.33.96/255.255.255.224
  24.673 +12.109.131.0/255.255.255.240
  24.674 +12.109.131.24/255.255.255.248
  24.675 +12.109.137.24/255.255.255.248
  24.676 +12.109.137.224/255.255.255.240
  24.677 +12.109.138.144/255.255.255.248
  24.678 +12.109.140.0/255.255.255.224
  24.679 +12.109.149.0/255.255.255.192
  24.680 +12.109.164.0/255.255.252.0
  24.681 +12.109.206.0/255.255.255.224
  24.682 +12.110.93.64/255.255.255.248
  24.683 +12.110.101.48/255.255.255.240
  24.684 +12.110.110.184/255.255.255.184
  24.685 +12.111.18.160/255.255.255.240
  24.686 +12.111.20.208/255.255.255.248
  24.687 +12.111.25.224/255.255.255.240
  24.688 +12.111.70.64/255.255.255.240
  24.689 +12.111.116.0/255.255.255.0
  24.690 +12.111.227.0/255.255.255.216
  24.691 +12.129.16.176/255.255.255.240
  24.692 +12.129.64.0/255.255.192.0
  24.693 +12.129.196.32/255.255.255.240
  24.694 +12.129.207.0/255.255.255.224
  24.695 +12.129.209.80/255.255.255.240
  24.696 +12.129.230.152/255.255.255.216
  24.697 +12.129.232.0/255.255.252.0
  24.698 +12.129.248.208/255.255.255.240
  24.699 +12.130.6.248/255.255.255.248
  24.700 +12.130.14.64/255.255.255.192
  24.701 +12.144.7.192/255.255.255.248
  24.702 +12.144.14.176/255.255.255.240
  24.703 +12.144.36.208/255.255.255.240
  24.704 +12.144.54.80/255.255.255.248
  24.705 +12.144.106.0/255.255.255.128
  24.706 +12.144.198.112/255.255.255.240
  24.707 +12.145.42.0/255.255.255.0
  24.708 +12.145.63.0/255.255.255.0
  24.709 +12.145.126.32/255.255.255.224
  24.710 +12.145.192.0/255.255.255.0
  24.711 +12.145.193.0/255.255.255.192
  24.712 +12.146.65.16/255.255.255.240
  24.713 +12.146.149.208/255.255.255.240
  24.714 +12.146.160.16/255.255.255.248
  24.715 +12.146.196.64/255.255.255.224
  24.716 +12.146.198.160/255.255.255.240
  24.717 +12.147.49.128/255.255.255.248
  24.718 +12.147.232.48/255.255.255.248
  24.719 +12.148.10.16/255.255.255.240
  24.720 +12.148.54.128/255.255.255.192
  24.721 +12.148.80.0/255.255.252.0
  24.722 +12.148.196.128/255.255.255.128
  24.723 +12.148.206.0/255.255.255.0
  24.724 +12.148.209.192/255.255.255.192
  24.725 +12.148.241.0/255.255.255.192
  24.726 +12.149.9.48/255.255.255.240
  24.727 +12.149.9.112/255.255.255.240
  24.728 +12.149.15.128/255.255.255.128
  24.729 +12.149.38.80/255.255.255.240
  24.730 +12.149.41.144/255.255.255.240
  24.731 +12.149.76.32/255.255.255.192
  24.732 +12.149.94.160/255.255.255.224
  24.733 +12.149.115.128/255.255.255.192
  24.734 +12.149.182.96/255.255.255.224
  24.735 +12.149.220.0/255.255.255.224
  24.736 +12.150.104.128/255.255.255.224
  24.737 +12.150.112.240/255.255.255.248
  24.738 +12.150.125.160/255.255.255.240
  24.739 +12.150.185.64/255.255.255.192
  24.740 +12.150.186.0/255.255.255.0
  24.741 +12.150.191.0/255.255.255.0
  24.742 +12.150.205.176/255.255.255.240
  24.743 +12.150.244.240/255.255.255.240
  24.744 +12.150.248.0/255.255.255.224
  24.745 +12.151.3.0/255.255.255.0
  24.746 +12.151.30.48/255.255.255.240
  24.747 +12.151.32.128/255.255.252.128
  24.748 +12.151.42.0/255.255.254.0
  24.749 +12.151.196.48/255.255.255.240
  24.750 +12.152.140.176/255.255.255.224
  24.751 +12.152.140.208/255.255.255.240
  24.752 +12.152.177.0/255.255.255.128
  24.753 +12.152.184.0/255.255.254.0
  24.754 +12.153.20.0/255.255.254.0
  24.755 +12.153.47.96/255.255.255.240
  24.756 +12.153.47.160/255.255.255.240
  24.757 +12.153.64.128/255.255.255.248
  24.758 +12.153.67.112/255.255.255.248
  24.759 +12.154.48.136/255.255.255.248
  24.760 +12.154.48.160/255.255.255.224
  24.761 +12.154.48.224/255.255.255.224
  24.762 +12.154.67.96/255.255.255.224
  24.763 +12.154.80.0/255.255.255.128
  24.764 +12.154.88.0/255.255.255.0
  24.765 +12.154.183.0/255.255.255.0
  24.766 +12.155.35.0/255.255.255.248
  24.767 +12.155.96.0/255.255.255.128
  24.768 +12.155.103.192/255.255.255.192
  24.769 +12.155.105.128/255.255.255.224
  24.770 +12.155.129.128/255.255.255.128
  24.771 +12.155.194.0/255.255.255.248
  24.772 +12.158.1.80/255.255.255.240
  24.773 +12.158.57.96/255.255.255.248
  24.774 +12.158.129.128/255.255.255.128
  24.775 +12.158.141.128/255.255.255.128
  24.776 +12.159.40.248/255.255.255.248
  24.777 +12.159.44.0/255.255.255.192
  24.778 +12.159.240.128/255.255.255.192
  24.779 +12.160.51.0/255.255.255.128
  24.780 +12.160.67.240/255.255.255.240
  24.781 +12.160.68.144/255.255.255.240
  24.782 +12.160.77.208/255.255.255.248
  24.783 +12.160.187.112/255.255.255.240
  24.784 +12.161.5.32/255.255.255.240
  24.785 +12.161.21.208/255.255.255.240
  24.786 +12.161.64.48/255.255.255.248
  24.787 +12.161.65.0/255.255.255.0
  24.788 +12.161.68.0/255.255.252.0
  24.789 +12.161.118.112/255.255.255.224
  24.790 +12.162.33.16/255.255.255.240
  24.791 +12.162.33.48/255.255.255.240
  24.792 +12.162.107.128/255.255.255.192
  24.793 +12.163.178.32/255.255.255.240
  24.794 +12.164.192.0/255.255.255.248
  24.795 +12.164.236.0/255.255.252.0
  24.796 +12.165.33.0/255.255.255.192
  24.797 +12.165.187.128/255.255.255.128
  24.798 +12.166.244.144/255.255.255.240
  24.799 +12.167.146.0/255.255.254.0
  24.800 +12.167.192.128/255.255.255.128
  24.801 +12.168.81.96/255.255.255.224
  24.802 +12.169.40.0/255.255.252.0
  24.803 +12.169.46.0/255.255.255.128
  24.804 +12.169.64.0/255.255.255.128
  24.805 +12.170.132.0/255.255.254.0
  24.806 +12.170.154.0/255.255.254.0
  24.807 +12.170.157.8/255.255.255.248
  24.808 +12.171.160.192/255.255.255.192
  24.809 +12.172.56.0/255.255.255.0
  24.810 +12.173.207.192/255.255.255.248
  24.811 +12.174.92.0/255.255.255.0
  24.812 +12.174.149.160/255.255.255.224
  24.813 +12.175.0.32/255.255.255.240
  24.814 +12.175.124.80/255.255.255.240
  24.815 +12.178.7.0/255.255.255.128
  24.816 +12.178.64.64/255.255.255.248
  24.817 +12.179.225.0/255.255.255.0
  24.818 +12.220.252.0/255.255.252.0
  24.819 +13.0.0.0/255.0.0.0
  24.820 +15.0.0.0/253.0.0.0
  24.821 +24.2.32.0/255.255.224.0
  24.822 +25.0.0.0/254.0.0.0
  24.823 +32.0.0.0/253.0.0.0
  24.824 +38.112.50.0/255.255.144.128
  24.825 +38.112.161.160/255.255.226.160
  24.826 +38.112.191.0/255.254.250.0
  24.827 +38.113.214.0/255.255.255.0
  24.828 +38.113.215.0/255.254.249.0
  24.829 +38.114.222.0/255.255.181.0
  24.830 +38.115.41.0/255.255.165.125
  24.831 +38.115.131.133/255.254.247.193
  24.832 +38.116.139.197/255.255.255.238
  24.833 +38.116.139.216/255.255.255.218
  24.834 +38.116.139.255/255.255.133.255
  24.835 +38.117.6.0/255.255.255.0
  24.836 +38.117.7.0/255.254.120.98
  24.837 +38.118.142.158/255.255.255.112
  24.838 +38.118.143.47/255.255.255.160
  24.839 +38.118.143.144/255.255.255.186
  24.840 +38.118.143.215/255.255.255.244
  24.841 +38.118.143.228/255.255.79.66
  24.842 +38.119.64.162/255.255.253.162
  24.843 +38.119.67.0/255.255.255.0
  24.844 +38.119.68.0/255.255.219.0
  24.845 +38.119.105.0/255.255.255.0
  24.846 +38.119.106.0/255.231.34.0
  24.847 +38.144.72.0/255.255.255.0
  24.848 +38.144.73.0/255.255.131.190
  24.849 +38.144.197.66/255.255.255.66
  24.850 +38.144.198.151/255.144.198.151
  24.851 +40.0.0.0/255.0.0.0
  24.852 +44.0.0.0/254.0.0.0
  24.853 +47.0.0.0/255.0.0.0
  24.854 +49.0.0.0/253.0.0.0
  24.855 +60.32.3.40/255.255.255.248
  24.856 +60.32.3.112/255.255.255.240
  24.857 +60.191.1.208/255.255.255.248
  24.858 +60.191.1.232/255.255.255.248
  24.859 +60.191.3.160/255.255.255.240
  24.860 +60.200.0.0/255.251.0.0
  24.861 +60.234.64.0/255.255.255.248
  24.862 +60.255.0.0/255.255.0.0
  24.863 +61.6.64.168/255.255.255.248
  24.864 +61.6.68.192/255.255.255.248
  24.865 +61.7.5.16/255.255.255.240
  24.866 +61.8.5.48/255.255.255.240
  24.867 +61.8.13.192/255.255.255.240
  24.868 +61.8.244.56/255.255.255.222
  24.869 +61.8.244.128/255.255.255.240
  24.870 +61.8.244.208/255.255.255.240
  24.871 +61.8.247.64/255.255.255.224
  24.872 +61.12.8.160/255.255.255.224
  24.873 +61.13.4.64/255.255.255.192
  24.874 +61.13.4.192/255.255.255.192
  24.875 +61.13.6.64/255.255.255.192
  24.876 +61.13.21.64/255.255.255.192
  24.877 +61.13.29.64/255.255.255.192
  24.878 +61.13.45.192/255.255.255.192
  24.879 +61.13.73.64/255.255.255.192
  24.880 +61.13.118.0/255.255.255.192
  24.881 +61.13.128.224/255.255.255.224
  24.882 +61.13.129.160/255.255.255.224
  24.883 +61.13.137.192/255.255.255.224
  24.884 +61.13.146.128/255.255.255.224
  24.885 +61.13.147.96/255.255.255.224
  24.886 +61.13.159.96/255.255.255.224
  24.887 +61.13.161.192/255.255.255.224
  24.888 +61.14.34.80/255.255.255.248
  24.889 +61.14.55.16/255.255.255.240
  24.890 +61.14.136.128/255.255.255.224
  24.891 +61.16.6.160/255.255.255.224
  24.892 +61.16.23.224/255.255.255.224
  24.893 +61.16.24.160/255.255.255.224
  24.894 +61.16.43.96/255.255.255.224
  24.895 +61.16.82.192/255.255.255.224
  24.896 +61.16.108.192/255.255.255.224
  24.897 +61.16.168.128/255.255.255.224
  24.898 +61.16.169.24/255.255.255.248
  24.899 +61.16.233.240/255.255.255.248
  24.900 +61.16.236.224/255.255.255.240
  24.901 +61.16.237.160/255.255.255.248
  24.902 +61.32.39.128/255.255.255.128
  24.903 +61.32.69.64/255.255.255.192
  24.904 +61.32.168.96/255.255.255.224
  24.905 +61.32.199.64/255.255.255.192
  24.906 +61.32.226.128/255.255.255.240
  24.907 +61.32.255.0/255.255.255.0
  24.908 +61.33.22.0/255.255.255.128
  24.909 +61.33.113.64/255.255.255.192
  24.910 +61.33.156.128/255.255.255.128
  24.911 +61.34.131.0/255.255.255.192
  24.912 +61.35.135.0/255.255.255.192
  24.913 +61.35.220.128/255.255.255.192
  24.914 +61.35.254.0/255.255.255.0
  24.915 +61.36.174.128/255.255.255.128
  24.916 +61.37.33.128/255.255.255.128
  24.917 +61.38.109.64/255.255.255.192
  24.918 +61.38.211.192/255.255.255.224
  24.919 +61.39.117.192/255.255.255.192
  24.920 +61.39.168.0/255.255.250.0
  24.921 +61.39.193.0/255.255.255.0
  24.922 +61.39.195.0/255.255.255.0
  24.923 +61.39.197.0/255.255.253.0
  24.924 +61.40.51.128/255.255.255.192
  24.925 +61.40.72.192/255.255.255.192
  24.926 +61.40.110.64/255.255.255.192
  24.927 +61.40.131.64/255.255.255.192
  24.928 +61.40.211.192/255.255.255.192
  24.929 +61.41.88.0/255.255.253.0
  24.930 +61.41.92.0/255.255.255.0
  24.931 +61.41.94.0/255.255.255.0
  24.932 +61.41.96.0/255.255.252.0
  24.933 +61.41.102.0/255.255.254.0
  24.934 +61.42.40.0/255.255.255.0
  24.935 +61.42.83.0/255.255.255.0
  24.936 +61.46.0.0/255.255.0.0
  24.937 +61.49.0.0/255.255.255.0
  24.938 +61.49.1.0/255.255.255.0
  24.939 +61.49.9.160/255.255.255.224
  24.940 +61.49.16.0/255.255.255.0
  24.941 +61.49.17.0/255.255.255.224
  24.942 +61.56.128.0/255.255.224.0
  24.943 +61.57.32.0/255.255.224.0
  24.944 +61.57.224.0/255.255.240.0
  24.945 +61.60.0.0/255.255.224.0
  24.946 +61.60.32.0/255.255.160.0
  24.947 +61.62.0.0/255.255.0.0
  24.948 +61.64.64.0/255.255.200.0
  24.949 +61.64.128.0/255.255.128.0
  24.950 +61.67.64.0/255.255.224.0
  24.951 +61.73.42.0/255.255.243.0
  24.952 +61.82.138.0/255.255.255.0
  24.953 +61.86.129.176/255.255.255.240
  24.954 +61.92.167.96/255.255.255.224
  24.955 +61.92.170.56/255.255.255.248
  24.956 +61.95.12.224/255.255.255.224
  24.957 +61.95.18.32/255.255.255.224
  24.958 +61.95.39.128/255.255.255.224
  24.959 +61.95.69.0/255.255.255.0
  24.960 +61.95.83.192/255.255.255.192
  24.961 +61.95.100.32/255.255.255.224
  24.962 +61.95.104.224/255.255.255.224
  24.963 +61.95.132.224/255.255.255.224
  24.964 +61.95.145.104/255.255.255.248
  24.965 +61.95.152.0/255.255.255.224
  24.966 +61.95.152.160/255.255.255.224
  24.967 +61.95.152.192/255.255.255.192
  24.968 +61.95.158.0/255.255.255.224
  24.969 +61.95.158.120/255.255.255.248
  24.970 +61.95.167.0/255.255.255.0
  24.971 +61.95.179.128/255.255.255.192
  24.972 +61.95.225.104/255.255.255.248
  24.973 +61.95.226.16/255.255.255.240
  24.974 +61.95.226.176/255.255.255.248
  24.975 +61.95.242.0/255.255.255.248
  24.976 +61.100.22.0/255.255.254.0
  24.977 +61.102.212.64/255.255.255.192
  24.978 +61.103.161.64/255.255.255.192
  24.979 +61.107.88.0/255.255.255.0
  24.980 +61.107.106.0/255.255.255.0
  24.981 +61.113.9.240/255.255.255.248
  24.982 +61.113.21.48/255.255.255.248
  24.983 +61.113.25.168/255.255.255.248
  24.984 +61.113.25.184/255.255.255.248
  24.985 +61.113.47.208/255.255.255.248
  24.986 +61.113.98.0/255.255.254.0
  24.987 +61.113.110.96/255.255.255.240
  24.988 +61.113.110.192/255.255.255.248
  24.989 +61.113.110.200/255.255.255.248
  24.990 +61.113.174.64/255.255.255.224
  24.991 +61.113.176.136/255.255.255.248
  24.992 +61.114.64.224/255.255.255.248
  24.993 +61.114.97.128/255.255.255.240
  24.994 +61.115.0.168/255.255.255.248
  24.995 +61.115.1.152/255.255.255.248
  24.996 +61.115.6.192/255.255.255.240
  24.997 +61.115.36.208/255.255.255.240
  24.998 +61.115.128.0/255.255.192.0
  24.999 +61.115.200.48/255.255.255.240
 24.1000 +61.115.207.160/255.255.255.240
 24.1001 +61.117.136.192/255.255.255.192
 24.1002 +61.117.137.64/255.255.255.192
 24.1003 +61.117.138.144/255.255.255.240
 24.1004 +61.117.145.32/255.255.255.224
 24.1005 +61.117.156.224/255.255.255.224
 24.1006 +61.117.188.32/255.255.255.224
 24.1007 +61.117.190.32/255.255.255.224
 24.1008 +61.117.215.96/255.255.255.224
 24.1009 +61.117.216.64/255.255.255.224
 24.1010 +61.119.0.32/255.255.255.248
 24.1011 +61.119.2.128/255.255.255.240
 24.1012 +61.119.4.128/255.255.255.240
 24.1013 +61.119.22.176/255.255.255.240
 24.1014 +61.119.39.224/255.255.255.240
 24.1015 +61.119.69.104/255.255.255.248
 24.1016 +61.119.120.208/255.255.255.248
 24.1017 +61.119.121.192/255.255.255.248
 24.1018 +61.119.121.208/255.255.255.240
 24.1019 +61.120.1.152/255.255.255.248
 24.1020 +61.120.3.160/255.255.255.248
 24.1021 +61.120.5.128/255.255.255.192
 24.1022 +61.120.14.16/255.255.255.248
 24.1023 +61.120.30.232/255.255.255.248
 24.1024 +61.120.35.168/255.255.255.248
 24.1025 +61.120.44.192/255.255.255.240
 24.1026 +61.120.56.64/255.255.255.248
 24.1027 +61.120.61.64/255.255.255.240
 24.1028 +61.120.61.168/255.255.255.248
 24.1029 +61.120.65.104/255.255.255.248
 24.1030 +61.120.65.192/255.255.255.240
 24.1031 +61.120.74.120/255.255.255.248
 24.1032 +61.120.93.16/255.255.255.240
 24.1033 +61.120.99.24/255.255.255.248
 24.1034 +61.120.99.120/255.255.255.240
 24.1035 +61.120.106.8/255.255.255.248
 24.1036 +61.120.109.176/255.255.255.240
 24.1037 +61.120.141.0/255.255.255.240
 24.1038 +61.120.141.40/255.255.255.248
 24.1039 +61.120.141.64/255.255.255.248
 24.1040 +61.120.141.248/255.255.255.248
 24.1041 +61.120.151.160/255.255.255.240
 24.1042 +61.120.152.208/255.255.255.248
 24.1043 +61.120.160.0/255.255.224.0
 24.1044 +61.120.193.192/255.255.255.248
 24.1045 +61.120.194.64/255.255.255.192
 24.1046 +61.120.197.240/255.255.255.248
 24.1047 +61.121.108.16/255.255.255.208
 24.1048 +61.121.194.48/255.255.255.240
 24.1049 +61.121.248.128/255.255.255.248
 24.1050 +61.121.253.128/255.255.255.128
 24.1051 +61.122.56.0/255.255.248.0
 24.1052 +61.122.217.176/255.255.255.240
 24.1053 +61.123.128.80/255.255.255.240
 24.1054 +61.123.130.160/255.255.255.248
 24.1055 +61.123.133.120/255.255.255.248
 24.1056 +61.123.141.112/255.255.255.240
 24.1057 +61.123.218.0/255.255.252.0
 24.1058 +61.123.222.0/255.255.254.0
 24.1059 +61.125.24.96/255.255.255.248
 24.1060 +61.127.2.64/255.255.255.240
 24.1061 +61.127.6.64/255.255.255.240
 24.1062 +61.127.7.232/255.255.255.248
 24.1063 +61.127.10.72/255.255.255.248
 24.1064 +61.127.22.176/255.255.255.248
 24.1065 +61.127.109.152/255.255.255.248
 24.1066 +61.127.255.112/255.255.255.248
 24.1067 +61.128.103.164/255.255.255.248
 24.1068 +61.129.39.64/255.255.255.192
 24.1069 +61.129.40.0/255.255.255.192
 24.1070 +61.129.109.224/255.255.255.224
 24.1071 +61.129.120.0/255.255.255.240
 24.1072 +61.129.255.128/255.255.255.128
 24.1073 +61.130.5.64/255.255.255.240
 24.1074 +61.130.174.160/255.255.255.240
 24.1075 +61.131.5.64/255.255.255.192
 24.1076 +61.131.28.160/255.255.255.248
 24.1077 +61.131.28.176/255.255.255.248
 24.1078 +61.131.28.184/255.255.255.248
 24.1079 +61.131.29.208/255.255.255.248
 24.1080 +61.131.29.216/255.255.255.248
 24.1081 +61.131.30.136/255.255.255.248
 24.1082 +61.131.30.144/255.255.255.248
 24.1083 +61.131.30.176/255.255.255.240
 24.1084 +61.131.30.240/255.255.255.248
 24.1085 +61.131.32.192/255.255.255.248
 24.1086 +61.131.37.232/255.255.255.248
 24.1087 +61.131.42.136/255.255.255.248
 24.1088 +61.131.42.144/255.255.255.240
 24.1089 +61.131.50.0/255.255.255.240
 24.1090 +61.131.51.16/255.255.255.248
 24.1091 +61.131.51.32/255.255.255.248
 24.1092 +61.131.56.248/255.255.255.248
 24.1093 +61.131.65.232/255.255.255.248
 24.1094 +61.131.66.208/255.255.255.248
 24.1095 +61.131.67.176/255.255.255.248
 24.1096 +61.132.29.208/255.255.255.248
 24.1097 +61.132.29.240/255.255.255.248
 24.1098 +61.132.140.128/255.255.255.240
 24.1099 +61.133.3.0/255.255.255.240
 24.1100 +61.133.4.208/255.255.255.240
 24.1101 +61.133.70.240/255.255.255.248
 24.1102 +61.133.83.160/255.255.255.224
 24.1103 +61.133.92.192/255.255.255.224
 24.1104 +61.133.99.64/255.255.255.192
 24.1105 +61.133.237.0/255.255.255.224
 24.1106 +61.134.11.224/255.255.255.224
 24.1107 +61.134.15.224/255.255.255.240
 24.1108 +61.134.16.128/255.255.255.248
 24.1109 +61.134.32.160/255.255.255.248
 24.1110 +61.134.34.16/255.255.255.248
 24.1111 +61.136.19.112/255.255.255.248
 24.1112 +61.136.19.120/255.255.255.248
 24.1113 +61.136.27.32/255.255.255.224
 24.1114 +61.136.96.128/255.255.255.248
 24.1115 +61.136.109.192/255.255.255.192
 24.1116 +61.136.113.0/255.255.255.240
 24.1117 +61.136.113.120/255.255.255.248
 24.1118 +61.136.114.232/255.255.255.248
 24.1119 +61.136.116.0/255.255.255.192
 24.1120 +61.136.116.80/255.255.255.192
 24.1121 +61.136.117.64/255.255.255.224
 24.1122 +61.136.118.8/255.255.255.248
 24.1123 +61.136.122.48/255.255.255.240
 24.1124 +61.136.122.128/255.255.255.224
 24.1125 +61.136.123.192/255.255.255.192
 24.1126 +61.136.125.32/255.255.255.248
 24.1127 +61.136.126.160/255.255.255.224
 24.1128 +61.136.207.192/255.255.255.240
 24.1129 +61.138.35.224/255.255.255.224
 24.1130 +61.138.185.24/255.255.255.248
 24.1131 +61.138.195.0/255.255.255.0
 24.1132 +61.140.75.160/255.255.255.240
 24.1133 +61.140.229.96/255.255.255.128
 24.1134 +61.141.9.160/255.255.255.240
 24.1135 +61.143.59.96/255.255.255.240
 24.1136 +61.143.59.176/255.255.255.240
 24.1137 +61.144.66.96/255.255.255.224
 24.1138 +61.144.202.224/255.255.255.224
 24.1139 +61.144.203.208/255.255.255.240
 24.1140 +61.145.220.0/255.255.255.224
 24.1141 +61.146.79.32/255.255.255.248
 24.1142 +61.146.115.64/255.255.255.224
 24.1143 +61.147.254.0/255.255.255.240
 24.1144 +61.150.35.56/255.255.255.248
 24.1145 +61.150.40.64/255.255.255.240
 24.1146 +61.150.40.160/255.255.255.240
 24.1147 +61.150.43.128/255.255.255.192
 24.1148 +61.151.241.96/255.255.255.224
 24.1149 +61.151.242.0/255.255.255.224
 24.1150 +61.151.247.160/255.255.255.240
 24.1151 +61.152.198.0/255.255.254.0
 24.1152 +61.152.224.240/255.255.255.240
 24.1153 +61.153.1.192/255.255.255.224
 24.1154 +61.153.4.104/255.255.255.248
 24.1155 +61.153.41.80/255.255.255.248
 24.1156 +61.153.43.160/255.255.255.248
 24.1157 +61.153.53.56/255.255.255.248
 24.1158 +61.153.60.32/255.255.255.248
 24.1159 +61.153.202.248/255.255.255.248
 24.1160 +61.153.208.120/255.255.255.248
 24.1161 +61.153.221.32/255.255.255.248
 24.1162 +61.153.222.208/255.255.255.248
 24.1163 +61.153.226.216/255.255.255.248
 24.1164 +61.153.244.120/255.255.255.248
 24.1165 +61.153.245.208/255.255.255.248
 24.1166 +61.153.253.216/255.255.255.248
 24.1167 +61.154.41.192/255.255.255.224
 24.1168 +61.154.42.224/255.255.255.224
 24.1169 +61.154.45.176/255.255.255.248
 24.1170 +61.154.45.192/255.255.255.224
 24.1171 +61.154.45.232/255.255.255.248
 24.1172 +61.155.16.128/255.255.255.240
 24.1173 +61.155.58.128/255.255.255.248
 24.1174 +61.155.64.64/255.255.255.248
 24.1175 +61.155.64.152/255.255.255.248
 24.1176 +61.155.65.96/255.255.255.248
 24.1177 +61.155.65.208/255.255.255.248
 24.1178 +61.155.97.56/255.255.255.248
 24.1179 +61.155.101.208/255.255.255.248
 24.1180 +61.159.50.136/255.255.255.248
 24.1181 +61.159.50.176/255.255.255.240
 24.1182 +61.159.59.48/255.255.255.248
 24.1183 +61.159.60.80/255.255.255.248
 24.1184 +61.159.161.192/255.255.255.232
 24.1185 +61.159.187.160/255.255.255.248
 24.1186 +61.159.212.144/255.255.255.240
 24.1187 +61.159.212.176/255.255.255.240
 24.1188 +61.159.213.0/255.255.255.240
 24.1189 +61.163.216.0/255.255.255.64
 24.1190 +61.163.220.52/255.255.255.248
 24.1191 +61.163.222.8/255.255.255.248
 24.1192 +61.163.227.48/255.255.255.248
 24.1193 +61.163.228.8/255.255.255.248
 24.1194 +61.163.231.64/255.255.255.224
 24.1195 +61.163.236.160/255.255.255.240
 24.1196 +61.167.71.64/255.255.255.224
 24.1197 +61.172.243.0/255.255.255.0
 24.1198 +61.172.246.192/255.255.255.192
 24.1199 +61.172.249.194/255.255.255.237
 24.1200 +61.172.250.96/255.255.255.240
 24.1201 +61.172.253.104/255.255.255.232
 24.1202 +61.172.253.160/255.255.255.224
 24.1203 +61.174.211.136/255.255.255.248
 24.1204 +61.174.211.232/255.255.255.248
 24.1205 +61.175.192.88/255.255.255.248
 24.1206 +61.175.197.152/255.255.255.248
 24.1207 +61.175.220.72/255.255.255.248
 24.1208 +61.175.223.112/255.255.255.248
 24.1209 +61.175.223.144/255.255.255.248
 24.1210 +61.175.223.224/255.255.255.240
 24.1211 +61.175.223.240/255.255.255.248
 24.1212 +61.175.224.0/255.255.255.248
 24.1213 +61.175.244.24/255.255.255.248
 24.1214 +61.177.56.192/255.255.255.248
 24.1215 +61.177.57.152/255.255.255.248
 24.1216 +61.177.58.240/255.255.255.248
 24.1217 +61.177.59.0/255.255.255.248
 24.1218 +61.177.61.168/255.255.255.248
 24.1219 +61.177.75.224/255.255.255.248
 24.1220 +61.177.182.56/255.255.255.248
 24.1221 +61.177.182.240/255.255.255.248
 24.1222 +61.177.195.128/255.255.255.248
 24.1223 +61.177.201.128/255.255.255.248
 24.1224 +61.177.207.160/255.255.255.224
 24.1225 +61.177.222.184/255.255.255.248
 24.1226 +61.185.208.136/255.255.255.248
 24.1227 +61.185.209.32/255.255.255.248
 24.1228 +61.185.212.160/255.255.255.240
 24.1229 +61.185.221.72/255.255.255.248
 24.1230 +61.185.224.64/255.255.255.192
 24.1231 +61.185.245.192/255.255.255.224
 24.1232 +61.193.160.64/255.255.255.224
 24.1233 +61.193.162.64/255.255.255.192
 24.1234 +61.193.165.128/255.255.255.192
 24.1235 +61.193.185.16/255.255.255.240
 24.1236 +61.193.190.0/255.255.255.192
 24.1237 +61.193.191.32/255.255.255.240
 24.1238 +61.194.6.176/255.255.255.248
 24.1239 +61.194.6.216/255.255.255.248
 24.1240 +61.194.8.8/255.255.255.248
 24.1241 +61.194.8.32/255.255.255.248
 24.1242 +61.194.10.0/255.255.255.248
 24.1243 +61.194.10.88/255.255.255.248
 24.1244 +61.194.11.136/255.255.255.248
 24.1245 +61.194.11.224/255.255.255.248
 24.1246 +61.194.14.80/255.255.255.248
 24.1247 +61.194.25.48/255.255.255.248
 24.1248 +61.194.37.112/255.255.255.248
 24.1249 +61.194.39.32/255.255.255.248
 24.1250 +61.194.39.120/255.255.255.248
 24.1251 +61.194.64.32/255.255.255.248
 24.1252 +61.194.195.112/255.255.255.248
 24.1253 +61.194.198.24/255.255.255.248
 24.1254 +61.194.201.216/255.255.255.248
 24.1255 +61.194.214.40/255.255.255.248
 24.1256 +61.194.226.120/255.255.255.248
 24.1257 +61.194.228.240/255.255.255.248
 24.1258 +61.194.228.248/255.255.255.248
 24.1259 +61.194.243.240/255.255.255.248
 24.1260 +61.194.248.16/255.255.255.240
 24.1261 +61.195.144.0/255.255.240.0
 24.1262 +61.196.106.128/255.255.255.240
 24.1263 +61.196.106.176/255.255.255.240
 24.1264 +61.196.158.168/255.255.255.168
 24.1265 +61.196.182.160/255.255.255.240
 24.1266 +61.196.208.224/255.255.255.248
 24.1267 +61.196.233.216/255.255.255.248
 24.1268 +61.196.245.136/255.255.255.248
 24.1269 +61.196.250.0/255.255.255.248
 24.1270 +61.197.165.8/255.255.255.248
 24.1271 +61.197.172.240/255.255.255.248
 24.1272 +61.197.180.104/255.255.255.248
 24.1273 +61.197.180.120/255.255.255.248
 24.1274 +61.197.185.64/255.255.255.248
 24.1275 +61.197.200.24/255.255.255.248
 24.1276 +61.197.201.0/255.255.255.248
 24.1277 +61.197.217.136/255.255.255.248
 24.1278 +61.197.218.160/255.255.255.248
 24.1279 +61.197.219.96/255.255.255.248
 24.1280 +61.197.223.80/255.255.255.240
 24.1281 +61.197.225.96/255.255.255.223
 24.1282 +61.197.229.192/255.255.255.240
 24.1283 +61.197.229.208/255.255.255.224
 24.1284 +61.197.230.80/255.255.255.248
 24.1285 +61.197.235.144/255.255.255.248
 24.1286 +61.197.242.152/255.255.255.248
 24.1287 +61.197.243.224/255.255.255.248
 24.1288 +61.197.244.88/255.255.255.248
 24.1289 +61.197.245.232/255.255.255.248
 24.1290 +61.197.249.208/255.255.255.248
 24.1291 +61.197.255.96/255.255.255.140
 24.1292 +61.199.195.248/255.255.255.248
 24.1293 +61.199.197.248/255.255.255.248
 24.1294 +61.199.201.8/255.255.255.248
 24.1295 +61.199.203.80/255.255.255.248
 24.1296 +61.199.206.208/255.255.255.240
 24.1297 +61.199.217.80/255.255.255.248
 24.1298 +61.199.218.192/255.255.255.248
 24.1299 +61.199.221.248/255.255.255.248
 24.1300 +61.199.223.16/255.255.255.248
 24.1301 +61.199.234.48/255.255.255.240
 24.1302 +61.199.241.176/255.255.255.248
 24.1303 +61.199.242.16/255.255.255.248
 24.1304 +61.199.244.192/255.255.255.240
 24.1305 +61.200.0.0/255.240.0.0
 24.1306 +61.242.215.96/255.255.255.240
 24.1307 +61.246.165.0/255.255.255.224
 24.1308 +61.246.185.0/255.255.255.224
 24.1309 +61.246.193.144/255.255.255.240
 24.1310 +61.246.193.160/255.255.255.224
 24.1311 +61.246.216.32/255.255.255.240
 24.1312 +61.246.216.48/255.255.255.240
 24.1313 +61.246.216.64/255.255.255.240
 24.1314 +61.246.217.0/255.255.255.192
 24.1315 +61.246.232.32/255.255.255.240
 24.1316 +61.246.247.0/255.255.255.224
 24.1317 +61.250.68.0/255.255.255.0
 24.1318 +61.250.166.128/255.255.255.224
 24.1319 +61.251.58.9/255.255.255.241
 24.1320 +61.251.253.128/255.255.255.192
 24.1321 +62.0.34.128/255.255.255.128
 24.1322 +62.0.35.32/255.255.255.240
 24.1323 +62.0.39.0/255.255.255.0
 24.1324 +62.1.7.160/255.255.255.240
 24.1325 +62.1.104.160/255.255.255.240
 24.1326 +62.1.184.192/255.255.255.240
 24.1327 +62.2.253.192/255.255.255.224
 24.1328 +62.3.66.0/255.255.255.248
 24.1329 +62.3.66.176/255.255.255.248
 24.1330 +62.3.67.216/255.255.255.248
 24.1331 +62.3.72.216/255.255.255.248
 24.1332 +62.3.73.64/255.255.255.248
 24.1333 +62.3.75.168/255.255.255.248
 24.1334 +62.3.77.152/255.255.255.248
 24.1335 +62.3.78.96/255.255.255.248
 24.1336 +62.3.92.40/255.255.255.248
 24.1337 +62.3.101.88/255.255.255.248
 24.1338 +62.3.102.232/255.255.255.248
 24.1339 +62.3.103.240/255.255.255.248
 24.1340 +62.3.104.104/255.255.255.248
 24.1341 +62.3.104.168/255.255.255.248
 24.1342 +62.3.108.40/255.255.255.248
 24.1343 +62.3.110.16/255.255.255.248
 24.1344 +62.3.114.184/255.255.255.248
 24.1345 +62.3.114.216/255.255.255.248
 24.1346 +62.3.115.88/255.255.255.248
 24.1347 +62.3.120.48/255.255.255.248
 24.1348 +62.3.124.152/255.255.255.248
 24.1349 +62.3.125.40/255.255.255.248
 24.1350 +62.3.127.40/255.255.255.248
 24.1351 +62.5.140.80/255.255.255.240
 24.1352 +62.6.104.64/255.255.255.224
 24.1353 +62.6.144.160/255.255.255.248
 24.1354 +62.6.147.128/255.255.255.192
 24.1355 +62.6.148.128/255.255.255.240
 24.1356 +62.6.151.64/255.255.255.224
 24.1357 +62.6.154.152/255.255.255.248
 24.1358 +62.6.159.128/255.255.255.240
 24.1359 +62.6.159.176/255.255.255.248
 24.1360 +62.6.160.192/255.255.255.224
 24.1361 +62.6.161.48/255.255.255.240
 24.1362 +62.6.163.96/255.255.255.224
 24.1363 +62.6.163.192/255.255.255.224
 24.1364 +62.6.164.64/255.255.255.224
 24.1365 +62.6.166.32/255.255.255.240
 24.1366 +62.6.174.88/255.255.255.248
 24.1367 +62.6.179.176/255.255.255.248
 24.1368 +62.6.184.0/255.255.255.128
 24.1369 +62.6.241.0/255.255.255.224
 24.1370 +62.6.245.0/255.255.255.224
 24.1371 +62.6.245.80/255.255.255.240
 24.1372 +62.6.245.208/255.255.255.240
 24.1373 +62.6.247.112/255.255.255.240
 24.1374 +62.6.248.0/255.255.255.0
 24.1375 +62.6.249.80/255.255.255.240
 24.1376 +62.6.250.104/255.255.255.248
 24.1377 +62.7.231.112/255.255.255.240
 24.1378 +62.8.97.240/255.255.255.240
 24.1379 +62.8.99.192/255.255.255.248
 24.1380 +62.8.109.80/255.255.255.240
 24.1381 +62.8.116.144/255.255.255.248
 24.1382 +62.8.118.240/255.255.255.248
 24.1383 +62.8.121.240/255.255.255.240
 24.1384 +62.8.128.80/255.255.255.248
 24.1385 +62.8.129.176/255.255.255.240
 24.1386 +62.8.134.48/255.255.255.248
 24.1387 +62.8.134.104/255.255.255.248
 24.1388 +62.8.144.56/255.255.255.248
 24.1389 +62.8.146.64/255.255.255.192
 24.1390 +62.8.156.40/255.255.255.248
 24.1391 +62.8.158.120/255.255.255.248
 24.1392 +62.8.193.0/255.255.255.0
 24.1393 +62.8.198.160/255.255.255.224
 24.1394 +62.8.203.224/255.255.255.224
 24.1395 +62.8.206.0/255.255.255.0
 24.1396 +62.8.207.40/255.255.255.248
 24.1397 +62.8.215.168/255.255.255.248
 24.1398 +62.8.219.120/255.255.255.248
 24.1399 +62.8.226.152/255.255.255.248
 24.1400 +62.8.227.80/255.255.255.248
 24.1401 +62.8.230.192/255.255.255.240
 24.1402 +62.8.231.128/255.255.255.240
 24.1403 +62.8.233.56/255.255.255.248
 24.1404 +62.8.238.248/255.255.255.248
 24.1405 +62.8.246.168/255.255.255.248
 24.1406 +62.12.129.184/255.255.255.248
 24.1407 +62.12.139.192/255.255.255.240
 24.1408 +62.13.41.176/255.255.255.240
 24.1409 +62.13.42.0/255.255.255.240
 24.1410 +62.13.133.24/255.255.255.248
 24.1411 +62.17.17.0/255.255.255.240
 24.1412 +62.17.23.0/255.255.255.192
 24.1413 +62.17.24.192/255.255.255.240
 24.1414 +62.17.150.0/255.255.255.224
 24.1415 +62.17.152.64/255.255.255.192
 24.1416 +62.17.155.208/255.255.255.240
 24.1417 +62.17.159.80/255.255.255.240
 24.1418 +62.17.162.64/255.255.255.240
 24.1419 +62.17.172.248/255.255.255.248
 24.1420 +62.17.173.0/255.255.255.0
 24.1421 +62.17.174.56/255.255.255.232
 24.1422 +62.17.174.216/255.255.255.248
 24.1423 +62.17.240.64/255.255.255.248
 24.1424 +62.17.246.56/255.255.255.248
 24.1425 +62.17.250.128/255.255.255.240
 24.1426 +62.20.1.128/255.255.255.128
 24.1427 +62.20.3.0/255.255.255.0
 24.1428 +62.20.48.0/255.255.250.0
 24.1429 +62.20.55.48/255.255.255.248
 24.1430 +62.20.120.144/255.255.255.240
 24.1431 +62.22.15.8/255.255.255.248
 24.1432 +62.22.15.128/255.255.255.192
 24.1433 +62.22.17.0/255.255.255.224
 24.1434 +62.22.17.32/255.255.255.224
 24.1435 +62.22.29.224/255.255.255.224
 24.1436 +62.22.44.48/255.255.255.248
 24.1437 +62.22.61.48/255.255.255.240
 24.1438 +62.22.63.0/255.255.255.0
 24.1439 +62.22.66.0/255.255.255.0
 24.1440 +62.22.75.128/255.255.255.224
 24.1441 +62.22.162.0/255.255.255.128
 24.1442 +62.23.3.96/255.255.255.224
 24.1443 +62.23.5.48/255.255.255.240
 24.1444 +62.23.8.8/255.255.255.248
 24.1445 +62.23.15.48/255.255.255.240
 24.1446 +62.23.19.80/255.255.255.248
 24.1447 +62.23.19.152/255.255.255.248
 24.1448 +62.23.22.0/255.255.255.0
 24.1449 +62.23.27.72/255.255.255.248
 24.1450 +62.23.34.80/255.255.255.248
 24.1451 +62.23.36.104/255.255.255.248
 24.1452 +62.23.44.128/255.255.255.224
 24.1453 +62.23.47.200/255.255.255.248
 24.1454 +62.23.54.152/255.255.255.248
 24.1455 +62.23.78.240/255.255.255.248
 24.1456 +62.23.82.16/255.255.255.240
 24.1457 +62.23.85.48/255.255.255.240
 24.1458 +62.23.91.80/255.255.255.248
 24.1459 +62.23.96.0/255.255.255.192
 24.1460 +62.23.109.72/255.255.255.248
 24.1461 +62.23.118.160/255.255.255.224
 24.1462 +62.23.135.224/255.255.255.240
 24.1463 +62.23.136.32/255.255.255.248
 24.1464 +62.23.138.208/255.255.255.240
 24.1465 +62.23.138.248/255.255.255.248
 24.1466 +62.23.139.0/255.255.255.0
 24.1467 +62.23.149.248/255.255.255.248
 24.1468 +62.23.151.160/255.255.255.240
 24.1469 +62.23.163.88/255.255.255.248
 24.1470 +62.23.166.240/255.255.255.248
 24.1471 +62.23.169.232/255.255.255.248
 24.1472 +62.23.171.176/255.255.255.240
 24.1473 +62.23.177.8/255.255.255.248
 24.1474 +62.23.180.80/255.255.255.240
 24.1475 +62.23.183.80/255.255.255.240
 24.1476 +62.23.185.120/255.255.255.248
 24.1477 +62.23.193.40/255.255.255.248
 24.1478 +62.23.218.136/255.255.255.248
 24.1479 +62.23.232.152/255.255.255.248
 24.1480 +62.23.247.32/255.255.255.248
 24.1481 +62.23.247.40/255.255.255.248
 24.1482 +62.24.101.128/255.255.255.192
 24.1483 +62.26.113.0/255.255.255.0
 24.1484 +62.26.126.0/255.255.255.0
 24.1485 +62.26.127.112/255.255.255.240
 24.1486 +62.26.131.0/255.255.255.0
 24.1487 +62.26.137.0/255.255.255.0
 24.1488 +62.27.1.0/255.255.255.0
 24.1489 +62.27.8.0/255.255.255.0
 24.1490 +62.27.28.48/255.255.255.240
 24.1491 +62.27.32.76/255.255.255.244
 24.1492 +62.27.33.16/255.255.255.240
 24.1493 +62.29.248.224/255.255.255.224
 24.1494 +62.32.50.0/255.255.255.0
 24.1495 +62.32.58.0/255.255.254.0
 24.1496 +62.32.63.248/255.255.255.248
 24.1497 +62.32.159.88/255.255.255.248
 24.1498 +62.32.160.32/255.255.255.240
 24.1499 +62.32.172.64/255.255.255.240
 24.1500 +62.32.189.88/255.255.255.248
 24.1501 +62.32.190.0/255.255.255.240
 24.1502 +62.32.206.64/255.255.255.240
 24.1503 +62.32.206.88/255.255.255.248
 24.1504 +62.36.228.224/255.255.255.224
 24.1505 +62.39.162.0/255.255.255.0
 24.1506 +62.40.73.224/255.255.255.240
 24.1507 +62.40.89.176/255.255.255.248
 24.1508 +62.40.92.32/255.255.255.224
 24.1509 +62.41.64.128/255.255.255.224
 24.1510 +62.43.255.32/255.255.255.224
 24.1511 +62.44.5.40/255.255.255.248
 24.1512 +62.44.7.40/255.255.255.248
 24.1513 +62.44.68.200/255.255.255.248
 24.1514 +62.48.159.144/255.255.255.240
 24.1515 +62.48.170.192/255.255.255.240
 24.1516 +62.48.175.248/255.255.255.248
 24.1517 +62.48.177.32/255.255.255.248
 24.1518 +62.48.181.48/255.255.255.224
 24.1519 +62.48.189.24/255.255.255.248
 24.1520 +62.48.219.96/255.255.255.248
 24.1521 +62.48.219.136/255.255.255.248
 24.1522 +62.48.219.224/255.255.255.240
 24.1523 +62.49.42.0/255.255.255.248
 24.1524 +62.49.64.96/255.255.255.240
 24.1525 +62.49.83.224/255.255.255.248
 24.1526 +62.49.127.144/255.255.255.240
 24.1527 +62.49.143.104/255.255.255.248
 24.1528 +62.49.148.64/255.255.255.240
 24.1529 +62.49.152.0/255.255.255.224
 24.1530 +62.49.167.208/255.255.255.240
 24.1531 +62.49.189.160/255.255.255.240
 24.1532 +62.49.202.32/255.255.255.240
 24.1533 +62.49.243.0/255.255.255.248
 24.1534 +62.52.11.192/255.255.255.232
 24.1535 +62.52.11.224/255.255.255.224
 24.1536 +62.52.21.0/255.255.255.0
 24.1537 +62.52.24.0/255.255.255.128
 24.1538 +62.52.25.0/255.255.255.176
 24.1539 +62.52.27.64/255.255.255.232
 24.1540 +62.52.27.120/255.255.255.248
 24.1541 +62.52.27.168/255.255.255.240
 24.1542 +62.52.27.208/255.255.255.248
 24.1543 +62.52.27.224/255.255.255.240
 24.1544 +62.52.27.248/255.255.255.248
 24.1545 +62.52.55.48/255.255.255.248
 24.1546 +62.52.55.120/255.255.255.248
 24.1547 +62.52.71.0/255.255.255.0
 24.1548 +62.52.78.0/255.255.255.0
 24.1549 +62.52.86.0/255.255.255.0
 24.1550 +62.52.90.0/255.255.255.0
 24.1551 +62.52.91.0/255.255.255.0
 24.1552 +62.52.96.0/255.255.255.0
 24.1553 +62.52.97.0/255.255.255.128
 24.1554 +62.52.98.0/255.255.255.128
 24.1555 +62.52.100.128/255.255.255.224
 24.1556 +62.52.100.192/255.255.255.192
 24.1557 +62.52.101.0/255.255.255.0
 24.1558 +62.52.102.128/255.255.255.192
 24.1559 +62.52.102.192/255.255.255.224
 24.1560 +62.52.104.0/255.255.254.0
 24.1561 +62.52.107.0/255.255.255.0
 24.1562 +62.52.108.208/255.255.255.248
 24.1563 +62.52.109.0/255.255.255.248
 24.1564 +62.52.150.0/255.255.255.0
 24.1565 +62.52.224.0/255.255.250.0
 24.1566 +62.52.230.0/255.255.251.0
 24.1567 +62.52.235.0/255.255.250.0
 24.1568 +62.52.241.0/255.255.255.0
 24.1569 +62.52.242.0/255.255.242.0
 24.1570 +62.53.136.8/255.255.255.248
 24.1571 +62.53.136.24/255.255.255.248
 24.1572 +62.53.153.72/255.255.255.248
 24.1573 +62.53.162.0/255.255.255.240
 24.1574 +62.53.200.224/255.255.255.224
 24.1575 +62.53.201.32/255.255.255.224
 24.1576 +62.53.201.128/255.255.255.128
 24.1577 +62.53.205.176/255.255.255.248
 24.1578 +62.53.224.16/255.255.255.248
 24.1579 +62.53.226.128/255.255.255.224
 24.1580 +62.53.230.8/255.255.255.248
 24.1581 +62.53.230.48/255.255.255.240
 24.1582 +62.53.241.24/255.255.255.248
 24.1583 +62.53.241.40/255.255.255.248
 24.1584 +62.53.241.48/255.255.255.232
 24.1585 +62.53.241.72/255.255.255.248
 24.1586 +62.53.248.0/255.255.255.248
 24.1587 +62.53.248.32/255.255.255.240
 24.1588 +62.55.192.0/255.255.255.0
 24.1589 +62.55.193.0/255.255.254.0
 24.1590 +62.55.195.0/255.255.255.0
 24.1591 +62.55.197.0/255.255.255.0
 24.1592 +62.55.198.0/255.255.254.0
 24.1593 +62.55.201.0/255.255.255.0
 24.1594 +62.58.32.16/255.255.255.248
 24.1595 +62.58.149.216/255.255.255.248
 24.1596 +62.58.163.104/255.255.255.248
 24.1597 +62.58.165.136/255.255.255.248
 24.1598 +62.58.172.136/255.255.255.248
 24.1599 +62.58.178.232/255.255.255.248
 24.1600 +62.58.181.192/255.255.255.240
 24.1601 +62.58.188.88/255.255.255.248
 24.1602 +62.58.191.0/255.255.255.0
 24.1603 +62.59.31.40/255.255.255.248
 24.1604 +62.59.250.240/255.255.255.248
 24.1605 +62.59.251.160/255.255.255.248
 24.1606 +62.60.128.0/255.255.128.0
 24.1607 +62.61.0.0/255.255.224.0
 24.1608 +62.61.92.96/255.255.255.224
 24.1609 +62.64.88.208/255.255.255.248
 24.1610 +62.64.126.0/255.255.255.0
 24.1611 +62.65.23.0/255.255.255.240
 24.1612 +62.65.26.0/255.255.255.192
 24.1613 +62.65.38.128/255.255.255.240
 24.1614 +62.65.105.208/255.255.255.248
 24.1615 +62.65.153.112/255.255.255.248
 24.1616 +62.67.54.64/255.255.255.192
 24.1617 +62.67.209.0/255.255.255.192
 24.1618 +62.67.228.0/255.255.252.0
 24.1619 +62.69.67.216/255.255.255.248
 24.1620 +62.69.104.160/255.255.255.248
 24.1621 +62.69.105.0/255.255.255.0
 24.1622 +62.70.2.224/255.255.255.240
 24.1623 +62.70.9.0/255.255.255.240
 24.1624 +62.70.51.0/255.255.255.0
 24.1625 +62.70.58.224/255.255.255.248
 24.1626 +62.70.58.248/255.255.255.248
 24.1627 +62.70.81.96/255.255.255.208
 24.1628 +62.70.97.0/255.255.255.224
 24.1629 +62.70.97.80/255.255.255.240
 24.1630 +62.71.9.0/255.255.255.192
 24.1631 +62.72.74.32/255.255.255.240
 24.1632 +62.72.74.160/255.255.255.248
 24.1633 +62.72.80.96/255.255.255.224
 24.1634 +62.72.98.96/255.255.255.240
 24.1635 +62.72.103.0/255.255.255.240
 24.1636 +62.72.105.16/255.255.255.240
 24.1637 +62.72.105.64/255.255.255.248
 24.1638 +62.72.107.0/255.255.255.0
 24.1639 +62.72.116.176/255.255.255.248
 24.1640 +62.72.124.112/255.255.255.248
 24.1641 +62.73.83.32/255.255.255.224
 24.1642 +62.73.171.0/255.255.255.0
 24.1643 +62.73.173.0/255.255.255.240
 24.1644 +62.73.173.120/255.255.255.248
 24.1645 +62.73.186.0/255.255.255.0
 24.1646 +62.76.84.32/255.255.255.240
 24.1647 +62.76.182.0/255.255.254.0
 24.1648 +62.77.37.72/255.255.255.248
 24.1649 +62.77.45.0/255.255.255.240
 24.1650 +62.77.47.208/255.255.255.240
 24.1651 +62.77.162.192/255.255.255.248
 24.1652 +62.77.163.96/255.255.255.248
 24.1653 +62.77.163.120/255.255.255.248
 24.1654 +62.77.163.184/255.255.255.248
 24.1655 +62.77.163.208/255.255.255.240
 24.1656 +62.77.165.88/255.255.255.248
 24.1657 +62.77.165.160/255.255.255.248
 24.1658 +62.77.168.0/255.255.255.192
 24.1659 +62.77.168.160/255.255.255.248
 24.1660 +62.77.168.184/255.255.255.248
 24.1661 +62.77.169.80/255.255.255.248
 24.1662 +62.77.169.96/255.255.255.248
 24.1663 +62.77.169.112/255.255.255.248
 24.1664 +62.77.170.0/255.255.255.224
 24.1665 +62.77.170.64/255.255.255.248
 24.1666 +62.77.171.0/255.255.255.128
 24.1667 +62.77.171.200/255.255.255.248
 24.1668 +62.77.172.160/255.255.255.240
 24.1669 +62.77.175.0/255.255.255.240
 24.1670 +62.77.175.120/255.255.255.248
 24.1671 +62.77.175.200/255.255.255.248
 24.1672 +62.77.176.0/255.255.255.248
 24.1673 +62.77.176.72/255.255.255.248
 24.1674 +62.77.177.160/255.255.255.224
 24.1675 +62.77.177.200/255.255.255.248
 24.1676 +62.77.178.104/255.255.255.248
 24.1677 +62.77.178.232/255.255.255.248
 24.1678 +62.77.179.88/255.255.255.248
 24.1679 +62.77.181.0/255.255.255.0
 24.1680 +62.77.182.80/255.255.255.248
 24.1681 +62.77.184.32/255.255.255.248
 24.1682 +62.79.75.224/255.255.255.240
 24.1683 +62.79.84.156/255.255.255.236
 24.1684 +62.79.84.188/255.255.255.248
 24.1685 +62.79.90.32/255.255.255.248
 24.1686 +62.79.93.0/255.255.255.248
 24.1687 +62.79.93.92/255.255.255.224
 24.1688 +62.79.93.160/255.255.255.224
 24.1689 +62.79.93.224/255.255.255.240
 24.1690 +62.79.103.192/255.255.255.248
 24.1691 +62.79.111.64/255.255.255.248
 24.1692 +62.79.126.0/255.255.255.224
 24.1693 +62.79.155.16/255.255.255.240
 24.1694 +62.80.0.0/255.255.255.240
 24.1695 +62.80.24.144/255.255.255.248
 24.1696 +62.81.136.112/255.255.255.248
 24.1697 +62.81.142.16/255.255.255.240
 24.1698 +62.81.142.48/255.255.255.248
 24.1699 +62.81.143.0/255.255.255.0
 24.1700 +62.81.148.0/255.255.255.0
 24.1701 +62.81.156.0/255.255.255.248
 24.1702 +62.81.156.152/255.255.255.248
 24.1703 +62.81.160.96/255.255.255.248
 24.1704 +62.81.165.96/255.255.255.248
 24.1705 +62.81.165.128/255.255.255.248
 24.1706 +62.81.177.176/255.255.255.224
 24.1707 +62.81.177.240/255.255.255.248
 24.1708 +62.81.192.184/255.255.255.248
 24.1709 +62.81.205.168/255.255.255.248
 24.1710 +62.81.220.0/255.255.255.0
 24.1711 +62.81.239.160/255.255.255.224
 24.1712 +62.81.241.160/255.255.255.240
 24.1713 +62.81.249.0/255.255.255.0
 24.1714 +62.84.144.64/255.255.255.192
 24.1715 +62.84.175.0/255.255.255.0
 24.1716 +62.84.194.112/255.255.255.248
 24.1717 +62.84.195.16/255.255.255.248
 24.1718 +62.84.197.0/255.255.255.128
 24.1719 +62.84.200.168/255.255.255.240
 24.1720 +62.84.218.0/255.255.255.240
 24.1721 +62.84.228.0/255.255.254.0
 24.1722 +62.85.15.224/255.255.255.240
 24.1723 +62.85.33.0/255.255.255.240
 24.1724 +62.85.89.144/255.255.255.248
 24.1725 +62.85.110.0/255.255.255.224
 24.1726 +62.89.76.104/255.255.255.248
 24.1727 +62.89.76.176/255.255.255.240
 24.1728 +62.89.79.192/255.255.255.224
 24.1729 +62.89.86.112/255.255.255.248
 24.1730 +62.89.99.216/255.255.255.248
 24.1731 +62.89.101.32/255.255.255.248
 24.1732 +62.89.108.144/255.255.255.240
 24.1733 +62.89.110.184/255.255.255.248
 24.1734 +62.89.112.208/255.255.255.248
 24.1735 +62.89.187.72/255.255.255.248
 24.1736 +62.90.0.72/255.255.255.248
 24.1737 +62.90.7.0/255.255.255.248
 24.1738 +62.90.28.32/255.255.255.240
 24.1739 +62.90.73.32/255.255.255.224
 24.1740 +62.90.83.48/255.255.255.248
 24.1741 +62.90.85.96/255.255.255.224
 24.1742 +62.90.236.224/255.255.255.248
 24.1743 +62.90.237.128/255.255.255.240
 24.1744 +62.90.237.240/255.255.255.248
 24.1745 +62.90.238.112/255.255.255.248
 24.1746 +62.90.240.192/255.255.255.248
 24.1747 +62.90.245.32/255.255.255.240
 24.1748 +62.92.19.48/255.255.255.240
 24.1749 +62.92.19.224/255.255.255.240
 24.1750 +62.92.36.112/255.255.255.240
 24.1751 +62.92.54.0/255.255.254.0
 24.1752 +62.92.103.40/255.255.255.248
 24.1753 +62.92.110.64/255.255.255.248
 24.1754 +62.92.114.160/255.255.255.248
 24.1755 +62.92.143.160/255.255.255.224
 24.1756 +62.93.161.112/255.255.255.244
 24.1757 +62.93.161.208/255.255.255.248
 24.1758 +62.93.164.64/255.255.255.240
 24.1759 +62.93.165.80/255.255.255.248
 24.1760 +62.93.165.112/255.255.255.248
 24.1761 +62.93.166.128/255.255.255.240
 24.1762 +62.93.171.96/255.255.255.240
 24.1763 +62.93.174.248/255.255.255.249
 24.1764 +62.93.181.160/255.255.255.248
 24.1765 +62.93.183.0/255.255.255.240
 24.1766 +62.93.183.64/255.255.255.224
 24.1767 +62.94.18.64/255.255.255.240
 24.1768 +62.94.52.128/255.255.255.240
 24.1769 +62.94.61.16/255.255.255.248
 24.1770 +62.94.72.128/255.255.255.240
 24.1771 +62.94.74.160/255.255.255.248
 24.1772 +62.94.76.64/255.255.255.208
 24.1773 +62.94.82.192/255.255.255.224
 24.1774 +62.94.92.96/255.255.255.248
 24.1775 +62.94.102.112/255.255.255.248
 24.1776 +62.94.103.144/255.255.255.248
 24.1777 +62.94.103.208/255.255.255.248
 24.1778 +62.94.123.96/255.255.255.248
 24.1779 +62.94.146.8/255.255.255.248
 24.1780 +62.94.184.56/255.255.255.248
 24.1781 +62.94.201.112/255.255.255.240
 24.1782 +62.94.203.88/255.255.255.248
 24.1783 +62.94.210.88/255.255.255.248
 24.1784 +62.94.211.248/255.255.255.248
 24.1785 +62.94.212.136/255.255.255.248
 24.1786 +62.94.213.0/255.255.255.0
 24.1787 +62.94.218.152/255.255.255.248
 24.1788 +62.94.219.16/255.255.255.240
 24.1789 +62.94.219.96/255.255.255.248
 24.1790 +62.94.219.128/255.255.255.248
 24.1791 +62.94.238.104/255.255.255.248
 24.1792 +62.94.239.192/255.255.255.248
 24.1793 +62.94.242.192/255.255.255.248
 24.1794 +62.94.250.16/255.255.255.248
 24.1795 +62.95.48.208/255.255.255.248
 24.1796 +62.95.69.0/255.255.255.0
 24.1797 +62.95.88.224/255.255.255.224
 24.1798 +62.96.12.48/255.255.255.240
 24.1799 +62.96.12.112/255.255.255.240
 24.1800 +62.96.16.16/255.255.255.240
 24.1801 +62.96.20.0/255.255.255.240
 24.1802 +62.96.20.16/255.255.255.240
 24.1803 +62.96.24.16/255.255.255.248
 24.1804 +62.96.24.40/255.255.255.248
 24.1805 +62.96.24.240/255.255.255.248
 24.1806 +62.96.25.88/255.255.255.248
 24.1807 +62.96.26.56/255.255.255.248
 24.1808 +62.96.28.88/255.255.255.248
 24.1809 +62.96.28.248/255.255.255.248
 24.1810 +62.96.29.88/255.255.255.248
 24.1811 +62.96.29.168/255.255.255.248
 24.1812 +62.96.49.232/255.255.255.248
 24.1813 +62.96.53.56/255.255.255.248
 24.1814 +62.96.59.120/255.255.255.248
 24.1815 +62.96.63.56/255.255.255.248
 24.1816 +62.96.63.72/255.255.255.248
 24.1817 +62.96.64.128/255.255.255.248
 24.1818 +62.96.67.48/255.255.255.248
 24.1819 +62.96.67.168/255.255.255.248
 24.1820 +62.96.73.120/255.255.255.248
 24.1821 +62.96.74.80/255.255.255.248
 24.1822 +62.96.75.224/255.255.255.248
 24.1823 +62.96.76.32/255.255.255.248
 24.1824 +62.96.100.216/255.255.255.248
 24.1825 +62.96.202.0/255.255.255.144
 24.1826 +62.96.202.112/255.255.255.248
 24.1827 +62.96.204.48/255.255.255.248
 24.1828 +62.96.223.128/255.255.255.192
 24.1829 +62.96.227.0/255.255.255.192
 24.1830 +62.96.234.0/255.255.253.0
 24.1831 +62.97.72.0/255.255.255.248
 24.1832 +62.97.100.144/255.255.255.248
 24.1833 +62.97.100.160/255.255.255.224
 24.1834 +62.97.112.16/255.255.255.240
 24.1835 +62.97.113.64/255.255.255.224
 24.1836 +62.97.113.176/255.255.255.248
 24.1837 +62.97.116.64/255.255.255.224
 24.1838 +62.97.116.224/255.255.255.240
 24.1839 +62.99.133.0/255.255.255.248
 24.1840 +62.99.133.80/255.255.255.248
 24.1841 +62.99.135.96/255.255.255.248
 24.1842 +62.99.140.64/255.255.255.240
 24.1843 +62.99.156.248/255.255.255.248
 24.1844 +62.99.177.216/255.255.255.248
 24.1845 +62.99.182.208/255.255.255.240
 24.1846 +62.99.191.24/255.255.255.248
 24.1847 +62.99.200.144/255.255.255.248
 24.1848 +62.99.208.240/255.255.255.240
 24.1849 +62.99.214.40/255.255.255.248
 24.1850 +62.99.216.80/255.255.255.248
 24.1851 +62.99.227.16/255.255.255.240
 24.1852 +62.99.231.192/255.255.255.248
 24.1853 +62.99.236.128/255.255.255.240
 24.1854 +62.99.244.40/255.255.255.248
 24.1855 +62.100.242.0/255.255.255.192
 24.1856 +62.101.94.96/255.255.255.240
 24.1857 +62.101.103.0/255.255.255.0
 24.1858 +62.102.35.112/255.255.255.248
 24.1859 +62.105.143.88/255.255.255.248
 24.1860 +62.108.227.0/255.255.255.0
 24.1861 +62.110.24.216/255.255.255.216
 24.1862 +62.110.38.128/255.255.255.128
 24.1863 +62.110.118.192/255.255.255.224
 24.1864 +62.110.128.128/255.255.255.248
 24.1865 +62.110.146.56/255.255.255.248
 24.1866 +62.110.151.60/255.255.255.244
 24.1867 +62.110.175.176/255.255.255.240
 24.1868 +62.110.189.208/255.255.255.240
 24.1869 +62.110.191.136/255.255.255.248
 24.1870 +62.111.76.96/255.255.255.240
 24.1871 +62.111.183.112/255.255.255.248
 24.1872 +62.111.189.144/255.255.255.248
 24.1873 +62.112.132.0/255.255.255.240
 24.1874 +62.116.51.8/255.255.255.248
 24.1875 +62.116.53.128/255.255.255.128
 24.1876 +62.118.42.128/255.255.255.192
 24.1877 +62.118.63.0/255.255.255.192
 24.1878 +62.118.80.0/255.255.255.0
 24.1879 +62.118.224.128/255.255.255.128
 24.1880 +62.119.95.0/255.255.255.0
 24.1881 +62.119.135.88/255.255.255.248
 24.1882 +62.127.104.0/255.255.255.224
 24.1883 +62.128.5.0/255.255.255.0
 24.1884 +62.128.12.96/255.255.255.224
 24.1885 +62.128.128.170/255.255.255.246
 24.1886 +62.129.54.88/255.255.255.248
 24.1887 +62.129.63.232/255.255.255.248
 24.1888 +62.129.138.192/255.255.255.224
 24.1889 +62.130.140.0/255.255.254.0
 24.1890 +62.130.241.0/255.255.255.0
 24.1891 +62.134.61.0/255.255.254.176
 24.1892 +62.134.136.0/255.255.255.192
 24.1893 +62.138.8.64/255.255.255.224
 24.1894 +62.138.12.192/255.255.255.192
 24.1895 +62.138.14.0/255.255.255.240
 24.1896 +62.138.14.128/255.255.255.240
 24.1897 +62.138.14.144/255.255.255.240
 24.1898 +62.138.38.184/255.255.255.248
 24.1899 +62.138.40.128/255.255.255.248
 24.1900 +62.138.54.208/255.255.255.248
 24.1901 +62.138.55.208/255.255.255.240
 24.1902 +62.138.163.112/255.255.255.248
 24.1903 +62.138.169.0/255.255.255.224
 24.1904 +62.138.172.224/255.255.255.248
 24.1905 +62.138.179.16/255.255.255.240
 24.1906 +62.138.195.192/255.255.255.224
 24.1907 +62.138.207.192/255.255.255.240
 24.1908 +62.138.214.176/255.255.255.248
 24.1909 +62.138.226.144/255.255.255.240
 24.1910 +62.138.228.96/255.255.255.224
 24.1911 +62.138.229.136/255.255.255.248
 24.1912 +62.138.239.248/255.255.255.248
 24.1913 +62.138.244.64/255.255.255.240
 24.1914 +62.138.253.240/255.255.255.240
 24.1915 +62.140.210.96/255.255.255.248
 24.1916 +62.144.7.128/255.255.255.192
 24.1917 +62.144.160.128/255.255.255.240
 24.1918 +62.144.211.32/255.255.255.224
 24.1919 +62.145.22.232/255.255.255.248
 24.1920 +62.145.28.248/255.255.255.248
 24.1921 +62.145.135.192/255.255.255.192
 24.1922 +62.146.45.0/255.255.255.0
 24.1923 +62.146.52.224/255.255.255.224
 24.1924 +62.146.80.192/255.255.255.192
 24.1925 +62.146.83.120/255.255.255.248
 24.1926 +62.146.92.208/255.255.255.248
 24.1927 +62.146.105.224/255.255.255.248
 24.1928 +62.146.114.176/255.255.255.248
 24.1929 +62.146.136.0/255.255.255.128
 24.1930 +62.148.81.32/255.255.255.240
 24.1931 +62.148.92.32/255.255.255.240
 24.1932 +62.148.197.16/255.255.255.248
 24.1933 +62.148.199.16/255.255.255.240
 24.1934 +62.149.66.24/255.255.255.248
 24.1935 +62.150.0.0/255.255.255.0
 24.1936 +62.152.120.0/255.255.255.0
 24.1937 +62.152.234.88/255.255.255.248
 24.1938 +62.153.61.112/255.255.255.248
 24.1939 +62.153.63.224/255.255.255.248
 24.1940 +62.153.67.0/255.255.255.224
 24.1941 +62.153.67.160/255.255.255.248
 24.1942 +62.153.79.56/255.255.255.248
 24.1943 +62.153.82.120/255.255.255.248
 24.1944 +62.153.86.64/255.255.255.240
 24.1945 +62.153.89.40/255.255.255.248
 24.1946 +62.153.91.240/255.255.255.240
 24.1947 +62.153.103.120/255.255.255.248
 24.1948 +62.153.103.200/255.255.255.248
 24.1949 +62.153.115.72/255.255.255.248
 24.1950 +62.153.119.176/255.255.255.248
 24.1951 +62.153.131.160/255.255.255.240
 24.1952 +62.153.145.240/255.255.255.248
 24.1953 +62.153.147.88/255.255.255.248
 24.1954 +62.153.151.56/255.255.255.248
 24.1955 +62.153.155.88/255.255.255.248
 24.1956 +62.153.174.16/255.255.255.248
 24.1957 +62.153.192.24/255.255.255.248
 24.1958 +62.153.195.224/255.255.255.240
 24.1959 +62.153.206.152/255.255.255.248
 24.1960 +62.153.217.184/255.255.255.248
 24.1961 +62.153.221.216/255.255.255.248
 24.1962 +62.153.225.216/255.255.255.248
 24.1963 +62.153.230.112/255.255.255.248
 24.1964 +62.153.231.192/255.255.255.248
 24.1965 +62.153.238.72/255.255.255.248
 24.1966 +62.153.238.104/255.255.255.248
 24.1967 +62.153.240.224/255.255.255.248
 24.1968 +62.154.130.160/255.255.255.224
 24.1969 +62.154.137.64/255.255.255.248
 24.1970 +62.154.142.224/255.255.255.248
 24.1971 +62.154.151.104/255.255.255.248
 24.1972 +62.154.152.80/255.255.255.248
 24.1973 +62.154.158.144/255.255.255.248
 24.1974 +62.154.167.176/255.255.255.248
 24.1975 +62.154.173.64/255.255.255.192
 24.1976 +62.154.173.184/255.255.255.248
 24.1977 +62.154.180.0/255.255.255.248
 24.1978 +62.154.181.0/255.255.255.248
 24.1979 +62.154.194.24/255.255.255.248
 24.1980 +62.154.204.168/255.255.255.248
 24.1981 +62.154.206.16/255.255.255.248
 24.1982 +62.154.206.208/255.255.255.248
 24.1983 +62.154.217.120/255.255.255.248
 24.1984 +62.154.218.80/255.255.255.248
 24.1985 +62.154.218.112/255.255.255.248
 24.1986 +62.154.225.216/255.255.255.248
 24.1987 +62.154.252.0/255.255.255.224
 24.1988 +62.154.255.0/255.255.255.0
 24.1989 +62.156.146.128/255.255.255.0
 24.1990 +62.156.153.0/255.255.255.0
 24.1991 +62.157.107.32/255.255.255.240
 24.1992 +62.157.127.152/255.255.255.248
 24.1993 +62.157.130.176/255.255.255.248
 24.1994 +62.157.145.152/255.255.255.248
 24.1995 +62.157.170.144/255.255.255.248
 24.1996 +62.157.170.168/255.255.255.248
 24.1997 +62.157.185.168/255.255.255.248
 24.1998 +62.157.191.128/255.255.255.128
 24.1999 +62.157.195.240/255.255.255.248
 24.2000 +62.157.215.64/255.255.255.240
 24.2001 +62.157.217.104/255.255.255.248
 24.2002 +62.159.14.192/255.255.255.248
 24.2003 +62.159.20.128/255.255.255.192
 24.2004 +62.159.42.224/255.255.255.248
 24.2005 +62.159.67.32/255.255.255.224
 24.2006 +62.159.79.40/255.255.255.248
 24.2007 +62.159.110.128/255.255.255.248
 24.2008 +62.159.120.192/255.255.255.192
 24.2009 +62.159.121.216/255.255.255.248
 24.2010 +62.159.122.48/255.255.255.240
 24.2011 +62.159.123.240/255.255.255.248
 24.2012 +62.159.150.0/255.255.255.240
 24.2013 +62.159.156.120/255.255.255.248
 24.2014 +62.159.188.88/255.255.255.248
 24.2015 +62.159.202.224/255.255.255.248
 24.2016 +62.159.234.0/255.255.255.0
 24.2017 +62.159.246.48/255.255.255.248
 24.2018 +62.159.248.136/255.255.255.248
 24.2019 +62.159.253.208/255.255.255.240
 24.2020 +62.159.255.192/255.255.255.248
 24.2021 +62.160.0.64/255.255.255.224
 24.2022 +62.160.38.0/255.255.255.0
 24.2023 +62.160.39.232/255.255.255.240
 24.2024 +62.160.55.0/255.255.255.0
 24.2025 +62.160.56.136/255.255.255.248
 24.2026 +62.160.61.56/255.255.255.248
 24.2027 +62.160.64.0/255.255.255.0
 24.2028 +62.160.76.0/255.255.254.0
 24.2029 +62.160.78.0/255.255.255.0
 24.2030 +62.160.107.168/255.255.255.248
 24.2031 +62.160.153.0/255.255.255.0
 24.2032 +62.160.188.0/255.255.255.0
 24.2033 +62.160.219.240/255.255.255.248
 24.2034 +62.160.224.0/255.255.255.0
 24.2035 +62.160.236.8/255.255.255.248
 24.2036 +62.161.46.0/255.255.255.0
 24.2037 +62.161.48.0/255.255.255.0
 24.2038 +62.161.56.0/255.255.255.0
 24.2039 +62.161.113.32/255.255.255.248
 24.2040 +62.161.113.136/255.255.255.248
 24.2041 +62.161.119.24/255.255.255.248
 24.2042 +62.161.124.56/255.255.255.248
 24.2043 +62.161.124.72/255.255.255.248
 24.2044 +62.161.124.80/255.255.255.248
 24.2045 +62.161.125.0/255.255.255.224
 24.2046 +62.161.125.192/255.255.255.224
 24.2047 +62.161.152.96/255.255.255.224
 24.2048 +62.161.152.144/255.255.255.240
 24.2049 +62.161.154.200/255.255.255.248
 24.2050 +62.161.155.96/255.255.255.248
 24.2051 +62.161.170.64/255.255.255.224
 24.2052 +62.161.177.192/255.255.255.248
 24.2053 +62.161.177.208/255.255.255.248
 24.2054 +62.161.178.80/255.255.255.240
 24.2055 +62.161.178.176/255.255.255.240
 24.2056 +62.161.185.64/255.255.255.224
 24.2057 +62.161.185.160/255.255.255.224
 24.2058 +62.161.195.0/255.255.255.224
 24.2059 +62.161.199.224/255.255.255.224
 24.2060 +62.161.215.48/255.255.255.248
 24.2061 +62.161.215.120/255.255.255.248
 24.2062 +62.161.215.128/255.255.255.248
 24.2063 +62.161.216.208/255.255.255.240
 24.2064 +62.161.217.208/255.255.255.240
 24.2065 +62.161.217.232/255.255.255.248
 24.2066 +62.161.227.64/255.255.255.248
 24.2067 +62.161.229.128/255.255.255.240
 24.2068 +62.161.232.112/255.255.255.240
 24.2069 +62.161.232.208/255.255.255.240
 24.2070 +62.161.238.64/255.255.255.248
 24.2071 +62.161.238.96/255.255.255.248
 24.2072 +62.161.238.176/255.255.255.248
 24.2073 +62.161.238.184/255.255.255.248
 24.2074 +62.161.239.128/255.255.255.240
 24.2075 +62.161.240.144/255.255.255.240
 24.2076 +62.161.240.176/255.255.255.240
 24.2077 +62.161.245.112/255.255.255.248
 24.2078 +62.161.245.240/255.255.255.240
 24.2079 +62.161.247.128/255.255.255.192
 24.2080 +62.161.252.192/255.255.255.224
 24.2081 +62.161.253.32/255.255.255.224
 24.2082 +62.161.253.224/255.255.255.224
 24.2083 +62.161.255.160/255.255.255.224
 24.2084 +62.166.70.240/255.255.255.248
 24.2085 +62.166.134.0/255.255.255.248
 24.2086 +62.166.142.56/255.255.255.248
 24.2087 +62.166.143.136/255.255.255.248
 24.2088 +62.166.150.112/255.255.255.248
 24.2089 +62.166.162.192/255.255.255.248
 24.2090 +62.166.238.216/255.255.255.248
 24.2091 +62.166.239.112/255.255.255.248
 24.2092 +62.168.11.16/255.255.255.248
 24.2093 +62.168.40.232/255.255.255.248
 24.2094 +62.168.42.64/255.255.255.224
 24.2095 +62.168.57.96/255.255.255.240
 24.2096 +62.168.123.64/255.255.255.248
 24.2097 +62.168.149.240/255.255.255.248
 24.2098 +62.169.4.32/255.255.255.248
 24.2099 +62.169.204.128/255.255.255.248
 24.2100 +62.170.23.0/255.255.255.240
 24.2101 +62.172.74.128/255.255.255.192
 24.2102 +62.172.97.224/255.255.255.224
 24.2103 +62.172.98.136/255.255.255.248
 24.2104 +62.172.105.144/255.255.255.240
 24.2105 +62.172.108.80/255.255.255.248
 24.2106 +62.172.108.160/255.255.255.240
 24.2107 +62.172.122.112/255.255.255.240
 24.2108 +62.172.122.128/255.255.255.224
 24.2109 +62.172.132.56/255.255.255.248
 24.2110 +62.172.141.192/255.255.255.192
 24.2111 +62.172.143.248/255.255.255.248
 24.2112 +62.172.145.64/255.255.255.224
 24.2113 +62.172.181.0/255.255.255.0
 24.2114 +62.172.206.0/255.255.255.224
 24.2115 +62.172.207.32/255.255.255.240
 24.2116 +62.172.208.240/255.255.255.240
 24.2117 +62.173.79.104/255.255.255.247
 24.2118 +62.173.97.96/255.255.255.224
 24.2119 +62.173.104.240/255.255.255.240
 24.2120 +62.173.114.48/255.255.255.248
 24.2121 +62.173.115.112/255.255.255.240
 24.2122 +62.173.120.128/255.255.255.248
 24.2123 +62.173.203.0/255.255.255.0
 24.2124 +62.173.224.184/255.255.255.248
 24.2125 +62.176.33.96/255.255.255.224
 24.2126 +62.176.40.160/255.255.255.224
 24.2127 +62.176.77.224/255.255.255.224
 24.2128 +62.176.236.0/255.255.255.128
 24.2129 +62.177.154.16/255.255.255.248
 24.2130 +62.177.177.120/255.255.255.248
 24.2131 +62.177.186.96/255.255.255.248
 24.2132 +62.177.202.56/255.255.255.248
 24.2133 +62.177.213.104/255.255.255.248
 24.2134 +62.177.214.128/255.255.255.248
 24.2135 +62.177.238.120/255.255.255.248
 24.2136 +62.180.59.144/255.255.255.240
 24.2137 +62.180.63.0/255.255.255.192
 24.2138 +62.180.88.160/255.255.255.240
 24.2139 +62.180.96.192/255.255.255.224
 24.2140 +62.181.71.48/255.255.255.248
 24.2141 +62.181.182.0/255.255.255.248
 24.2142 +62.181.185.200/255.255.255.248
 24.2143 +62.181.193.64/255.255.255.224
 24.2144 +62.181.210.96/255.255.255.248
 24.2145 +62.181.210.160/255.255.255.248
 24.2146 +62.181.211.0/255.255.255.224
 24.2147 +62.184.18.120/255.255.255.248
 24.2148 +62.184.26.224/255.255.255.224
 24.2149 +62.184.34.0/255.255.255.0
 24.2150 +62.184.44.96/255.255.255.240
 24.2151 +62.184.44.128/255.255.255.192
 24.2152 +62.184.45.8/255.255.255.248
 24.2153 +62.184.45.160/255.255.255.248
 24.2154 +62.184.61.0/255.255.255.0
 24.2155 +62.184.72.192/255.255.255.192
 24.2156 +62.184.76.32/255.255.255.240
 24.2157 +62.184.76.192/255.255.255.240
 24.2158 +62.184.124.0/255.255.255.0
 24.2159 +62.184.125.0/255.255.255.128
 24.2160 +62.184.165.48/255.255.255.240
 24.2161 +62.184.167.0/255.255.255.0
 24.2162 +62.184.179.0/255.255.255.0
 24.2163 +62.184.215.0/255.255.255.224
 24.2164 +62.184.252.40/255.255.255.248
 24.2165 +62.184.252.48/255.255.255.240
 24.2166 +62.185.3.0/255.255.255.128
 24.2167 +62.185.22.0/255.255.255.224
 24.2168 +62.185.65.128/255.255.255.128
 24.2169 +62.185.132.224/255.255.255.248
 24.2170 +62.185.132.232/255.255.255.248
 24.2171 +62.185.161.160/255.255.255.224
 24.2172 +62.185.204.0/255.255.255.0
 24.2173 +62.185.227.224/255.255.255.224
 24.2174 +62.186.3.192/255.255.255.224
 24.2175 +62.186.7.64/255.255.255.240
 24.2176 +62.186.33.192/255.255.255.192
 24.2177 +62.186.95.224/255.255.255.224
 24.2178 +62.186.98.0/255.255.255.224
 24.2179 +62.186.137.160/255.255.255.240
 24.2180 +62.187.30.176/255.255.255.240
 24.2181 +62.187.40.128/255.255.255.248
 24.2182 +62.187.45.64/255.255.255.248
 24.2183 +62.187.46.0/255.255.255.0
 24.2184 +62.187.61.192/255.255.255.192
 24.2185 +62.187.106.128/255.255.255.224
 24.2186 +62.187.109.192/255.255.255.224
 24.2187 +62.187.144.16/255.255.255.240
 24.2188 +62.187.149.0/255.255.255.128
 24.2189 +62.187.149.128/255.255.255.128
 24.2190 +62.187.151.240/255.255.255.240
 24.2191 +62.187.254.48/255.255.255.240
 24.2192 +62.189.0.64/255.255.255.240
 24.2193 +62.189.51.192/255.255.255.192
 24.2194 +62.189.64.240/255.255.255.240
 24.2195 +62.189.70.160/255.255.255.240
 24.2196 +62.189.93.0/255.255.255.0
 24.2197 +62.189.102.224/255.255.255.224
 24.2198 +62.189.108.16/255.255.255.240
 24.2199 +62.189.122.176/255.255.255.240
 24.2200 +62.189.124.64/255.255.255.240
 24.2201 +62.189.126.80/255.255.255.240
 24.2202 +62.189.126.176/255.255.255.248
 24.2203 +62.189.167.128/255.255.255.128
 24.2204 +62.189.228.128/255.255.255.192
 24.2205 +62.189.235.96/255.255.255.240
 24.2206 +62.189.243.160/255.255.255.240
 24.2207 +62.190.55.0/255.255.255.128
 24.2208 +62.190.90.0/255.255.254.224
 24.2209 +62.190.108.0/255.255.255.0
 24.2210 +62.190.166.192/255.255.255.192
 24.2211 +62.190.167.48/255.255.255.240
 24.2212 +62.190.187.24/255.255.255.248
 24.2213 +62.190.198.64/255.255.255.224
 24.2214 +62.190.210.0/255.255.255.192
 24.2215 +62.192.1.0/255.255.255.0
 24.2216 +62.192.104.0/255.255.255.240
 24.2217 +62.196.0.0/255.255.0.0
 24.2218 +62.197.39.0/255.255.255.0
 24.2219 +62.200.29.176/255.255.255.248
 24.2220 +62.200.52.160/255.255.255.240
 24.2221 +62.200.56.96/255.255.255.224
 24.2222 +62.200.89.0/255.255.255.0
 24.2223 +62.200.100.128/255.255.255.192
 24.2224 +62.200.133.160/255.255.255.224
 24.2225 +62.200.144.0/255.255.255.224
 24.2226 +62.200.166.128/255.255.255.192
 24.2227 +62.200.173.0/255.255.255.224
 24.2228 +62.200.228.32/255.255.255.224
 24.2229 +62.204.191.0/255.255.255.0
 24.2230 +62.206.42.112/255.255.255.248
 24.2231 +62.206.56.0/255.255.255.224
 24.2232 +62.206.56.192/255.255.255.224
 24.2233 +62.206.65.192/255.255.255.248
 24.2234 +62.206.86.80/255.255.255.240
 24.2235 +62.206.87.80/255.255.255.248
 24.2236 +62.206.96.16/255.255.255.248
 24.2237 +62.206.114.32/255.255.255.240
 24.2238 +62.206.114.176/255.255.255.240
 24.2239 +62.206.191.0/255.255.255.0
 24.2240 +62.206.211.0/255.255.255.248
 24.2241 +62.209.161.48/255.255.255.240
 24.2242 +62.210.130.96/255.255.255.240
 24.2243 +62.210.138.0/255.255.255.0
 24.2244 +62.210.162.240/255.255.255.240
 24.2245 +62.212.89.0/255.255.255.0
 24.2246 +62.215.215.160/255.255.255.224
 24.2247 +62.215.216.80/255.255.255.248
 24.2248 +62.215.216.88/255.255.255.248
 24.2249 +62.215.221.192/255.255.255.192
 24.2250 +62.215.228.96/255.255.255.224
 24.2251 +62.215.230.0/255.255.255.240
 24.2252 +62.215.232.80/255.255.255.239
 24.2253 +62.216.250.64/255.255.255.192
 24.2254 +62.217.33.16/255.255.255.248
 24.2255 +62.217.38.80/255.255.255.240
 24.2256 +62.217.53.16/255.255.255.240
 24.2257 +62.218.20.24/255.255.255.248
 24.2258 +62.218.20.160/255.255.255.224
 24.2259 +62.218.47.80/255.255.255.240
 24.2260 +62.218.145.64/255.255.255.248
 24.2261 +62.218.145.128/255.255.255.240
 24.2262 +62.218.145.160/255.255.255.240
 24.2263 +62.219.32.248/255.255.255.248
 24.2264 +62.219.177.56/255.255.255.248
 24.2265 +62.219.177.224/255.255.255.240
 24.2266 +62.219.178.192/255.255.255.248
 24.2267 +62.219.178.240/255.255.255.248
 24.2268 +62.219.180.112/255.255.255.248
 24.2269 +62.219.185.16/255.255.255.248
 24.2270 +62.219.242.96/255.255.255.240
 24.2271 +62.219.245.200/255.255.255.248
 24.2272 +62.219.249.96/255.255.255.248
 24.2273 +62.219.254.208/255.255.255.240
 24.2274 +62.220.6.32/255.255.255.248
 24.2275 +62.220.28.32/255.255.255.248
 24.2276 +62.220.134.96/255.255.255.248
 24.2277 +62.225.14.88/255.255.255.248
 24.2278 +62.225.44.128/255.255.255.248
 24.2279 +62.225.44.152/255.255.255.248
 24.2280 +62.225.66.0/255.255.255.0
 24.2281 +62.225.109.64/255.255.255.224
 24.2282 +62.225.109.216/255.255.255.248
 24.2283 +62.225.117.0/255.255.255.112
 24.2284 +62.225.118.80/255.255.255.248
 24.2285 +62.225.118.168/255.255.255.248
 24.2286 +62.225.123.216/255.255.255.248
 24.2287 +62.225.130.32/255.255.255.248
 24.2288 +62.225.130.192/255.255.255.224
 24.2289 +62.225.135.64/255.255.255.248
 24.2290 +62.225.135.192/255.255.255.248
 24.2291 +62.225.139.0/255.255.255.240
 24.2292 +62.225.141.208/255.255.255.248
 24.2293 +62.225.153.64/255.255.255.224
 24.2294 +62.225.158.112/255.255.255.240
 24.2295 +62.225.160.232/255.255.255.248
 24.2296 +62.225.163.152/255.255.255.248
 24.2297 +62.225.178.8/255.255.255.248
 24.2298 +62.225.181.32/255.255.255.248
 24.2299 +62.225.182.104/255.255.255.248
 24.2300 +62.225.182.112/255.255.255.248
 24.2301 +62.225.189.176/255.255.255.248
 24.2302 +62.231.0.96/255.255.255.248
 24.2303 +62.231.40.112/255.255.255.240
 24.2304 +62.231.80.0/255.255.255.224
 24.2305 +62.231.111.48/255.255.255.248
 24.2306 +62.231.114.128/255.255.255.192
 24.2307 +62.231.141.160/255.255.255.224
 24.2308 +62.232.14.8/255.255.255.248
 24.2309 +62.232.27.16/255.255.255.240
 24.2310 +62.232.32.176/255.255.255.248
 24.2311 +62.232.33.224/255.255.255.248
 24.2312 +62.232.60.0/255.255.255.0
 24.2313 +62.232.79.0/255.255.255.240
 24.2314 +62.233.129.128/255.255.255.248
 24.2315 +62.233.130.8/255.255.255.248
 24.2316 +62.234.226.40/255.255.255.248
 24.2317 +62.236.93.32/255.255.255.248
 24.2318 +62.236.160.144/255.255.255.248
 24.2319 +62.236.224.0/255.255.240.0
 24.2320 +62.237.16.0/255.255.248.0
 24.2321 +62.237.129.176/255.255.255.248
 24.2322 +62.242.162.104/255.255.255.248
 24.2323 +62.242.207.136/255.255.255.248
 24.2324 +62.243.123.0/255.255.255.128
 24.2325 +62.243.244.0/255.255.255.192
 24.2326 +62.244.16.192/255.255.255.192
 24.2327 +62.244.31.32/255.255.255.240
 24.2328 +62.244.182.128/255.255.255.248
 24.2329 +62.244.188.208/255.255.255.248
 24.2330 +62.245.128.192/255.255.255.224
 24.2331 +62.245.129.112/255.255.255.240
 24.2332 +62.245.129.208/255.255.255.240
 24.2333 +62.245.142.128/255.255.255.128
 24.2334 +62.245.155.208/255.255.255.240
 24.2335 +62.245.169.112/255.255.255.240
 24.2336 +62.245.171.48/255.255.255.240
 24.2337 +62.245.186.160/255.255.255.240
 24.2338 +62.245.186.192/255.255.255.248
 24.2339 +62.245.198.112/255.255.255.240
 24.2340 +62.245.200.160/255.255.255.240
 24.2341 +62.245.201.96/255.255.255.248
 24.2342 +62.245.204.64/255.255.255.248
 24.2343 +62.245.204.72/255.255.255.248
 24.2344 +62.245.223.144/255.255.255.240
 24.2345 +62.245.230.224/255.255.255.240
 24.2346 +62.245.231.104/255.255.255.248
 24.2347 +62.247.0.32/255.255.255.224
 24.2348 +62.247.128.32/255.255.255.240
 24.2349 +62.249.1.48/255.255.255.240
 24.2350 +62.249.9.0/255.255.255.224
 24.2351 +62.250.12.0/255.255.255.0
 24.2352 +62.251.168.0/255.255.255.240
 24.2353 +62.251.192.144/255.255.255.240
 24.2354 +62.251.194.32/255.255.255.224
 24.2355 +62.251.196.64/255.255.255.192
 24.2356 +62.251.201.128/255.255.255.240
 24.2357 +62.251.204.16/255.255.255.240
 24.2358 +62.251.206.32/255.255.255.240
 24.2359 +62.251.207.96/255.255.255.240
 24.2360 +62.251.216.32/255.255.255.224
 24.2361 +62.253.218.0/255.255.255.128
 24.2362 +62.254.162.128/255.255.255.240
 24.2363 +62.254.168.128/255.255.255.224
 24.2364 +62.254.168.160/255.255.255.224
 24.2365 +62.254.173.0/255.255.255.0
 24.2366 +62.254.178.112/255.255.255.240
 24.2367 +62.254.205.144/255.255.255.240
 24.2368 +62.254.212.160/255.255.255.224
 24.2369 +63.64.5.0/255.255.255.0
 24.2370 +63.64.20.0/255.255.255.0
 24.2371 +63.64.74.184/255.255.255.248
 24.2372 +63.64.94.0/255.255.255.0
 24.2373 +63.64.120.96/255.255.255.224
 24.2374 +63.64.157.0/255.255.255.0
 24.2375 +63.65.55.32/255.255.255.248
 24.2376 +63.65.67.0/255.255.255.0
 24.2377 +63.65.106.0/255.255.255.0
 24.2378 +63.65.235.0/255.255.255.0
 24.2379 +63.66.225.192/255.255.255.240
 24.2380 +63.67.5.0/255.255.255.128
 24.2381 +63.67.26.72/255.255.255.232
 24.2382 +63.67.74.216/255.255.255.248
 24.2383 +63.67.76.160/255.255.255.248
 24.2384 +63.67.185.128/255.255.255.192
 24.2385 +63.68.14.32/255.255.255.224
 24.2386 +63.68.20.0/255.255.252.0
 24.2387 +63.68.220.192/255.255.255.240
 24.2388 +63.68.233.112/255.255.255.240
 24.2389 +63.68.242.104/255.255.255.248
 24.2390 +63.69.4.216/255.255.255.248
 24.2391 +63.69.11.0/255.255.255.0
 24.2392 +63.69.82.0/255.255.255.128
 24.2393 +63.69.127.16/255.255.255.240
 24.2394 +63.69.160.192/255.255.255.192
 24.2395 +63.70.42.0/255.255.255.0
 24.2396 +63.70.44.0/255.255.252.0
 24.2397 +63.70.49.88/255.255.255.248
 24.2398 +63.70.56.0/255.255.254.0
 24.2399 +63.70.134.64/255.255.255.224
 24.2400 +63.70.153.0/255.255.255.0
 24.2401 +63.70.170.24/255.255.255.248
 24.2402 +63.70.198.192/255.255.255.192
 24.2403 +63.70.238.64/255.255.255.224
 24.2404 +63.71.2.0/255.255.255.0
 24.2405 +63.71.41.192/255.255.255.224
 24.2406 +63.71.64.160/255.255.255.248
 24.2407 +63.71.102.160/255.255.255.224
 24.2408 +63.71.228.0/255.255.254.0
 24.2409 +63.72.0.0/255.255.252.0
 24.2410 +63.72.7.192/255.255.255.224
 24.2411 +63.72.45.240/255.255.255.248
 24.2412 +63.72.53.0/255.255.255.0
 24.2413 +63.72.55.0/255.255.255.192
 24.2414 +63.72.100.128/255.255.255.128
 24.2415 +63.72.160.0/255.255.255.192
 24.2416 +63.72.213.128/255.255.255.128
 24.2417 +63.72.254.208/255.255.255.240
 24.2418 +63.73.31.240/255.255.255.248
 24.2419 +63.73.35.32/255.255.255.240
 24.2420 +63.73.71.208/255.255.255.240
 24.2421 +63.73.96.64/255.255.255.248
 24.2422 +63.73.96.120/255.255.255.248
 24.2423 +63.73.130.0/255.255.254.0
 24.2424 +63.73.207.192/255.255.255.240
 24.2425 +63.73.211.0/255.255.255.0
 24.2426 +63.73.235.80/255.255.255.240
 24.2427 +63.74.109.0/255.255.255.0
 24.2428 +63.75.98.240/255.255.255.240
 24.2429 +63.75.107.32/255.255.255.224
 24.2430 +63.75.117.192/255.255.255.192
 24.2431 +63.75.133.0/255.255.255.0
 24.2432 +63.75.195.64/255.255.255.192
 24.2433 +63.75.214.0/255.255.255.0
 24.2434 +63.76.30.144/255.255.255.248
 24.2435 +63.76.142.48/255.255.255.240
 24.2436 +63.76.173.32/255.255.255.240
 24.2437 +63.76.174.64/255.255.255.240
 24.2438 +63.77.211.120/255.255.255.248
 24.2439 +63.77.248.0/255.255.252.0
 24.2440 +63.78.30.0/255.255.255.192
 24.2441 +63.78.79.144/255.255.255.248
 24.2442 +63.78.79.184/255.255.255.248
 24.2443 +63.78.156.192/255.255.255.240
 24.2444 +63.78.220.64/255.255.255.248
 24.2445 +63.78.220.96/255.255.255.224
 24.2446 +63.78.235.192/255.255.255.192
 24.2447 +63.79.9.72/255.255.255.248
 24.2448 +63.79.100.0/255.255.252.0
 24.2449 +63.79.165.192/255.255.255.224
 24.2450 +63.79.199.64/255.255.255.192
 24.2451 +63.80.6.0/255.255.255.0
 24.2452 +63.80.58.192/255.255.255.192
 24.2453 +63.80.74.32/255.255.255.224
 24.2454 +63.80.74.128/255.255.255.224
 24.2455 +63.80.79.96/255.255.255.224
 24.2456 +63.80.88.0/255.255.254.0
 24.2457 +63.80.97.64/255.255.255.240
 24.2458 +63.80.197.192/255.255.255.192
 24.2459 +63.80.203.16/255.255.255.240
 24.2460 +63.80.207.16/255.255.255.240
 24.2461 +63.80.233.176/255.255.255.240
 24.2462 +63.80.233.240/255.255.255.240
 24.2463 +63.80.249.48/255.255.255.240
 24.2464 +63.80.249.80/255.255.255.240
 24.2465 +63.80.249.128/255.255.255.128
 24.2466 +63.81.4.48/255.255.255.240
 24.2467 +63.81.4.64/255.255.255.192
 24.2468 +63.81.4.224/255.255.255.240
 24.2469 +63.81.9.80/255.255.255.240
 24.2470 +63.81.10.0/255.255.255.0
 24.2471 +63.81.35.80/255.255.255.208
 24.2472 +63.81.35.128/255.255.255.240
 24.2473 +63.81.44.0/255.255.255.192
 24.2474 +63.81.47.144/255.255.255.240
 24.2475 +63.81.48.32/255.255.255.240
 24.2476 +63.81.75.208/255.255.255.240
 24.2477 +63.81.98.0/255.255.255.240
 24.2478 +63.81.133.0/255.255.255.240
 24.2479 +63.81.133.64/255.255.255.224
 24.2480 +63.81.133.96/255.255.255.240
 24.2481 +63.81.138.16/255.255.255.240
 24.2482 +63.81.143.248/255.255.255.248
 24.2483 +63.82.99.136/255.255.255.248
 24.2484 +63.82.112.0/255.255.248.0
 24.2485 +63.83.35.64/255.255.255.248
 24.2486 +63.83.205.0/255.255.255.0
 24.2487 +63.85.13.240/255.255.255.240
 24.2488 +63.85.241.0/255.255.255.128
 24.2489 +63.85.241.128/255.255.255.224
 24.2490 +63.86.88.0/255.255.255.0
 24.2491 +63.86.138.112/255.255.255.240
 24.2492 +63.86.140.80/255.255.255.240
 24.2493 +63.87.2.0/255.255.255.0
 24.2494 +63.87.106.0/255.255.254.0
 24.2495 +63.87.140.0/255.255.255.192
 24.2496 +63.87.175.96/255.255.255.224
 24.2497 +63.87.188.200/255.255.255.248
 24.2498 +63.87.238.0/255.255.254.0
 24.2499 +63.88.40.0/255.255.255.0
 24.2500 +63.88.110.128/255.255.255.224
 24.2501 +63.88.212.0/255.255.254.0
 24.2502 +63.90.82.0/255.255.255.128
 24.2503 +63.90.143.128/255.255.255.224
 24.2504 +63.90.153.64/255.255.255.224
 24.2505 +63.92.1.160/255.255.255.224
 24.2506 +63.92.207.64/255.255.255.192
 24.2507 +63.93.193.0/255.255.255.0
 24.2508 +63.94.97.16/255.255.255.240
 24.2509 +63.95.49.0/255.255.255.128
 24.2510 +63.99.146.0/255.255.255.0
 24.2511 +63.100.18.40/255.255.255.248
 24.2512 +63.100.49.240/255.255.255.248
 24.2513 +63.100.163.0/255.255.255.0
 24.2514 +63.100.235.128/255.255.255.192
 24.2515 +63.101.46.136/255.255.255.248
 24.2516 +63.103.176.208/255.255.255.240
 24.2517 +63.103.242.122/255.255.255.238
 24.2518 +63.103.244.82/255.255.255.210
 24.2519 +63.103.245.103/255.255.255.245
 24.2520 +63.103.251.128/255.255.255.224
 24.2521 +63.104.218.0/255.255.254.0
 24.2522 +63.105.37.0/255.255.255.0
 24.2523 +63.107.15.80/255.255.255.248
 24.2524 +63.108.102.32/255.255.255.224
 24.2525 +63.109.12.0/255.255.255.0
 24.2526 +63.109.88.104/255.255.255.248
 24.2527 +63.109.101.0/255.255.255.0
 24.2528 +63.109.192.0/255.255.240.0
 24.2529 +63.109.213.208/255.255.255.240
 24.2530 +63.109.215.144/255.255.255.248
 24.2531 +63.110.14.0/255.255.255.0
 24.2532 +63.110.47.32/255.255.255.224
 24.2533 +63.110.80.0/255.255.255.0
 24.2534 +63.111.47.32/255.255.255.224
 24.2535 +63.111.50.184/255.255.255.248
 24.2536 +63.114.82.128/255.255.255.240
 24.2537 +63.114.203.96/255.255.255.240
 24.2538 +63.116.153.0/255.255.255.0
 24.2539 +63.116.160.0/255.255.255.0
 24.2540 +63.118.177.128/255.255.255.128
 24.2541 +63.119.51.88/255.255.255.248
 24.2542 +63.119.115.80/255.255.255.240
 24.2543 +63.119.206.112/255.255.255.240
 24.2544 +63.119.236.0/255.255.255.0
 24.2545 +63.120.11.0/255.255.255.0
 24.2546 +63.120.61.0/255.255.255.128
 24.2547 +63.120.254.160/255.255.255.224
 24.2548 +63.121.1.0/255.255.254.0
 24.2549 +63.121.64.0/255.255.255.0
 24.2550 +63.121.95.240/255.255.255.240
 24.2551 +63.121.140.0/255.255.255.0
 24.2552 +63.122.67.192/255.255.255.248
 24.2553 +63.122.165.144/255.255.255.240
 24.2554 +63.124.67.128/255.255.255.128
 24.2555 +63.124.150.200/255.255.255.248
 24.2556 +63.124.182.48/255.255.255.240
 24.2557 +63.125.11.104/255.255.255.248
 24.2558 +63.126.131.0/255.255.255.0
 24.2559 +63.126.147.64/255.255.255.240
 24.2560 +63.127.41.0/255.255.255.0
 24.2561 +63.127.255.0/255.255.255.0
 24.2562 +63.136.8.128/255.255.255.128
 24.2563 +63.136.32.0/255.255.224.0
 24.2564 +63.136.96.144/255.255.255.240
 24.2565 +63.136.120.128/255.255.255.240
 24.2566 +63.136.192.64/255.255.255.192
 24.2567 +63.136.233.32/255.255.255.224
 24.2568 +63.137.50.128/255.255.255.128
 24.2569 +63.137.53.0/255.255.255.0
 24.2570 +63.140.186.136/255.255.255.248
 24.2571 +63.141.21.168/255.255.255.248
 24.2572 +63.141.113.160/255.255.255.248
 24.2573 +63.141.152.0/255.255.255.0
 24.2574 +63.141.173.24/255.255.255.248
 24.2575 +63.141.181.0/255.255.255.0
 24.2576 +63.141.184.64/255.255.255.224
 24.2577 +63.141.186.40/255.255.255.248
 24.2578 +63.141.186.184/255.255.255.248
 24.2579 +63.141.209.0/255.255.255.0
 24.2580 +63.142.7.0/255.255.255.0
 24.2581 +63.142.41.0/255.255.255.0
 24.2582 +63.142.43.240/255.255.255.248
 24.2583 +63.142.181.176/255.255.255.248
 24.2584 +63.142.193.104/255.255.255.248
 24.2585 +63.143.23.224/255.255.255.248
 24.2586 +63.143.85.216/255.255.255.248
 24.2587 +63.143.129.32/255.255.255.248
 24.2588 +63.143.133.96/255.255.255.240
 24.2589 +63.143.140.0/255.255.255.0
 24.2590 +63.143.157.120/255.255.255.248
 24.2591 +63.143.176.80/255.255.255.248
 24.2592 +63.143.185.16/255.255.255.240
 24.2593 +63.143.211.232/255.255.255.248
 24.2594 +63.143.253.128/255.255.255.248
 24.2595 +63.144.20.192/255.255.255.224
 24.2596 +63.144.60.64/255.255.255.240
 24.2597 +63.144.73.192/255.255.255.224
 24.2598 +63.144.142.24/255.255.255.248
 24.2599 +63.144.183.224/255.255.255.224
 24.2600 +63.145.109.96/255.255.255.224
 24.2601 +63.145.169.160/255.255.255.224
 24.2602 +63.145.188.0/255.255.254.0
 24.2603 +63.146.109.128/255.255.255.128
 24.2604 +63.146.120.0/255.255.255.240
 24.2605 +63.146.120.24/255.255.255.248
 24.2606 +63.146.120.160/255.255.255.224
 24.2607 +63.146.124.0/255.255.255.192
 24.2608 +63.147.160.0/255.255.252.0
 24.2609 +63.148.71.64/255.255.255.224
 24.2610 +63.148.87.0/255.255.254.0
 24.2611 +63.148.99.224/255.255.255.224
 24.2612 +63.148.160.0/255.255.255.0
 24.2613 +63.150.44.0/255.255.255.0
 24.2614 +63.150.98.104/255.255.255.240
 24.2615 +63.150.98.176/255.255.255.248
 24.2616 +63.150.99.64/255.255.255.240
 24.2617 +63.150.99.184/255.255.255.248
 24.2618 +63.150.99.208/255.255.255.248
 24.2619 +63.150.101.160/255.255.255.240
 24.2620 +63.150.101.184/255.255.255.248
 24.2621 +63.150.111.8/255.255.255.248
 24.2622 +63.150.111.88/255.255.255.248
 24.2623 +63.150.111.112/255.255.255.248
 24.2624 +63.150.111.128/255.255.255.248
 24.2625 +63.150.111.144/255.255.255.248
 24.2626 +63.150.113.224/255.255.255.240
 24.2627 +63.150.121.40/255.255.255.240
 24.2628 +63.150.121.176/255.255.255.232
 24.2629 +63.150.121.200/255.255.255.248
 24.2630 +63.150.121.248/255.255.255.248
 24.2631 +63.150.127.176/255.255.255.240
 24.2632 +63.150.127.232/255.255.255.248
 24.2633 +63.150.127.240/255.255.255.248
 24.2634 +63.150.145.240/255.255.255.240
 24.2635 +63.150.149.0/255.255.255.0
 24.2636 +63.150.243.72/255.255.255.232
 24.2637 +63.150.243.112/255.255.255.240
 24.2638 +63.150.243.136/255.255.255.224
 24.2639 +63.150.243.192/255.255.255.248
 24.2640 +63.150.243.232/255.255.255.248
 24.2641 +63.150.248.128/255.255.255.240
 24.2642 +63.150.248.160/255.255.255.240
 24.2643 +63.150.248.216/255.255.255.240
 24.2644 +63.150.248.240/255.255.255.248
 24.2645 +63.150.250.96/255.255.255.248
 24.2646 +63.150.250.112/255.255.255.248
 24.2647 +63.150.250.184/255.255.255.248
 24.2648 +63.150.250.208/255.255.255.248
 24.2649 +63.160.58.96/255.255.255.224
 24.2650 +63.161.94.0/255.255.255.0
 24.2651 +63.162.96.160/255.255.255.240
 24.2652 +63.162.143.0/255.255.255.224
 24.2653 +63.162.157.160/255.255.255.224
 24.2654 +63.163.102.0/255.255.255.0
 24.2655 +63.163.104.32/255.255.255.240
 24.2656 +63.163.111.0/255.255.255.192
 24.2657 +63.163.164.48/255.255.255.240
 24.2658 +63.163.213.200/255.255.255.248
 24.2659 +63.163.246.0/255.255.255.128
 24.2660 +63.165.60.128/255.255.255.128
 24.2661 +63.166.47.168/255.255.255.248
 24.2662 +63.166.100.0/255.255.255.0
 24.2663 +63.166.249.0/255.255.255.0
 24.2664 +63.168.49.0/255.255.255.0
 24.2665 +63.168.56.0/255.255.255.0
 24.2666 +63.169.16.216/255.255.255.248
 24.2667 +63.171.40.128/255.255.255.128
 24.2668 +63.171.184.0/255.255.255.128
 24.2669 +63.171.224.0/255.255.255.112
 24.2670 +63.172.60.0/255.255.255.192
 24.2671 +63.172.99.224/255.255.255.224
 24.2672 +63.173.29.64/255.255.255.224
 24.2673 +63.174.161.16/255.255.255.240
 24.2674 +63.174.215.32/255.255.255.224
 24.2675 +63.192.13.208/255.255.255.248
 24.2676 +63.192.23.208/255.255.255.248
 24.2677 +63.192.34.64/255.255.255.224
 24.2678 +63.192.37.128/255.255.255.224
 24.2679 +63.192.41.176/255.255.255.248
 24.2680 +63.192.42.160/255.255.255.248
 24.2681 +63.192.44.192/255.255.255.248
 24.2682 +63.192.45.64/255.255.255.224
 24.2683 +63.192.118.0/255.255.255.0
 24.2684 +63.192.198.96/255.255.255.248
 24.2685 +63.192.200.152/255.255.255.248
 24.2686 +63.192.202.128/255.255.255.248
 24.2687 +63.192.236.216/255.255.255.248
 24.2688 +63.192.244.144/255.255.255.248
 24.2689 +63.192.253.16/255.255.255.248
 24.2690 +63.193.5.248/255.255.255.248
 24.2691 +63.193.52.144/255.255.255.248
 24.2692 +63.193.74.24/255.255.255.248
 24.2693 +63.193.78.192/255.255.255.224
 24.2694 +63.193.97.224/255.255.255.248
 24.2695 +63.193.102.112/255.255.255.248
 24.2696 +63.193.136.152/255.255.255.248
 24.2697 +63.193.176.0/255.255.255.128
 24.2698 +63.193.238.0/255.255.255.248
 24.2699 +63.194.4.120/255.255.255.248
 24.2700 +63.194.7.160/255.255.255.224
 24.2701 +63.194.32.64/255.255.255.224
 24.2702 +63.194.34.128/255.255.255.248
 24.2703 +63.194.35.208/255.255.255.248
 24.2704 +63.194.65.160/255.255.255.248
 24.2705 +63.194.67.80/255.255.255.248
 24.2706 +63.194.68.80/255.255.255.240
 24.2707 +63.194.68.128/255.255.255.248
 24.2708 +63.194.98.216/255.255.255.248
 24.2709 +63.194.177.128/255.255.255.248
 24.2710 +63.194.178.56/255.255.255.248
 24.2711 +63.194.182.136/255.255.255.248
 24.2712 +63.194.182.160/255.255.255.248
 24.2713 +63.194.192.40/255.255.255.248
 24.2714 +63.194.197.208/255.255.255.248
 24.2715 +63.194.198.184/255.255.255.248
 24.2716 +63.194.199.144/255.255.255.248
 24.2717 +63.194.205.80/255.255.255.248
 24.2718 +63.195.32.240/255.255.255.248
 24.2719 +63.195.41.0/255.255.255.248
 24.2720 +63.195.43.64/255.255.255.248
 24.2721 +63.195.65.64/255.255.255.224
 24.2722 +63.195.98.176/255.255.255.248
 24.2723 +63.195.135.120/255.255.255.248
 24.2724 +63.195.137.176/255.255.255.248
 24.2725 +63.195.185.128/255.255.255.224
 24.2726 +63.195.208.24/255.255.255.248
 24.2727 +63.195.209.8/255.255.255.248
 24.2728 +63.195.215.80/255.255.255.248
 24.2729 +63.195.219.144/255.255.255.248
 24.2730 +63.196.37.152/255.255.255.248
 24.2731 +63.196.41.168/255.255.255.248
 24.2732 +63.196.70.128/255.255.255.224
 24.2733 +63.196.146.88/255.255.255.248
 24.2734 +63.196.251.128/255.255.255.248
 24.2735 +63.197.166.248/255.255.255.248
 24.2736 +63.197.167.32/255.255.255.224
 24.2737 +63.197.168.0/255.255.255.0
 24.2738 +63.197.224.160/255.255.255.224
 24.2739 +63.197.239.240/255.255.255.248
 24.2740 +63.198.8.160/255.255.255.224
 24.2741 +63.198.9.112/255.255.255.248
 24.2742 +63.198.40.112/255.255.255.248
 24.2743 +63.198.138.248/255.255.255.248
 24.2744 +63.198.144.8/255.255.255.240
 24.2745 +63.198.147.224/255.255.255.224
 24.2746 +63.198.161.248/255.255.255.248
 24.2747 +63.198.168.72/255.255.255.248
 24.2748 +63.198.169.176/255.255.255.248
 24.2749 +63.198.248.152/255.255.255.248
 24.2750 +63.199.24.224/255.255.255.224
 24.2751 +63.199.48.32/255.255.255.248
 24.2752 +63.199.48.40/255.255.255.248
 24.2753 +63.199.48.48/255.255.255.248
 24.2754 +63.199.56.152/255.255.255.248
 24.2755 +63.199.57.32/255.255.255.248
 24.2756 +63.199.57.96/255.255.255.240
 24.2757 +63.199.57.120/255.255.255.248
 24.2758 +63.199.60.64/255.255.255.224
 24.2759 +63.199.110.88/255.255.255.248
 24.2760 +63.199.153.192/255.255.255.248
 24.2761 +63.199.157.184/255.255.255.248
 24.2762 +63.199.198.40/255.255.255.248
 24.2763 +63.199.208.232/255.255.255.248
 24.2764 +63.199.208.248/255.255.255.248
 24.2765 +63.200.21.16/255.255.255.248
 24.2766 +63.200.24.152/255.255.255.248
 24.2767 +63.200.43.200/255.255.255.248
 24.2768 +63.200.58.88/255.255.255.248
 24.2769 +63.200.76.0/255.255.255.224
 24.2770 +63.200.90.240/255.255.255.248
 24.2771 +63.200.191.200/255.255.255.248
 24.2772 +63.200.201.64/255.255.255.248
 24.2773 +63.200.218.80/255.255.255.240
 24.2774 +63.200.236.248/255.255.255.248
 24.2775 +63.200.237.216/255.255.255.248
 24.2776 +63.200.243.152/255.255.255.248
 24.2777 +63.201.18.72/255.255.255.248
 24.2778 +63.201.49.56/255.255.255.248
 24.2779 +63.201.57.80/255.255.255.248
 24.2780 +63.201.68.48/255.255.255.248
 24.2781 +63.201.83.128/255.255.255.248
 24.2782 +63.201.100.64/255.255.255.248
 24.2783 +63.201.108.40/255.255.255.248
 24.2784 +63.201.109.200/255.255.255.248
 24.2785 +63.201.114.64/255.255.255.192
 24.2786 +63.201.158.200/255.255.255.248
 24.2787 +63.202.5.32/255.255.255.224
 24.2788 +63.202.11.184/255.255.255.248
 24.2789 +63.202.16.240/255.255.255.248
 24.2790 +63.202.17.168/255.255.255.248
 24.2791 +63.202.18.0/255.255.255.224
 24.2792 +63.202.25.224/255.255.255.248
 24.2793 +63.202.32.40/255.255.255.248
 24.2794 +63.202.32.64/255.255.255.240
 24.2795 +63.202.44.56/255.255.255.248
 24.2796 +63.202.59.112/255.255.255.240
 24.2797 +63.202.60.232/255.255.255.248
 24.2798 +63.202.61.8/255.255.255.248
 24.2799 +63.202.95.112/255.255.255.248
 24.2800 +63.202.114.96/255.255.255.248
 24.2801 +63.202.126.224/255.255.255.224
 24.2802 +63.202.162.0/255.255.255.248
 24.2803 +63.202.162.24/255.255.255.248
 24.2804 +63.202.190.96/255.255.255.248
 24.2805 +63.202.201.208/255.255.255.248
 24.2806 +63.202.202.168/255.255.255.248
 24.2807 +63.202.202.184/255.255.255.248
 24.2808 +63.202.202.224/255.255.255.248
 24.2809 +63.202.206.96/255.255.255.248
 24.2810 +63.202.207.120/255.255.255.248
 24.2811 +63.202.227.200/255.255.255.248
 24.2812 +63.203.14.192/255.255.255.248
 24.2813 +63.203.56.240/255.255.255.248
 24.2814 +63.203.88.56/255.255.255.248
 24.2815 +63.203.125.232/255.255.255.248
 24.2816 +63.203.127.24/255.255.255.248
 24.2817 +63.203.128.56/255.255.255.248
 24.2818 +63.203.134.48/255.255.255.248
 24.2819 +63.203.141.128/255.255.255.224
 24.2820 +63.203.143.160/255.255.255.248
 24.2821 +63.203.186.232/255.255.255.248
 24.2822 +63.203.187.184/255.255.255.248
 24.2823 +63.203.203.200/255.255.255.248
 24.2824 +63.203.245.192/255.255.255.248
 24.2825 +63.204.35.240/255.255.255.248
 24.2826 +63.204.85.168/255.255.255.248
 24.2827 +63.204.123.232/255.255.255.248
 24.2828 +63.204.141.80/255.255.255.248
 24.2829 +63.204.167.216/255.255.255.248
 24.2830 +63.204.173.32/255.255.255.248
 24.2831 +63.204.234.48/255.255.255.240
 24.2832 +63.205.1.96/255.255.255.224
 24.2833 +63.205.22.24/255.255.255.248
 24.2834 +63.205.32.32/255.255.255.248
 24.2835 +63.205.127.216/255.255.255.248
 24.2836 +63.205.155.136/255.255.255.248
 24.2837 +63.205.210.96/255.255.255.248
 24.2838 +63.205.215.176/255.255.255.240
 24.2839 +63.206.11.128/255.255.255.248
 24.2840 +63.206.83.96/255.255.255.248
 24.2841 +63.206.83.120/255.255.255.248
 24.2842 +63.206.87.120/255.255.255.248
 24.2843 +63.206.108.184/255.255.255.248
 24.2844 +63.206.109.112/255.255.255.248
 24.2845 +63.206.109.168/255.255.255.248
 24.2846 +63.206.144.120/255.255.255.248
 24.2847 +63.206.150.0/255.255.255.0
 24.2848 +63.206.155.48/255.255.255.248
 24.2849 +63.206.209.104/255.255.255.248
 24.2850 +63.206.209.176/255.255.255.248
 24.2851 +63.206.217.48/255.255.255.248
 24.2852 +63.206.219.112/255.255.255.248
 24.2853 +63.206.249.104/255.255.255.248
 24.2854 +63.207.43.0/255.255.255.224
 24.2855 +63.207.92.192/255.255.255.248
 24.2856 +63.207.114.32/255.255.255.248
 24.2857 +63.207.114.48/255.255.255.248
 24.2858 +63.207.116.192/255.255.255.248
 24.2859 +63.207.164.64/255.255.255.224
 24.2860 +63.207.174.192/255.255.255.248
 24.2861 +63.207.175.24/255.255.255.248
 24.2862 +63.207.201.192/255.255.255.248
 24.2863 +63.207.240.112/255.255.255.248
 24.2864 +63.211.64.160/255.255.255.248
 24.2865 +63.211.64.176/255.255.255.248
 24.2866 +63.211.141.0/255.255.255.128
 24.2867 +63.212.171.0/255.255.255.0
 24.2868 +63.224.27.144/255.255.255.248
 24.2869 +63.224.68.104/255.255.255.248
 24.2870 +63.224.133.0/255.255.255.0
 24.2871 +63.224.141.192/255.255.255.248
 24.2872 +63.225.17.0/255.255.255.0
 24.2873 +63.225.18.88/255.255.255.248
 24.2874 +63.225.62.48/255.255.255.248
 24.2875 +63.225.119.16/255.255.255.248
 24.2876 +63.225.131.152/255.255.255.248
 24.2877 +63.225.168.152/255.255.255.248
 24.2878 +63.226.58.144/255.255.255.248
 24.2879 +63.226.99.88/255.255.255.248
 24.2880 +63.226.204.72/255.255.255.248
 24.2881 +63.227.33.184/255.255.255.248
 24.2882 +63.227.81.120/255.255.255.248
 24.2883 +63.227.153.160/255.255.255.240
 24.2884 +63.227.208.248/255.255.255.248
 24.2885 +63.228.175.0/255.255.255.248
 24.2886 +63.229.31.120/255.255.255.248
 24.2887 +63.229.189.0/255.255.255.248
 24.2888 +63.230.40.48/255.255.255.248
 24.2889 +63.230.43.112/255.255.255.248
 24.2890 +63.230.123.96/255.255.255.248
 24.2891 +63.230.129.72/255.255.255.248
 24.2892 +63.230.147.88/255.255.255.248
 24.2893 +63.230.213.208/255.255.255.248
 24.2894 +63.231.30.136/255.255.255.248
 24.2895 +63.231.70.0/255.255.255.248
 24.2896 +63.231.116.112/255.255.255.248
 24.2897 +63.231.237.112/255.255.255.248
 24.2898 +63.231.237.120/255.255.255.248
 24.2899 +63.231.247.232/255.255.255.248
 24.2900 +63.236.0.40/255.255.255.248
 24.2901 +63.236.3.64/255.255.255.224
 24.2902 +63.236.4.32/255.255.255.240
 24.2903 +63.236.5.128/255.255.255.224
 24.2904 +63.236.7.88/255.255.255.248
 24.2905 +63.236.7.160/255.255.255.240
 24.2906 +63.236.7.216/255.255.255.248
 24.2907 +63.236.8.0/255.255.255.128
 24.2908 +63.236.12.192/255.255.255.224
 24.2909 +63.236.45.0/255.255.255.0
 24.2910 +63.236.94.0/255.255.255.192
 24.2911 +63.236.94.128/255.255.255.192
 24.2912 +63.236.98.112/255.255.255.248
 24.2913 +63.236.107.48/255.255.255.248
 24.2914 +63.236.111.32/255.255.255.224
 24.2915 +63.236.132.104/255.255.255.248
 24.2916 +63.236.132.160/255.255.255.248
 24.2917 +63.236.220.240/255.255.255.248
 24.2918 +63.236.226.192/255.255.255.224
 24.2919 +63.237.158.32/255.255.255.224
 24.2920 +63.237.201.0/255.255.255.0
 24.2921 +63.237.221.192/255.255.255.192
 24.2922 +63.237.247.32/255.255.255.224
 24.2923 +63.237.253.160/255.255.255.224
 24.2924 +63.239.104.0/255.255.250.0
 24.2925 +63.239.157.48/255.255.255.248
 24.2926 +63.239.181.192/255.255.255.224
 24.2927 +63.239.239.248/255.255.255.248
 24.2928 +63.240.30.0/255.255.255.128
 24.2929 +63.240.193.224/255.255.255.240
 24.2930 +63.240.197.56/255.255.255.248
 24.2931 +63.240.207.0/255.255.255.0
 24.2932 +63.240.210.248/255.255.255.248
 24.2933 +63.240.233.128/255.255.255.192
 24.2934 +63.240.249.0/255.255.255.128
 24.2935 +63.241.6.48/255.255.255.248
 24.2936 +63.241.8.128/255.255.255.192
 24.2937 +63.241.11.0/255.255.255.224
 24.2938 +63.241.11.128/255.255.255.128
 24.2939 +63.241.16.0/255.255.248.0
 24.2940 +63.241.27.64/255.255.255.192
 24.2941 +63.241.27.128/255.255.255.192
 24.2942 +63.241.28.0/255.255.255.0
 24.2943 +63.241.35.0/255.255.255.0
 24.2944 +63.241.36.0/255.255.255.0
 24.2945 +63.241.44.0/255.255.254.0
 24.2946 +63.241.48.0/255.255.248.0
 24.2947 +63.241.57.0/255.255.255.248
 24.2948 +63.241.58.0/255.255.255.0
 24.2949 +63.241.60.40/255.255.255.248
 24.2950 +63.241.209.104/255.255.255.240
 24.2951 +63.241.233.64/255.255.255.224
 24.2952 +63.243.101.16/255.255.255.240
 24.2953 +63.245.128.0/255.255.192.0
 24.2954 +63.249.2.111/255.255.255.239
 24.2955 +63.249.4.0/255.255.255.0
 24.2956 +63.249.5.0/255.255.255.128
 24.2957 +63.249.27.32/255.255.255.224
 24.2958 +63.251.6.112/255.255.255.248
 24.2959 +63.251.10.32/255.255.255.224
 24.2960 +63.251.10.160/255.255.255.240
 24.2961 +63.251.51.192/255.255.255.224
 24.2962 +63.251.56.160/255.255.255.224
 24.2963 +63.251.80.0/255.255.255.128
 24.2964 +63.251.80.128/255.255.255.224
 24.2965 +63.251.80.160/255.255.255.240
 24.2966 +63.251.80.184/255.255.255.248
 24.2967 +63.251.80.192/255.255.255.192
 24.2968 +63.251.81.0/255.255.255.0
 24.2969 +63.251.82.0/255.255.255.0
 24.2970 +63.251.83.192/255.255.255.192
 24.2971 +63.251.88.0/255.255.255.224
 24.2972 +63.251.99.0/255.255.255.0
 24.2973 +63.251.144.160/255.255.255.224
 24.2974 +63.251.222.0/255.255.255.0
 24.2975 +63.252.160.136/255.255.255.248
 24.2976 +63.253.67.224/255.255.255.240
 24.2977 +63.253.242.0/255.255.255.0
 24.2978 +63.255.4.152/255.255.255.248
 24.2979 +64.8.128.0/255.255.192.0
 24.2980 +64.12.46.0/255.255.255.0
 24.2981 +64.13.121.232/255.255.255.248
 24.2982 +64.14.37.128/255.255.255.224
 24.2983 +64.14.40.160/255.255.255.224
 24.2984 +64.14.50.224/255.255.255.224
 24.2985 +64.14.61.64/255.255.255.224
 24.2986 +64.14.63.64/255.255.255.224
 24.2987 +64.15.164.128/255.255.255.224
 24.2988 +64.15.165.0/255.255.255.0
 24.2989 +64.15.202.0/255.255.255.0
 24.2990 +64.15.226.96/255.255.255.160
 24.2991 +64.15.227.224/255.255.255.224
 24.2992 +64.15.228.16/255.255.255.80
 24.2993 +64.15.228.224/255.255.255.224
 24.2994 +64.15.229.32/255.255.255.224
 24.2995 +64.15.231.64/255.255.255.224
 24.2996 +64.15.234.128/255.255.255.224
 24.2997 +64.15.234.224/255.255.255.224
 24.2998 +64.15.237.128/255.255.255.224
 24.2999 +64.15.238.64/255.255.255.224
 24.3000 +64.15.239.96/255.255.255.224
 24.3001 +64.15.245.0/255.255.255.223
 24.3002 +64.15.248.0/255.255.255.0
 24.3003 +64.15.250.0/255.255.255.224
 24.3004 +64.17.20.0/255.255.255.224
 24.3005 +64.19.191.176/255.255.255.240
 24.3006 +64.22.38.184/255.255.255.248
 24.3007 +64.22.105.240/255.255.255.240
 24.3008 +64.22.113.112/255.255.255.240
 24.3009 +64.22.118.160/255.255.255.240
 24.3010 +64.23.0.0/255.255.255.0
 24.3011 +64.23.10.48/255.255.255.240
 24.3012 +64.23.244.96/255.255.255.224
 24.3013 +64.25.5.224/255.255.255.248
 24.3014 +64.27.0.0/255.255.224.0
 24.3015 +64.29.192.0/255.255.246.235
 24.3016 +64.29.201.22/255.255.233.22
 24.3017 +64.36.201.16/255.255.255.240
 24.3018 +64.37.64.96/255.255.255.224
 24.3019 +64.37.75.32/255.255.255.224
 24.3020 +64.37.79.0/255.255.255.0
 24.3021 +64.38.192.0/255.255.245.246
 24.3022 +64.38.202.11/255.255.255.117
 24.3023 +64.38.202.165/255.255.202.165
 24.3024 +64.39.18.64/255.255.255.248
 24.3025 +64.39.51.0/255.255.255.0
 24.3026 +64.40.32.0/255.255.250.0
 24.3027 +64.41.133.160/255.255.255.224
 24.3028 +64.42.1.8/255.255.255.248
 24.3029 +64.42.107.144/255.255.255.248
 24.3030 +64.42.117.184/255.255.255.248
 24.3031 +64.42.210.64/255.255.255.240
 24.3032 +64.46.78.224/255.255.255.248
 24.3033 +64.49.65.216/255.255.255.248
 24.3034 +64.49.68.24/255.255.255.248
 24.3035 +64.49.192.0/255.255.249.18
 24.3036 +64.49.198.239/255.255.242.23
 24.3037 +64.49.212.217/255.255.253.120
 24.3038 +64.49.215.98/255.255.251.199
 24.3039 +64.49.219.156/255.255.255.236
 24.3040 +64.49.219.181/255.255.254.63
 24.3041 +64.49.221.122/255.255.255.103
 24.3042 +64.49.222.20/255.255.225.174
 24.3043 +64.49.252.103/255.255.254.68
 24.3044 +64.49.254.36/255.255.255.246
 24.3045 +64.49.254.47/255.255.254.47
 24.3046 +64.50.49.96/255.255.255.248
 24.3047 +64.51.9.64/255.255.255.224
 24.3048 +64.51.47.224/255.255.255.224
 24.3049 +64.51.74.0/255.255.255.224
 24.3050 +64.51.76.96/255.255.255.224
 24.3051 +64.51.83.144/255.255.255.240
 24.3052 +64.51.240.176/255.255.255.240
 24.3053 +64.52.7.152/255.255.255.248
 24.3054 +64.52.58.240/255.255.255.248
 24.3055 +64.52.60.216/255.255.255.248
 24.3056 +64.52.71.0/255.255.255.248
 24.3057 +64.52.72.48/255.255.255.248
 24.3058 +64.52.74.120/255.255.255.248
 24.3059 +64.52.80.224/255.255.255.240
 24.3060 +64.52.112.160/255.255.255.248
 24.3061 +64.52.112.176/255.255.255.248
 24.3062 +64.52.113.208/255.255.255.248
 24.3063 +64.52.117.224/255.255.255.248
 24.3064 +64.52.132.200/255.255.255.248
 24.3065 +64.52.227.176/255.255.255.248
 24.3066 +64.55.76.192/255.255.255.224
 24.3067 +64.55.86.160/255.255.255.224
 24.3068 +64.55.97.128/255.255.255.240
 24.3069 +64.55.165.129/255.255.255.194
 24.3070 +64.57.160.0/255.255.224.0
 24.3071 +64.58.66.192/255.255.255.224
 24.3072 +64.58.176.0/255.255.255.0
 24.3073 +64.59.17.96/255.255.255.248
 24.3074 +64.59.56.144/255.255.255.248
 24.3075 +64.60.7.128/255.255.255.224
 24.3076 +64.60.22.96/255.255.255.248
 24.3077 +64.60.67.216/255.255.255.248
 24.3078 +64.60.108.0/255.255.255.192
 24.3079 +64.60.114.128/255.255.255.128
 24.3080 +64.60.122.144/255.255.255.240
 24.3081 +64.60.130.120/255.255.255.248
 24.3082 +64.60.132.192/255.255.255.192
 24.3083 +64.60.141.176/255.255.255.240
 24.3084 +64.60.150.128/255.255.255.240
 24.3085 +64.60.194.0/255.255.255.248
 24.3086 +64.60.198.184/255.255.255.248
 24.3087 +64.60.202.152/255.255.255.248
 24.3088 +64.62.0.0/255.255.128.0
 24.3089 +64.62.142.224/255.255.255.224
 24.3090 +64.62.143.64/255.255.255.224
 24.3091 +64.62.168.0/255.255.255.128
 24.3092 +64.62.227.56/255.255.255.248
 24.3093 +64.62.227.128/255.255.255.128
 24.3094 +64.65.134.48/255.255.255.248
 24.3095 +64.65.142.160/255.255.255.224
 24.3096 +64.69.48.0/255.255.240.0
 24.3097 +64.69.125.88/255.255.255.248
 24.3098 +64.71.141.0/255.255.255.0
 24.3099 +64.71.144.0/255.255.255.128
 24.3100 +64.71.166.0/255.255.255.0
 24.3101 +64.72.67.128/255.255.255.224
 24.3102 +64.73.226.80/255.255.255.240
 24.3103 +64.74.82.224/255.255.255.224
 24.3104 +64.74.136.0/255.255.252.0
 24.3105 +64.74.214.0/255.255.255.0
 24.3106 +64.74.216.0/255.255.252.0
 24.3107 +64.75.4.192/255.255.255.224
 24.3108 +64.76.126.72/255.255.255.248
 24.3109 +64.76.126.240/255.255.255.248
 24.3110 +64.76.142.96/255.255.255.240
 24.3111 +64.76.146.48/255.255.255.240
 24.3112 +64.76.146.112/255.255.255.240
 24.3113 +64.76.179.80/255.255.255.248
 24.3114 +64.76.179.88/255.255.255.248
 24.3115 +64.77.29.16/255.255.255.248
 24.3116 +64.77.37.160/255.255.255.247
 24.3117 +64.77.41.176/255.255.255.248
 24.3118 +64.77.45.0/255.255.255.224
 24.3119 +64.77.68.80/255.255.255.248
 24.3120 +64.77.101.0/255.255.255.248
 24.3121 +64.77.101.8/255.255.255.248
 24.3122 +64.77.101.80/255.255.255.248
 24.3123 +64.78.0.0/255.255.192.0
 24.3124 +64.79.161.128/255.255.255.128
 24.3125 +64.80.137.32/255.255.255.240
 24.3126 +64.80.153.176/255.255.255.240
 24.3127 +64.81.91.240/255.255.255.248
 24.3128 +64.81.92.40/255.255.255.248
 24.3129 +64.81.92.224/255.255.255.232
 24.3130 +64.81.93.128/255.255.255.160
 24.3131 +64.81.94.48/255.255.255.208
 24.3132 +64.81.94.112/255.255.255.240
 24.3133 +64.81.94.136/255.255.255.152
 24.3134 +64.81.95.128/255.255.255.176
 24.3135 +64.81.156.64/255.255.255.248
 24.3136 +64.81.184.160/255.255.255.224
 24.3137 +64.81.216.80/255.255.255.248
 24.3138 +64.83.0.0/255.255.176.0
 24.3139 +64.84.29.104/255.255.255.248
 24.3140 +64.85.66.0/255.255.255.0
 24.3141 +64.85.69.0/255.255.255.0
 24.3142 +64.85.76.0/255.255.255.0
 24.3143 +64.86.63.0/255.255.255.0
 24.3144 +64.87.128.0/255.255.128.0
 24.3145 +64.92.150.0/255.255.255.0
 24.3146 +64.93.3.144/255.255.255.240
 24.3147 +64.93.9.200/255.255.255.248
 24.3148 +64.93.21.232/255.255.255.248
 24.3149 +64.94.5.160/255.255.255.224
 24.3150 +64.94.35.160/255.255.255.224
 24.3151 +64.94.69.80/255.255.255.240
 24.3152 +64.94.106.16/255.255.255.240
 24.3153 +64.94.206.32/255.255.255.224
 24.3154 +64.95.24.0/255.255.255.0
 24.3155 +64.95.65.0/255.255.255.128
 24.3156 +64.95.73.64/255.255.255.224
 24.3157 +64.95.112.160/255.255.255.224
 24.3158 +64.95.120.0/255.255.254.0
 24.3159 +64.106.170.128/255.255.255.191
 24.3160 +64.108.174.32/255.255.255.248
 24.3161 +64.108.232.64/255.255.255.224
 24.3162 +64.114.67.0/255.255.255.0
 24.3163 +64.115.129.144/255.255.255.248
 24.3164 +64.116.232.96/255.255.255.224
 24.3165 +64.116.233.216/255.255.255.248
 24.3166 +64.116.234.96/255.255.255.224
 24.3167 +64.117.37.128/255.255.255.192
 24.3168 +64.118.130.120/255.255.255.248
 24.3169 +64.119.224.0/255.255.240.0
 24.3170 +64.123.0.16/255.255.255.248
 24.3171 +64.123.0.40/255.255.255.248
 24.3172 +64.123.4.248/255.255.255.248
 24.3173 +64.123.37.88/255.255.255.248
 24.3174 +64.123.153.64/255.255.255.248
 24.3175 +64.123.168.208/255.255.255.248
 24.3176 +64.123.168.216/255.255.255.248
 24.3177 +64.123.169.200/255.255.255.248
 24.3178 +64.123.176.152/255.255.255.248
 24.3179 +64.123.229.136/255.255.255.248
 24.3180 +64.123.235.0/255.255.255.128
 24.3181 +64.124.5.0/255.255.255.224
 24.3182 +64.124.14.0/255.255.255.128
 24.3183 +64.124.17.40/255.255.255.248
 24.3184 +64.124.97.200/255.255.255.240
 24.3185 +64.124.108.128/255.255.255.128
 24.3186 +64.124.112.40/255.255.255.248
 24.3187 +64.124.125.0/255.255.255.224
 24.3188 +64.124.125.224/255.255.255.240
 24.3189 +64.124.136.96/255.255.255.240
 24.3190 +64.124.184.80/255.255.255.248
 24.3191 +64.124.229.160/255.255.255.248
 24.3192 +64.132.15.224/255.255.255.240
 24.3193 +64.132.120.0/255.255.255.0
 24.3194 +64.133.83.152/255.255.255.248
 24.3195 +64.138.64.32/255.255.255.248
 24.3196 +64.138.84.0/255.255.255.224
 24.3197 +64.139.133.128/255.255.255.128
 24.3198 +64.141.0.52/255.255.255.235
 24.3199 +64.143.0.0/255.255.32.0
 24.3200 +64.144.198.224/255.255.255.224
 24.3201 +64.144.245.32/255.255.255.240
 24.3202 +64.145.18.192/255.255.255.224
 24.3203 +64.145.21.24/255.255.255.248
 24.3204 +64.145.120.144/255.255.255.248
 24.3205 +64.145.168.112/255.255.255.248
 24.3206 +64.145.249.0/255.255.255.224
 24.3207 +64.146.49.32/255.255.255.224
 24.3208 +64.149.77.32/255.255.255.240
 24.3209 +64.151.64.0/255.255.192.0
 24.3210 +64.152.178.208/255.255.255.240
 24.3211 +64.153.0.0/255.255.0.0
 24.3212 +64.156.84.16/255.255.255.240
 24.3213 +64.159.4.81/255.255.255.249
 24.3214 +64.159.4.105/255.255.255.248
 24.3215 +64.160.1.160/255.255.255.224
 24.3216 +64.160.9.128/255.255.255.248
 24.3217 +64.160.129.200/255.255.255.248
 24.3218 +64.160.161.0/255.255.255.0
 24.3219 +64.160.188.200/255.255.255.248
 24.3220 +64.160.222.152/255.255.255.248
 24.3221 +64.160.237.152/255.255.255.248
 24.3222 +64.161.59.232/255.255.255.248
 24.3223 +64.161.60.224/255.255.255.248
 24.3224 +64.161.118.48/255.255.255.248
 24.3225 +64.161.118.104/255.255.255.248
 24.3226 +64.161.130.128/255.255.255.248
 24.3227 +64.161.140.88/255.255.255.248
 24.3228 +64.161.188.72/255.255.255.248
 24.3229 +64.161.194.160/255.255.255.248
 24.3230 +64.161.210.128/255.255.255.248
 24.3231 +64.161.211.0/255.255.255.224
 24.3232 +64.162.80.88/255.255.255.248
 24.3233 +64.162.166.96/255.255.255.216
 24.3234 +64.162.168.184/255.255.255.248
 24.3235 +64.162.174.48/255.255.255.248
 24.3236 +64.162.194.128/255.255.255.248
 24.3237 +64.162.195.136/255.255.255.248
 24.3238 +64.162.201.136/255.255.255.248
 24.3239 +64.162.231.16/255.255.255.240
 24.3240 +64.163.6.208/255.255.255.248
 24.3241 +64.163.67.240/255.255.255.248
 24.3242 +64.163.74.48/255.255.255.248
 24.3243 +64.163.79.96/255.255.255.224
 24.3244 +64.163.88.112/255.255.255.248
 24.3245 +64.163.106.64/255.255.255.248
 24.3246 +64.163.154.176/255.255.255.248
 24.3247 +64.163.191.160/255.255.255.248
 24.3248 +64.163.204.224/255.255.255.248
 24.3249 +64.163.205.8/255.255.255.248
 24.3250 +64.163.227.128/255.255.255.248
 24.3251 +64.163.247.192/255.255.255.240
 24.3252 +64.164.22.200/255.255.255.248
 24.3253 +64.164.23.56/255.255.255.248
 24.3254 +64.164.68.192/255.255.255.224
 24.3255 +64.164.89.88/255.255.255.248
 24.3256 +64.164.89.232/255.255.255.248
 24.3257 +64.164.95.128/255.255.255.128
 24.3258 +64.164.129.8/255.255.255.248
 24.3259 +64.164.137.176/255.255.255.248
 24.3260 +64.164.144.208/255.255.255.240
 24.3261 +64.164.156.200/255.255.255.248
 24.3262 +64.164.201.248/255.255.255.248
 24.3263 +64.164.207.64/255.255.255.248
 24.3264 +64.164.216.120/255.255.255.248
 24.3265 +64.164.255.192/255.255.255.240
 24.3266 +64.165.5.216/255.255.255.248
 24.3267 +64.165.27.176/255.255.255.248
 24.3268 +64.165.111.200/255.255.255.248
 24.3269 +64.165.121.216/255.255.255.248
 24.3270 +64.165.145.56/255.255.255.248
 24.3271 +64.165.185.112/255.255.255.248
 24.3272 +64.165.186.144/255.255.255.248
 24.3273 +64.165.198.32/255.255.255.248
 24.3274 +64.166.0.216/255.255.255.248
 24.3275 +64.166.7.128/255.255.255.240
 24.3276 +64.166.11.32/255.255.255.248
 24.3277 +64.166.34.192/255.255.255.192
 24.3278 +64.166.45.32/255.255.255.248
 24.3279 +64.166.49.104/255.255.255.248
 24.3280 +64.166.64.200/255.255.255.248
 24.3281 +64.166.65.144/255.255.255.248
 24.3282 +64.166.68.8/255.255.255.248
 24.3283 +64.166.76.128/255.255.255.128
 24.3284 +64.166.135.96/255.255.255.248
 24.3285 +64.166.187.128/255.255.255.225
 24.3286 +64.166.202.96/255.255.255.248
 24.3287 +64.166.228.128/255.255.255.248
 24.3288 +64.166.234.24/255.255.255.248
 24.3289 +64.166.244.56/255.255.255.248
 24.3290 +64.167.33.16/255.255.255.248
 24.3291 +64.167.72.0/255.255.255.224
 24.3292 +64.167.74.192/255.255.255.224
 24.3293 +64.167.104.128/255.255.255.248
 24.3294 +64.167.108.32/255.255.255.240
 24.3295 +64.167.120.8/255.255.255.248
 24.3296 +64.167.124.32/255.255.255.248
 24.3297 +64.167.126.56/255.255.255.248
 24.3298 +64.167.131.56/255.255.255.248
 24.3299 +64.167.225.0/255.255.255.112
 24.3300 +64.167.232.32/255.255.255.224
 24.3301 +64.167.254.136/255.255.255.248
 24.3302 +64.168.4.0/255.255.255.0
 24.3303 +64.168.42.248/255.255.255.248
 24.3304 +64.168.70.160/255.255.255.248
 24.3305 +64.168.78.112/255.255.255.248
 24.3306 +64.168.83.216/255.255.255.248
 24.3307 +64.168.87.160/255.255.255.248
 24.3308 +64.168.128.32/255.255.255.224
 24.3309 +64.168.133.16/255.255.255.248
 24.3310 +64.168.138.64/255.255.255.248
 24.3311 +64.168.146.168/255.255.255.248
 24.3312 +64.168.159.80/255.255.255.248
 24.3313 +64.168.208.160/255.255.255.248
 24.3314 +64.168.213.112/255.255.255.248
 24.3315 +64.168.214.16/255.255.255.248
 24.3316 +64.168.225.216/255.255.255.248
 24.3317 +64.168.227.144/255.255.255.248
 24.3318 +64.168.236.96/255.255.255.248
 24.3319 +64.169.18.192/255.255.255.248
 24.3320 +64.169.35.8/255.255.255.240
 24.3321 +64.169.37.248/255.255.255.248
 24.3322 +64.169.58.0/255.255.255.248
 24.3323 +64.169.64.40/255.255.255.248
 24.3324 +64.169.121.200/255.255.255.248
 24.3325 +64.169.124.168/255.255.255.248
 24.3326 +64.169.147.192/255.255.255.224
 24.3327 +64.169.167.176/255.255.255.248
 24.3328 +64.169.173.48/255.255.255.248
 24.3329 +64.169.173.80/255.255.255.248
 24.3330 +64.169.196.0/255.255.255.0
 24.3331 +64.169.201.200/255.255.255.248
 24.3332 +64.169.236.160/255.255.255.248
 24.3333 +64.169.237.224/255.255.255.248
 24.3334 +64.170.32.0/255.255.255.0
 24.3335 +64.170.41.136/255.255.255.248
 24.3336 +64.170.42.224/255.255.255.248
 24.3337 +64.170.65.8/255.255.255.248
 24.3338 +64.170.66.72/255.255.255.248
 24.3339 +64.170.95.240/255.255.255.248
 24.3340 +64.170.107.200/255.255.255.248
 24.3341 +64.170.132.8/255.255.255.248
 24.3342 +64.170.163.224/255.255.255.224
 24.3343 +64.170.227.216/255.255.255.248
 24.3344 +64.170.250.48/255.255.255.248
 24.3345 +64.170.253.232/255.255.255.248
 24.3346 +64.171.22.56/255.255.255.248
 24.3347 +64.171.50.168/255.255.255.248
 24.3348 +64.171.51.208/255.255.255.248
 24.3349 +64.171.114.152/255.255.255.248
 24.3350 +64.171.125.128/255.255.255.248
 24.3351 +64.171.150.184/255.255.255.248
 24.3352 +64.171.160.224/255.255.255.224
 24.3353 +64.171.161.128/255.255.255.192
 24.3354 +64.172.64.216/255.255.255.248
 24.3355 +64.172.64.240/255.255.255.248
 24.3356 +64.172.75.0/255.255.255.248
 24.3357 +64.172.75.88/255.255.255.248
 24.3358 +64.172.93.192/255.255.255.224
 24.3359 +64.172.160.40/255.255.255.248
 24.3360 +64.172.161.240/255.255.255.248
 24.3361 +64.172.164.40/255.255.255.248
 24.3362 +64.172.194.208/255.255.255.248
 24.3363 +64.172.206.48/255.255.255.248
 24.3364 +64.172.220.40/255.255.255.248
 24.3365 +64.172.220.48/255.255.255.248
 24.3366 +64.172.236.144/255.255.255.248
 24.3367 +64.172.248.160/255.255.255.248
 24.3368 +64.172.255.0/255.255.255.248
 24.3369 +64.173.58.8/255.255.255.248
 24.3370 +64.173.72.208/255.255.255.248
 24.3371 +64.173.101.24/255.255.255.248
 24.3372 +64.173.117.200/255.255.255.248
 24.3373 +64.173.143.24/255.255.255.248
 24.3374 +64.173.151.0/255.255.255.128
 24.3375 +64.173.173.64/255.255.255.248
 24.3376 +64.173.193.88/255.255.255.248
 24.3377 +64.173.229.184/255.255.255.248
 24.3378 +64.173.252.32/255.255.255.224
 24.3379 +64.173.253.0/255.255.255.0
 24.3380 +64.174.50.240/255.255.255.248
 24.3381 +64.174.58.0/255.255.255.248
 24.3382 +64.174.153.224/255.255.255.248
 24.3383 +64.174.180.0/255.255.255.192
 24.3384 +64.174.198.32/255.255.255.248
 24.3385 +64.174.199.40/255.255.255.248
 24.3386 +64.174.215.240/255.255.255.248
 24.3387 +64.174.223.72/255.255.255.248
 24.3388 +64.174.240.200/255.255.255.248
 24.3389 +64.175.21.176/255.255.255.248
 24.3390 +64.175.29.208/255.255.255.248
 24.3391 +64.175.31.216/255.255.255.248
 24.3392 +64.175.49.56/255.255.255.248
 24.3393 +64.175.126.72/255.255.255.248
 24.3394 +64.175.180.40/255.255.255.248
 24.3395 +64.175.196.80/255.255.255.240
 24.3396 +64.175.196.128/255.255.255.224
 24.3397 +64.175.201.24/255.255.255.248
 24.3398 +64.179.18.24/255.255.255.248
 24.3399 +64.186.39.0/255.255.255.0
 24.3400 +64.186.51.168/255.255.255.248
 24.3401 +64.186.243.80/255.255.255.248
 24.3402 +64.198.3.72/255.255.255.248
 24.3403 +64.198.35.88/255.255.255.248
 24.3404 +64.201.96.0/255.255.240.0
 24.3405 +64.201.173.240/255.255.255.240
 24.3406 +64.202.64.0/255.255.240.0
 24.3407 +64.204.33.160/255.255.255.240
 24.3408 +64.204.98.144/255.255.255.240
 24.3409 +64.204.102.0/255.255.255.224
 24.3410 +64.205.58.40/255.255.255.248
 24.3411 +64.205.73.16/255.255.255.240
 24.3412 +64.205.81.80/255.255.255.240
 24.3413 +64.205.121.224/255.255.255.224
 24.3414 +64.205.123.160/255.255.255.224
 24.3415 +64.205.164.192/255.255.255.224
 24.3416 +64.205.169.96/255.255.255.240
 24.3417 +64.205.196.160/255.255.255.240
 24.3418 +64.205.202.152/255.255.255.248
 24.3419 +64.205.208.144/255.255.255.240
 24.3420 +64.207.43.120/255.255.255.248
 24.3421 +64.207.44.16/255.255.255.248
 24.3422 +64.207.128.0/255.255.192.0
 24.3423 +64.208.86.128/255.255.255.224
 24.3424 +64.208.234.0/255.255.255.0
 24.3425 +64.209.193.0/255.255.255.0
 24.3426 +64.209.224.0/255.255.240.0
 24.3427 +64.211.77.224/255.255.255.224
 24.3428 +64.211.240.0/255.255.255.128
 24.3429 +64.216.44.232/255.255.255.248
 24.3430 +64.216.51.144/255.255.255.248
 24.3431 +64.216.160.192/255.255.255.224
 24.3432 +64.217.6.176/255.255.255.248
 24.3433 +64.217.109.96/255.255.255.248
 24.3434 +64.217.128.136/255.255.255.248
 24.3435 +64.217.131.64/255.255.255.248
 24.3436 +64.217.194.216/255.255.255.248
 24.3437 +64.217.215.128/255.255.255.248
 24.3438 +64.218.222.64/255.255.255.248
 24.3439 +64.219.0.0/255.255.254.128
 24.3440 +64.219.133.128/255.255.255.128
 24.3441 +64.219.143.168/255.255.255.248
 24.3442 +64.219.153.120/255.255.255.248
 24.3443 +64.219.190.224/255.255.255.224
 24.3444 +64.219.191.200/255.255.255.248
 24.3445 +64.219.207.160/255.255.255.248
 24.3446 +64.219.218.144/255.255.255.248
 24.3447 +64.225.136.192/255.255.255.240
 24.3448 +64.225.192.0/255.255.255.128
 24.3449 +64.225.202.0/255.255.255.0
 24.3450 +64.232.7.248/255.255.255.248
 24.3451 +64.232.74.0/255.255.255.224
 24.3452 +64.232.88.0/255.255.255.0
 24.3453 +64.232.136.176/255.255.255.240
 24.3454 +64.232.248.240/255.255.255.240
 24.3455 +64.233.46.64/255.255.255.248
 24.3456 +64.235.225.0/255.255.255.248
 24.3457 +64.235.225.112/255.255.255.240
 24.3458 +64.238.197.136/255.255.255.240
 24.3459 +64.238.203.0/255.255.254.0
 24.3460 +64.238.245.168/255.255.255.232
 24.3461 +64.240.46.16/255.255.255.248
 24.3462 +64.240.67.224/255.255.255.248
 24.3463 +64.240.228.0/255.255.255.0
 24.3464 +64.240.238.64/255.255.255.224
 24.3465 +64.241.25.0/255.255.255.0
 24.3466 +64.241.31.0/255.255.255.0
 24.3467 +64.241.49.208/255.255.255.240
 24.3468 +64.241.67.144/255.255.255.240
 24.3469 +64.241.229.0/255.255.255.192
 24.3470 +64.242.6.128/255.255.255.224
 24.3471 +64.242.33.192/255.255.255.224
 24.3472 +64.242.148.192/255.255.255.240
 24.3473 +64.242.153.0/255.255.253.0
 24.3474 +64.242.180.192/255.255.255.224
 24.3475 +64.242.196.0/255.255.254.0
 24.3476 +64.243.7.0/255.255.255.0
 24.3477 +64.243.18.0/255.255.255.0
 24.3478 +64.243.29.48/255.255.255.240
 24.3479 +64.243.29.144/255.255.255.240
 24.3480 +64.243.65.48/255.255.255.240
 24.3481 +64.243.89.80/255.255.255.240
 24.3482 +64.244.122.16/255.255.255.240
 24.3483 +64.246.135.0/255.255.255.240
 24.3484 +64.246.135.32/255.255.255.240
 24.3485 +64.248.9.16/255.255.255.248
 24.3486 +64.248.12.128/255.255.255.128
 24.3487 +64.248.18.16/255.255.255.240
 24.3488 +64.248.24.32/255.255.255.240
 24.3489 +64.248.30.144/255.255.255.240
 24.3490 +64.248.48.96/255.255.255.248
 24.3491 +64.248.58.64/255.255.255.248
 24.3492 +64.248.129.104/255.255.255.248
 24.3493 +64.248.219.32/255.255.255.224
 24.3494 +64.248.227.0/255.255.255.0
 24.3495 +64.249.5.48/255.255.255.240
 24.3496 +64.249.8.0/255.255.255.192
 24.3497 +64.249.48.208/255.255.255.248
 24.3498 +64.249.76.176/255.255.255.240
 24.3499 +64.249.120.128/255.255.255.248
 24.3500 +64.249.123.160/255.255.255.224
 24.3501 +64.249.123.192/255.255.255.224
 24.3502 +64.249.128.160/255.255.255.224
 24.3503 +64.249.152.128/255.255.255.240
 24.3504 +64.249.185.72/255.255.255.248
 24.3505 +64.249.218.56/255.255.255.248
 24.3506 +64.249.230.96/255.255.255.224
 24.3507 +64.251.1.0/255.255.255.224
 24.3508 +64.251.48.0/255.255.240.0
 24.3509 +64.252.30.144/255.255.255.248
 24.3510 +64.252.153.48/255.255.255.248
 24.3511 +64.252.252.224/255.255.255.248
 24.3512 +64.253.35.0/255.255.255.0
 24.3513 +64.253.63.0/255.255.255.128
 24.3514 +64.253.198.0/255.255.255.0
 24.3515 +64.254.141.64/255.255.255.240
 24.3516 +64.255.173.32/255.255.255.224
 24.3517 +64.255.196.0/255.255.252.0
 24.3518 +65.16.26.224/255.255.255.224
 24.3519 +65.16.79.0/255.255.255.224
 24.3520 +65.16.99.128/255.255.255.240
 24.3521 +65.19.29.0/255.255.255.0
 24.3522 +65.36.35.224/255.255.255.240
 24.3523 +65.36.47.136/255.255.255.248
 24.3524 +65.36.73.0/255.255.255.224
 24.3525 +65.36.74.24/255.255.255.248
 24.3526 +65.36.74.200/255.255.255.248
 24.3527 +65.36.111.200/255.255.255.248
 24.3528 +65.37.72.0/255.255.252.0
 24.3529 +65.42.32.248/255.255.255.248
 24.3530 +65.42.53.80/255.255.255.248
 24.3531 +65.42.129.200/255.255.255.248
 24.3532 +65.42.140.248/255.255.255.248
 24.3533 +65.42.141.0/255.255.255.248
 24.3534 +65.42.141.8/255.255.255.248
 24.3535 +65.42.147.208/255.255.255.248
 24.3536 +65.42.154.32/255.255.255.248
 24.3537 +65.42.160.232/255.255.255.248
 24.3538 +65.42.168.144/255.255.255.248
 24.3539 +65.42.181.168/255.255.255.248
 24.3540 +65.43.28.72/255.255.255.248
 24.3541 +65.43.57.224/255.255.255.248
 24.3542 +65.43.59.224/255.255.255.248
 24.3543 +65.43.89.16/255.255.255.248
 24.3544 +65.43.110.8/255.255.255.248
 24.3545 +65.57.83.0/255.255.255.0
 24.3546 +65.61.128.80/255.255.255.248
 24.3547 +65.61.131.232/255.255.255.248
 24.3548 +65.61.131.240/255.255.255.248
 24.3549 +65.64.16.0/255.255.252.0
 24.3550 +65.64.59.0/255.255.255.248
 24.3551 +65.64.90.200/255.255.255.248
 24.3552 +65.64.90.248/255.255.255.248
 24.3553 +65.65.101.88/255.255.255.248
 24.3554 +65.65.103.128/255.255.255.248
 24.3555 +65.65.162.96/255.255.255.224
 24.3556 +65.66.2.176/255.255.255.248
 24.3557 +65.66.3.176/255.255.255.248
 24.3558 +65.66.65.128/255.255.255.248
 24.3559 +65.67.31.176/255.255.255.248
 24.3560 +65.67.32.168/255.255.255.248
 24.3561 +65.67.38.40/255.255.255.248
 24.3562 +65.67.56.168/255.255.255.248
 24.3563 +65.67.75.144/255.255.255.248
 24.3564 +65.67.85.136/255.255.255.248
 24.3565 +65.67.98.208/255.255.255.248
 24.3566 +65.67.137.240/255.255.255.248
 24.3567 +65.67.139.80/255.255.255.248
 24.3568 +65.67.139.120/255.255.255.248
 24.3569 +65.67.186.0/255.255.255.240
 24.3570 +65.67.248.168/255.255.255.248
 24.3571 +65.67.255.232/255.255.255.248
 24.3572 +65.68.40.248/255.255.255.248
 24.3573 +65.68.59.112/255.255.255.248
 24.3574 +65.68.64.16/255.255.255.248
 24.3575 +65.68.107.120/255.255.255.248
 24.3576 +65.68.107.128/255.255.255.248
 24.3577 +65.68.125.160/255.255.255.248
 24.3578 +65.68.133.32/255.255.255.248
 24.3579 +65.68.211.240/255.255.255.248
 24.3580 +65.68.230.88/255.255.255.248
 24.3581 +65.68.237.144/255.255.255.248
 24.3582 +65.69.30.16/255.255.255.248
 24.3583 +65.69.30.40/255.255.255.248
 24.3584 +65.69.74.192/255.255.255.248
 24.3585 +65.69.106.120/255.255.255.248
 24.3586 +65.69.106.208/255.255.255.248
 24.3587 +65.69.145.184/255.255.255.248
 24.3588 +65.69.182.184/255.255.255.248
 24.3589 +65.69.237.104/255.255.255.248
 24.3590 +65.69.239.208/255.255.255.248
 24.3591 +65.69.249.152/255.255.255.248
 24.3592 +65.69.249.160/255.255.255.248
 24.3593 +65.69.251.0/255.255.255.248
 24.3594 +65.69.252.184/255.255.255.248
 24.3595 +65.70.0.232/255.255.255.248
 24.3596 +65.70.5.56/255.255.255.248
 24.3597 +65.70.48.208/255.255.255.248
 24.3598 +65.70.90.40/255.255.255.248
 24.3599 +65.70.124.200/255.255.255.248
 24.3600 +65.70.200.40/255.255.255.248
 24.3601 +65.70.212.136/255.255.255.248
 24.3602 +65.70.225.120/255.255.255.248
 24.3603 +65.71.12.240/255.255.255.248
 24.3604 +65.71.82.160/255.255.255.248
 24.3605 +65.71.115.32/255.255.255.248
 24.3606 +65.71.119.248/255.255.255.248
 24.3607 +65.71.146.240/255.255.255.248
 24.3608 +65.71.164.0/255.255.255.192
 24.3609 +65.71.181.0/255.255.255.224
 24.3610 +65.71.187.96/255.255.255.248
 24.3611 +65.73.180.176/255.255.255.240
 24.3612 +65.73.207.96/255.255.255.248
 24.3613 +65.73.232.216/255.255.255.248
 24.3614 +65.73.246.0/255.255.255.0
 24.3615 +65.77.255.0/255.255.255.0
 24.3616 +65.78.229.32/255.255.255.248
 24.3617 +65.84.27.88/255.255.255.248
 24.3618 +65.84.90.128/255.255.255.240
 24.3619 +65.84.173.240/255.255.255.248
 24.3620 +65.84.187.16/255.255.255.248
 24.3621 +65.84.193.192/255.255.255.240
 24.3622 +65.85.76.144/255.255.255.240
 24.3623 +65.85.80.64/255.255.255.240
 24.3624 +65.85.98.32/255.255.255.240
 24.3625 +65.85.120.128/255.255.255.224
 24.3626 +65.85.134.112/255.255.255.240
 24.3627 +65.85.208.128/255.255.255.240
 24.3628 +65.85.223.232/255.255.255.248
 24.3629 +65.86.51.160/255.255.255.240
 24.3630 +65.86.79.240/255.255.255.248
 24.3631 +65.86.115.16/255.255.255.240
 24.3632 +65.86.160.128/255.255.255.224
 24.3633 +65.87.18.24/255.255.255.248
 24.3634 +65.88.178.0/255.255.255.0
 24.3635 +65.89.9.160/255.255.255.240
 24.3636 +65.93.231.176/255.255.255.248
 24.3637 +65.93.239.152/255.255.255.248
 24.3638 +65.100.38.24/255.255.255.248
 24.3639 +65.100.136.96/255.255.255.248
 24.3640 +65.100.243.144/255.255.255.248
 24.3641 +65.101.4.208/255.255.255.248
 24.3642 +65.101.46.200/255.255.255.248
 24.3643 +65.101.147.16/255.255.255.248
 24.3644 +65.101.193.0/255.255.255.0
 24.3645 +65.101.208.224/255.255.255.248
 24.3646 +65.101.227.112/255.255.255.248
 24.3647 +65.101.245.104/255.255.255.248
 24.3648 +65.102.22.208/255.255.255.248
 24.3649 +65.102.167.200/255.255.255.248
 24.3650 +65.102.173.96/255.255.255.248
 24.3651 +65.102.210.176/255.255.255.248
 24.3652 +65.103.31.56/255.255.255.248
 24.3653 +65.103.128.136/255.255.255.248
 24.3654 +65.110.11.144/255.255.255.248
 24.3655 +65.110.224.0/255.255.224.0
 24.3656 +65.112.76.0/255.255.255.0
 24.3657 +65.112.91.248/255.255.255.248
 24.3658 +65.113.18.0/255.255.255.224
 24.3659 +65.113.47.176/255.255.255.248
 24.3660 +65.113.91.88/255.255.255.248
 24.3661 +65.113.91.112/255.255.255.240
 24.3662 +65.113.104.16/255.255.255.240
 24.3663 +65.114.6.48/255.255.255.248
 24.3664 +65.114.63.192/255.255.255.224
 24.3665 +65.114.156.0/255.255.255.0
 24.3666 +65.115.7.32/255.255.255.224
 24.3667 +65.115.117.0/255.255.255.0
 24.3668 +65.115.121.128/255.255.255.224
 24.3669 +65.115.195.0/255.255.255.224
 24.3670 +65.116.17.192/255.255.255.224
 24.3671 +65.116.70.0/255.255.255.224
 24.3672 +65.116.80.0/255.255.252.0
 24.3673 +65.116.151.192/255.255.255.240
 24.3674 +65.116.177.192/255.255.255.248
 24.3675 +65.117.1.24/255.255.255.248
 24.3676 +65.117.1.96/255.255.255.240
 24.3677 +65.117.1.152/255.255.255.248
 24.3678 +65.117.1.192/255.255.255.248
 24.3679 +65.117.2.8/255.255.255.240
 24.3680 +65.117.2.32/255.255.255.248
 24.3681 +65.117.2.72/255.255.255.248
 24.3682 +65.117.2.112/255.255.255.248
 24.3683 +65.117.2.144/255.255.255.248
 24.3684 +65.117.3.32/255.255.255.248
 24.3685 +65.117.3.48/255.255.255.240
 24.3686 +65.117.3.128/255.255.255.248
 24.3687 +65.117.3.144/255.255.255.240
 24.3688 +65.117.3.176/255.255.255.248
 24.3689 +65.117.3.200/255.255.255.248
 24.3690 +65.117.3.232/255.255.255.248
 24.3691 +65.117.3.248/255.255.255.248
 24.3692 +65.117.9.96/255.255.255.248
 24.3693 +65.117.9.160/255.255.255.248
 24.3694 +65.117.10.96/255.255.255.248
 24.3695 +65.117.10.232/255.255.255.248
 24.3696 +65.117.11.40/255.255.255.248
 24.3697 +65.117.11.160/255.255.255.248
 24.3698 +65.117.11.216/255.255.255.248
 24.3699 +65.117.12.0/255.255.255.248
 24.3700 +65.117.12.40/255.255.255.208
 24.3701 +65.117.12.112/255.255.255.248
 24.3702 +65.117.12.136/255.255.255.248
 24.3703 +65.117.12.200/255.255.255.248
 24.3704 +65.117.13.48/255.255.255.248
 24.3705 +65.117.13.88/255.255.255.248
 24.3706 +65.117.14.96/255.255.255.248
 24.3707 +65.117.15.0/255.255.255.248
 24.3708 +65.117.15.64/255.255.255.248
 24.3709 +65.117.15.96/255.255.255.248
 24.3710 +65.117.15.136/255.255.255.248
 24.3711 +65.117.17.24/255.255.255.248
 24.3712 +65.117.19.8/255.255.255.224
 24.3713 +65.117.19.56/255.255.255.248
 24.3714 +65.117.19.96/255.255.255.248
 24.3715 +65.117.19.208/255.255.255.248
 24.3716 +65.117.20.0/255.255.255.248
 24.3717 +65.117.20.16/255.255.255.248
 24.3718 +65.117.59.200/255.255.255.248
 24.3719 +65.118.41.192/255.255.255.224
 24.3720 +65.118.42.0/255.255.255.0
 24.3721 +65.118.144.0/255.255.254.0
 24.3722 +65.118.219.96/255.255.255.240
 24.3723 +65.118.220.0/255.255.255.0
 24.3724 +65.119.27.192/255.255.255.224
 24.3725 +65.119.33.16/255.255.255.248
 24.3726 +65.119.33.32/255.255.255.248
 24.3727 +65.119.39.160/255.255.255.240
 24.3728 +65.119.157.160/255.255.255.224
 24.3729 +65.120.64.64/255.255.255.224
 24.3730 +65.120.64.136/255.255.255.248
 24.3731 +65.120.218.248/255.255.255.248
 24.3732 +65.121.109.0/255.255.255.0
 24.3733 +65.121.232.128/255.255.255.248
 24.3734 +65.122.7.232/255.255.255.248
 24.3735 +65.122.14.144/255.255.255.240
 24.3736 +65.122.47.224/255.255.255.224
 24.3737 +65.122.139.128/255.255.255.192
 24.3738 +65.124.163.112/255.255.255.248
 24.3739 +65.125.0.0/255.255.255.0
 24.3740 +65.125.1.224/255.255.255.224
 24.3741 +65.125.29.0/255.255.255.128
 24.3742 +65.125.163.240/255.255.255.248
 24.3743 +65.125.168.0/255.255.255.0
 24.3744 +65.125.173.224/255.255.255.240
 24.3745 +65.126.23.160/255.255.255.240
 24.3746 +65.126.123.0/255.255.255.128
 24.3747 +65.126.196.152/255.255.255.248
 24.3748 +65.126.196.208/255.255.255.240
 24.3749 +65.126.197.64/255.255.255.248
 24.3750 +65.126.197.96/255.255.255.240
 24.3751 +65.126.198.192/255.255.255.248
 24.3752 +65.126.198.232/255.255.255.240
 24.3753 +65.126.221.0/255.255.255.0
 24.3754 +65.127.126.224/255.255.255.224
 24.3755 +65.127.162.0/255.255.255.0
 24.3756 +65.160.58.0/255.255.254.0
 24.3757 +65.160.68.192/255.255.255.192
 24.3758 +65.160.127.0/255.255.255.0
 24.3759 +65.163.128.64/255.255.255.192
 24.3760 +65.164.126.0/255.255.255.0
 24.3761 +65.166.64.192/255.255.255.192
 24.3762 +65.168.28.128/255.255.255.128
 24.3763 +65.168.118.0/255.255.255.0
 24.3764 +65.169.16.0/255.255.255.128
 24.3765 +65.169.154.112/255.255.255.240
 24.3766 +65.169.171.216/255.255.255.248
 24.3767 +65.170.114.0/255.255.254.0
 24.3768 +65.170.184.0/255.255.255.240
 24.3769 +65.171.101.224/255.255.255.224
 24.3770 +65.172.193.16/255.255.255.248
 24.3771 +65.173.188.0/255.255.254.0
 24.3772 +65.174.230.32/255.255.255.240
 24.3773 +65.192.0.0/255.255.255.0
 24.3774 +65.193.9.0/255.255.255.0
 24.3775 +65.193.213.128/255.255.255.192
 24.3776 +65.194.86.192/255.255.255.192
 24.3777 +65.195.54.0/255.255.255.128
 24.3778 +65.195.89.0/255.255.255.0
 24.3779 +65.195.171.192/255.255.255.224
 24.3780 +65.195.173.0/255.255.255.0
 24.3781 +65.196.8.0/255.255.255.0
 24.3782 +65.196.27.192/255.255.255.224
 24.3783 +65.196.47.0/255.255.255.128
 24.3784 +65.196.98.0/255.255.254.0
 24.3785 +65.196.188.0/255.255.255.0
 24.3786 +65.197.144.192/255.255.255.192
 24.3787 +65.197.153.0/255.255.255.128
 24.3788 +65.198.94.176/255.255.255.240
 24.3789 +65.198.192.0/255.255.252.0
 24.3790 +65.198.205.128/255.255.255.192
 24.3791 +65.198.216.2/255.255.255.3
 24.3792 +65.199.14.192/255.255.255.224
 24.3793 +65.199.219.64/255.255.255.248
 24.3794 +65.199.249.128/255.255.255.192
 24.3795 +65.200.58.0/255.255.255.224
 24.3796 +65.200.104.0/255.255.255.0
 24.3797 +65.200.176.224/255.255.255.240
 24.3798 +65.200.185.0/255.255.255.240
 24.3799 +65.201.90.0/255.255.255.0
 24.3800 +65.201.156.136/255.255.255.248
 24.3801 +65.201.196.0/255.255.255.0
 24.3802 +65.201.246.104/255.255.255.248
 24.3803 +65.202.51.32/255.255.255.224
 24.3804 +65.202.139.128/255.255.255.240
 24.3805 +65.203.122.128/255.255.255.128
 24.3806 +65.203.145.0/255.255.255.128
 24.3807 +65.203.232.192/255.255.255.224
 24.3808 +65.204.3.96/255.255.255.224
 24.3809 +65.204.55.224/255.255.255.224
 24.3810 +65.204.108.0/255.255.254.0
 24.3811 +65.204.138.24/255.255.255.248
 24.3812 +65.204.148.160/255.255.255.224
 24.3813 +65.204.149.128/255.255.255.224
 24.3814 +65.204.157.0/255.255.255.0
 24.3815 +65.204.208.0/255.255.255.0
 24.3816 +65.204.232.64/255.255.255.224
 24.3817 +65.205.145.64/255.255.255.224
 24.3818 +65.205.162.0/255.255.255.192
 24.3819 +65.205.231.128/255.255.255.128
 24.3820 +65.206.38.80/255.255.255.240
 24.3821 +65.206.171.56/255.255.255.248
 24.3822 +65.207.33.0/255.255.255.0
 24.3823 +65.207.61.136/255.255.255.248
 24.3824 +65.207.86.176/255.255.255.240
 24.3825 +65.208.134.128/255.255.255.128
 24.3826 +65.208.155.96/255.255.255.240
 24.3827 +65.208.157.16/255.255.255.240
 24.3828 +65.209.96.32/255.255.255.240
 24.3829 +65.209.107.96/255.255.255.224
 24.3830 +65.209.114.0/255.255.255.0
 24.3831 +65.210.79.192/255.255.255.192
 24.3832 +65.210.186.0/255.255.255.224
 24.3833 +65.211.238.0/255.255.255.0
 24.3834 +65.212.79.112/255.255.255.240
 24.3835 +65.212.148.0/255.255.252.0
 24.3836 +65.213.35.128/255.255.255.224
 24.3837 +65.213.135.32/255.255.255.248
 24.3838 +65.213.142.0/255.255.255.224
 24.3839 +65.214.34.0/255.255.255.0
 24.3840 +65.214.118.0/255.255.255.248
 24.3841 +65.214.130.0/255.255.255.0
 24.3842 +65.214.165.160/255.255.255.224
 24.3843 +65.214.172.0/255.255.255.0
 24.3844 +65.215.219.0/255.255.255.0
 24.3845 +65.216.254.40/255.255.255.248
 24.3846 +65.217.79.224/255.255.255.224
 24.3847 +65.217.219.192/255.255.255.224
 24.3848 +65.218.3.0/255.255.255.0
 24.3849 +65.218.168.64/255.255.255.192
 24.3850 +65.218.249.96/255.255.255.224
 24.3851 +65.219.49.136/255.255.255.248
 24.3852 +65.219.82.24/255.255.255.248
 24.3853 +65.219.170.0/255.255.255.0
 24.3854 +65.219.221.64/255.255.255.192
 24.3855 +65.219.224.0/255.255.255.0
 24.3856 +65.220.0.64/255.255.255.240
 24.3857 +65.220.11.0/255.255.255.0
 24.3858 +65.220.50.96/255.255.255.224
 24.3859 +65.220.54.224/255.255.255.248
 24.3860 +65.220.62.0/255.255.254.0
 24.3861 +65.220.69.144/255.255.255.248
 24.3862 +65.220.101.96/255.255.255.240
 24.3863 +65.220.101.128/255.255.255.224
 24.3864 +65.220.122.192/255.255.255.224
 24.3865 +65.221.2.64/255.255.255.192
 24.3866 +65.221.203.0/255.255.255.0
 24.3867 +65.222.158.128/255.255.255.240
 24.3868 +65.222.172.0/255.255.255.0
 24.3869 +65.222.177.0/255.255.255.0
 24.3870 +65.222.178.0/255.255.255.0
 24.3871 +65.222.200.0/255.255.255.0
 24.3872 +65.222.201.32/255.255.255.240
 24.3873 +65.222.202.104/255.255.255.248
 24.3874 +65.223.0.0/255.255.248.0
 24.3875 +65.223.14.0/255.255.255.0
 24.3876 +65.223.31.128/255.255.255.224
 24.3877 +65.223.84.128/255.255.255.224
 24.3878 +65.223.110.176/255.255.255.240
 24.3879 +65.223.139.0/255.255.255.0
 24.3880 +65.223.176.0/255.255.255.0
 24.3881 +65.223.188.128/255.255.255.224
 24.3882 +65.223.231.128/255.255.255.192
 24.3883 +65.233.255.0/255.255.255.0
 24.3884 +65.240.24.120/255.255.255.248
 24.3885 +65.241.19.0/255.255.255.0
 24.3886 +65.241.27.224/255.255.255.224
 24.3887 +65.241.32.0/255.255.255.0
 24.3888 +65.241.46.48/255.255.255.240
 24.3889 +65.241.116.0/255.255.254.0
 24.3890 +65.241.136.0/255.255.255.0
 24.3891 +65.242.71.112/255.255.255.248
 24.3892 +65.242.240.208/255.255.255.248
 24.3893 +65.243.215.0/255.255.255.192
 24.3894 +65.243.249.128/255.255.255.240
 24.3895 +65.244.20.64/255.255.255.224
 24.3896 +65.244.101.1/255.255.255.1
 24.3897 +65.244.129.32/255.255.255.244
 24.3898 +65.244.186.0/255.255.255.0
 24.3899 +65.244.224.160/255.255.255.224
 24.3900 +65.244.236.56/255.255.255.248
 24.3901 +65.244.238.0/255.255.255.0
 24.3902 +65.246.72.0/255.255.248.0
 24.3903 +65.246.152.0/255.255.248.0
 24.3904 +65.247.59.136/255.255.255.248
 24.3905 +65.247.82.224/255.255.255.240
 24.3906 +65.247.85.64/255.255.255.192
 24.3907 +65.247.105.240/255.255.255.240
 24.3908 +65.247.121.0/255.255.255.0
 24.3909 +65.247.180.0/255.255.255.0
 24.3910 +65.247.192.0/255.255.252.0
 24.3911 +65.247.252.96/255.255.255.248
 24.3912 +65.248.151.0/255.255.255.0
 24.3913 +65.249.196.0/255.255.255.0
 24.3914 +65.249.201.96/255.255.255.224
 24.3915 +65.249.230.64/255.255.255.224
 24.3916 +66.0.19.0/255.255.255.192
 24.3917 +66.0.110.176/255.255.255.248
 24.3918 +66.0.187.136/255.255.255.248
 24.3919 +66.4.0.0/255.254.0.0
 24.3920 +66.7.6.80/255.255.255.248
 24.3921 +66.7.28.152/255.255.255.248
 24.3922 +66.7.40.16/255.255.255.248
 24.3923 +66.7.226.192/255.255.255.248
 24.3924 +66.7.243.232/255.255.255.248
 24.3925 +66.7.244.64/255.255.255.248
 24.3926 +66.18.105.0/255.255.255.224
 24.3927 +66.34.0.0/255.255.0.1
 24.3928 +66.35.129.32/255.255.255.248
 24.3929 +66.35.153.8/255.255.255.248
 24.3930 +66.35.158.184/255.255.255.248
 24.3931 +66.35.159.72/255.255.255.248
 24.3932 +66.35.168.168/255.255.255.248
 24.3933 +66.35.177.112/255.255.255.248
 24.3934 +66.35.192.0/255.255.255.208
 24.3935 +66.35.192.48/255.255.255.240
 24.3936 +66.35.192.192/255.255.255.224
 24.3937 +66.35.192.224/255.255.255.240
 24.3938 +66.35.192.252/255.255.192.252
 24.3939 +66.36.243.0/255.255.255.0
 24.3940 +66.38.215.96/255.255.255.224
 24.3941 +66.42.53.0/255.255.255.0
 24.3942 +66.43.88.88/255.255.255.248
 24.3943 +66.43.171.96/255.255.255.240
 24.3944 +66.43.190.208/255.255.255.240
 24.3945 +66.45.26.32/255.255.255.248
 24.3946 +66.45.28.48/255.255.255.240
 24.3947 +66.51.24.192/255.255.255.224
 24.3948 +66.51.66.48/255.255.255.248
 24.3949 +66.51.175.32/255.255.255.248
 24.3950 +66.51.175.128/255.255.255.128
 24.3951 +66.52.5.0/255.255.250.0
 24.3952 +66.54.0.0/255.255.192.0
 24.3953 +66.54.64.0/255.255.208.0
 24.3954 +66.54.249.16/255.255.255.248
 24.3955 +66.55.224.0/255.255.224.0
 24.3956 +66.59.172.24/255.255.255.248
 24.3957 +66.59.174.160/255.255.255.224
 24.3958 +66.62.170.96/255.255.255.240
 24.3959 +66.63.11.0/255.255.255.224
 24.3960 +66.72.93.16/255.255.255.248
 24.3961 +66.72.140.40/255.255.255.248
 24.3962 +66.72.212.216/255.255.255.248
 24.3963 +66.73.146.104/255.255.255.248
 24.3964 +66.77.21.64/255.255.255.192
 24.3965 +66.77.21.128/255.255.255.128
 24.3966 +66.77.59.168/255.255.255.248
 24.3967 +66.77.60.128/255.255.255.192
 24.3968 +66.77.63.0/255.255.255.0
 24.3969 +66.77.70.64/255.255.255.192
 24.3970 +66.77.70.224/255.255.255.224
 24.3971 +66.77.73.0/255.255.254.0
 24.3972 +66.77.88.0/255.255.254.0
 24.3973 +66.77.90.224/255.255.255.240
 24.3974 +66.77.94.160/255.255.255.240
 24.3975 +66.77.102.0/255.255.255.0
 24.3976 +66.77.124.0/255.255.255.0
 24.3977 +66.77.126.64/255.255.255.248
 24.3978 +66.77.126.160/255.255.255.224
 24.3979 +66.77.127.64/255.255.255.192
 24.3980 +66.77.128.0/255.255.255.192
 24.3981 +66.77.142.96/255.255.255.224
 24.3982 +66.77.144.0/255.255.254.0
 24.3983 +66.77.147.192/255.255.255.224
 24.3984 +66.92.62.48/255.255.255.240
 24.3985 +66.92.93.0/255.255.255.240
 24.3986 +66.92.118.16/255.255.255.240
 24.3987 +66.92.175.192/255.255.255.192
 24.3988 +66.92.179.0/255.255.255.248
 24.3989 +66.93.65.80/255.255.255.224
 24.3990 +66.93.66.96/255.255.255.240
 24.3991 +66.93.66.112/255.255.255.240
 24.3992 +66.93.156.96/255.255.255.224
 24.3993 +66.95.0.0/255.255.0.0
 24.3994 +66.97.66.0/255.255.253.0
 24.3995 +66.100.10.0/255.255.255.0
 24.3996 +66.100.28.64/255.255.255.192
 24.3997 +66.100.29.0/255.255.255.128
 24.3998 +66.100.48.160/255.255.255.224
 24.3999 +66.100.83.0/255.255.255.0
 24.4000 +66.100.97.0/255.255.255.224
 24.4001 +66.100.113.0/255.255.255.248
 24.4002 +66.100.156.0/255.255.255.128
 24.4003 +66.100.160.0/255.255.255.0
 24.4004 +66.100.200.0/255.255.255.0
 24.4005 +66.101.96.0/255.255.255.0
 24.4006 +66.101.224.0/255.255.252.0
 24.4007 +66.109.227.136/255.255.255.248
 24.4008 +66.109.227.248/255.255.255.248
 24.4009 +66.111.54.167/255.255.255.240
 24.4010 +66.111.55.150/255.255.255.240
 24.4011 +66.111.96.0/255.255.240.0
 24.4012 +66.111.128.0/255.255.192.0
 24.4013 +66.114.194.0/255.255.255.208
 24.4014 +66.115.30.0/255.255.255.192
 24.4015 +66.117.2.0/255.255.255.0
 24.4016 +66.117.5.229/255.255.255.235
 24.4017 +66.117.6.226/255.255.255.232
 24.4018 +66.117.8.97/255.255.255.100
 24.4019 +66.120.93.128/255.255.255.224
 24.4020 +66.120.146.104/255.255.255.248
 24.4021 +66.120.153.128/255.255.255.248
 24.4022 +66.120.193.136/255.255.255.200
 24.4023 +66.120.194.0/255.255.255.248
 24.4024 +66.121.8.0/255.255.255.0
 24.4025 +66.121.60.72/255.255.255.248
 24.4026 +66.121.73.128/255.255.255.128
 24.4027 +66.121.83.128/255.255.255.224
 24.4028 +66.121.132.120/255.255.255.248
 24.4029 +66.121.154.248/255.255.255.248
 24.4030 +66.121.168.128/255.255.255.248
 24.4031 +66.121.174.80/255.255.255.248
 24.4032 +66.121.184.192/255.255.255.224
 24.4033 +66.121.208.160/255.255.255.240
 24.4034 +66.121.234.168/255.255.255.248
 24.4035 +66.122.26.0/255.255.255.192
 24.4036 +66.122.85.200/255.255.255.248
 24.4037 +66.122.116.16/255.255.255.248
 24.4038 +66.122.118.32/255.255.255.248
 24.4039 +66.122.125.56/255.255.255.248
 24.4040 +66.122.125.72/255.255.255.248
 24.4041 +66.122.170.80/255.255.255.248
 24.4042 +66.122.218.40/255.255.255.248
 24.4043 +66.122.254.248/255.255.255.248
 24.4044 +66.123.26.224/255.255.255.248
 24.4045 +66.123.27.200/255.255.255.248
 24.4046 +66.123.36.192/255.255.255.248
 24.4047 +66.123.37.232/255.255.255.248
 24.4048 +66.123.51.224/255.255.255.248
 24.4049 +66.123.62.144/255.255.255.248
 24.4050 +66.123.63.224/255.255.255.248
 24.4051 +66.123.74.112/255.255.255.248
 24.4052 +66.123.74.152/255.255.255.248
 24.4053 +66.123.75.224/255.255.255.248
 24.4054 +66.123.86.248/255.255.255.248
 24.4055 +66.123.94.176/255.255.255.248
 24.4056 +66.123.95.224/255.255.255.248
 24.4057 +66.123.117.128/255.255.255.248
 24.4058 +66.123.117.168/255.255.255.248
 24.4059 +66.123.122.248/255.255.255.248
 24.4060 +66.123.125.232/255.255.255.248
 24.4061 +66.123.136.80/255.255.255.240
 24.4062 +66.123.194.200/255.255.255.248
 24.4063 +66.123.208.176/255.255.255.248
 24.4064 +66.124.14.8/255.255.255.248
 24.4065 +66.124.51.128/255.255.255.128
 24.4066 +66.124.72.104/255.255.255.248
 24.4067 +66.124.86.240/255.255.255.248
 24.4068 +66.124.89.96/255.255.255.248
 24.4069 +66.124.118.8/255.255.255.248
 24.4070 +66.124.168.216/255.255.255.248
 24.4071 +66.124.239.104/255.255.255.248
 24.4072 +66.124.242.40/255.255.255.248
 24.4073 +66.125.19.0/255.255.255.248
 24.4074 +66.125.19.240/255.255.255.248
 24.4075 +66.125.59.56/255.255.255.248
 24.4076 +66.125.66.144/255.255.255.248
 24.4077 +66.125.73.144/255.255.255.248
 24.4078 +66.125.79.176/255.255.255.248
 24.4079 +66.125.87.64/255.255.255.240
 24.4080 +66.125.146.160/255.255.255.248
 24.4081 +66.125.169.152/255.255.255.248
 24.4082 +66.125.181.96/255.255.255.248
 24.4083 +66.125.185.48/255.255.255.248
 24.4084 +66.125.190.88/255.255.255.248
 24.4085 +66.125.194.192/255.255.255.248
 24.4086 +66.125.220.16/255.255.255.248
 24.4087 +66.125.221.152/255.255.255.248
 24.4088 +66.125.223.64/255.255.255.248
 24.4089 +66.125.232.232/255.255.255.248
 24.4090 +66.125.233.176/255.255.255.248
 24.4091 +66.125.234.144/255.255.255.248
 24.4092 +66.125.235.144/255.255.255.240
 24.4093 +66.125.243.104/255.255.255.248
 24.4094 +66.125.245.184/255.255.255.248
 24.4095 +66.125.247.224/255.255.255.248
 24.4096 +66.125.253.72/255.255.255.248
 24.4097 +66.126.97.120/255.255.255.248
 24.4098 +66.126.116.144/255.255.255.248
 24.4099 +66.126.138.64/255.255.255.192
 24.4100 +66.126.145.248/255.255.255.248
 24.4101 +66.126.158.128/255.255.255.128
 24.4102 +66.126.160.48/255.255.255.248
 24.4103 +66.126.161.64/255.255.255.248
 24.4104 +66.126.179.24/255.255.255.248
 24.4105 +66.126.193.136/255.255.255.248
 24.4106 +66.126.194.0/255.255.255.224
 24.4107 +66.126.194.136/255.255.255.240
 24.4108 +66.126.197.216/255.255.255.240
 24.4109 +66.126.198.224/255.255.255.248
 24.4110 +66.126.216.32/255.255.255.224
 24.4111 +66.126.237.208/255.255.255.248
 24.4112 +66.126.244.16/255.255.255.248
 24.4113 +66.126.244.40/255.255.255.248
 24.4114 +66.126.245.208/255.255.255.248
 24.4115 +66.126.247.88/255.255.255.232
 24.4116 +66.126.249.8/255.255.255.232
 24.4117 +66.126.251.72/255.255.255.248
 24.4118 +66.127.0.200/255.255.255.248
 24.4119 +66.127.3.72/255.255.255.248
 24.4120 +66.127.36.240/255.255.255.248
 24.4121 +66.127.62.48/255.255.255.248
 24.4122 +66.127.65.184/255.255.255.248
 24.4123 +66.127.66.184/255.255.255.248
 24.4124 +66.127.71.224/255.255.255.240
 24.4125 +66.127.80.160/255.255.255.240
 24.4126 +66.127.82.216/255.255.255.216
 24.4127 +66.127.83.128/255.255.255.240
 24.4128 +66.127.100.32/255.255.255.248
 24.4129 +66.127.121.224/255.255.255.248
 24.4130 +66.127.170.56/255.255.255.248
 24.4131 +66.127.172.200/255.255.255.248
 24.4132 +66.127.181.96/255.255.255.248
 24.4133 +66.127.184.96/255.255.255.248
 24.4134 +66.127.185.8/255.255.255.248
 24.4135 +66.127.185.216/255.255.255.248
 24.4136 +66.127.186.192/255.255.255.248
 24.4137 +66.127.187.144/255.255.255.248
 24.4138 +66.127.224.216/255.255.255.240
 24.4139 +66.127.237.8/255.255.255.240
 24.4140 +66.127.249.176/255.255.255.240
 24.4141 +66.128.225.128/255.255.255.192
 24.4142 +66.133.64.0/255.255.224.0
 24.4143 +66.136.8.192/255.255.255.248
 24.4144 +66.136.154.56/255.255.255.248
 24.4145 +66.136.155.224/255.255.255.248
 24.4146 +66.136.169.168/255.255.255.248
 24.4147 +66.136.223.248/255.255.255.248
 24.4148 +66.137.10.96/255.255.255.248
 24.4149 +66.137.15.176/255.255.255.248
 24.4150 +66.137.164.144/255.255.255.248
 24.4151 +66.137.165.200/255.255.255.248
 24.4152 +66.137.167.128/255.255.255.128
 24.4153 +66.137.197.192/255.255.255.248
 24.4154 +66.137.218.208/255.255.255.248
 24.4155 +66.137.238.184/255.255.255.248
 24.4156 +66.139.15.56/255.255.255.248
 24.4157 +66.139.45.208/255.255.255.248
 24.4158 +66.139.47.48/255.255.255.248
 24.4159 +66.139.140.64/255.255.255.248
 24.4160 +66.139.144.88/255.255.255.248
 24.4161 +66.139.145.88/255.255.255.248
 24.4162 +66.139.160.8/255.255.255.248
 24.4163 +66.139.176.16/255.255.255.248
 24.4164 +66.139.188.48/255.255.255.248
 24.4165 +66.139.210.16/255.255.255.248
 24.4166 +66.139.245.72/255.255.255.248
 24.4167 +66.140.65.80/255.255.255.248
 24.4168 +66.140.112.112/255.255.255.248
 24.4169 +66.140.136.48/255.255.255.240
 24.4170 +66.140.148.32/255.255.255.248
 24.4171 +66.140.199.0/255.255.255.0
 24.4172 +66.141.8.232/255.255.255.248
 24.4173 +66.141.51.240/255.255.255.240
 24.4174 +66.141.69.168/255.255.255.248
 24.4175 +66.141.189.32/255.255.255.248
 24.4176 +66.142.1.0/255.255.255.192
 24.4177 +66.142.8.0/255.255.252.0
 24.4178 +66.142.76.120/255.255.255.248
 24.4179 +66.142.81.208/255.255.255.248
 24.4180 +66.142.82.88/255.255.255.248
 24.4181 +66.143.70.160/255.255.255.248
 24.4182 +66.143.70.168/255.255.255.248
 24.4183 +66.143.148.168/255.255.255.248
 24.4184 +66.143.150.160/255.255.255.248
 24.4185 +66.143.180.248/255.255.255.248
 24.4186 +66.143.228.32/255.255.255.248
 24.4187 +66.144.0.0/255.254.0.0
 24.4188 +66.146.163.161/255.255.255.240
 24.4189 +66.146.163.193/255.255.255.240
 24.4190 +66.147.154.0/255.255.255.192
 24.4191 +66.150.94.0/255.255.255.0
 24.4192 +66.150.161.133/255.255.255.247
 24.4193 +66.150.223.160/255.255.255.224
 24.4194 +66.151.178.0/255.255.255.0
 24.4195 +66.151.181.0/255.255.255.0
 24.4196 +66.153.17.16/255.255.255.248
 24.4197 +66.153.18.8/255.255.255.248
 24.4198 +66.153.28.240/255.255.255.240
 24.4199 +66.153.61.224/255.255.255.224
 24.4200 +66.153.81.208/255.255.255.248
 24.4201 +66.153.100.64/255.255.255.248
 24.4202 +66.153.111.0/255.255.255.240
 24.4203 +66.155.0.0/255.255.128.0
 24.4204 +66.155.187.8/255.255.255.248
 24.4205 +66.159.22.0/255.255.255.0
 24.4206 +66.160.18.0/255.255.255.248
 24.4207 +66.160.144.64/255.255.255.224
 24.4208 +66.161.32.240/255.255.255.240
 24.4209 +66.162.5.64/255.255.255.224
 24.4210 +66.163.5.112/255.255.255.248
 24.4211 +66.163.224.0/255.255.224.0
 24.4212 +66.165.92.128/255.255.255.128
 24.4213 +66.170.100.224/255.255.255.240
 24.4214 +66.170.240.0/255.255.240.0
 24.4215 +66.179.42.224/255.255.255.224
 24.4216 +66.181.50.96/255.255.255.248
 24.4217 +66.181.60.32/255.255.255.248
 24.4218 +66.181.60.104/255.255.255.248
 24.4219 +66.181.62.0/255.255.255.248
 24.4220 +66.182.37.192/255.255.255.240
 24.4221 +66.184.204.0/255.255.255.0
 24.4222 +66.184.229.88/255.255.255.248
 24.4223 +66.185.109.192/255.255.255.248
 24.4224 +66.185.110.160/255.255.255.160
 24.4225 +66.185.165.96/255.255.255.224
 24.4226 +66.185.169.64/255.255.255.248
 24.4227 +66.186.20.0/255.255.255.192
 24.4228 +66.186.32.0/255.255.240.0
 24.4229 +66.187.133.64/255.255.255.240
 24.4230 +66.194.6.0/255.255.255.0
 24.4231 +66.194.10.0/255.255.254.0
 24.4232 +66.194.15.0/255.255.255.240
 24.4233 +66.194.160.0/255.255.252.0
 24.4234 +66.196.64.0/255.255.192.0
 24.4235 +66.196.198.176/255.255.255.240
 24.4236 +66.197.109.0/255.255.255.0
 24.4237 +66.197.111.0/255.255.255.0
 24.4238 +66.197.118.0/255.255.255.0
 24.4239 +66.197.119.0/255.255.255.0
 24.4240 +66.197.120.0/255.255.255.0
 24.4241 +66.197.122.0/255.255.255.0
 24.4242 +66.197.123.0/255.255.255.0
 24.4243 +66.197.125.0/255.255.255.0
 24.4244 +66.197.127.0/255.255.255.0
 24.4245 +66.199.24.56/255.255.255.248
 24.4246 +66.201.105.160/255.255.255.224
 24.4247 +66.204.0.0/255.255.0.0
 24.4248 +66.205.229.64/255.255.255.192
 24.4249 +66.207.106.208/255.255.255.240
 24.4250 +66.207.119.232/255.255.255.248
 24.4251 +66.207.120.224/255.255.255.240
 24.4252 +66.207.199.64/255.255.255.240
 24.4253 +66.212.125.0/255.255.255.0
 24.4254 +66.214.183.128/255.255.255.248
 24.4255 +66.214.252.56/255.255.255.248
 24.4256 +66.216.76.104/255.255.255.248
 24.4257 +66.216.80.176/255.255.255.240
 24.4258 +66.216.99.48/255.255.255.248
 24.4259 +66.216.104.80/255.255.255.240
 24.4260 +66.219.228.48/255.255.255.240
 24.4261 +66.219.232.32/255.255.255.248
 24.4262 +66.220.3.80/255.255.255.240
 24.4263 +66.220.31.128/255.255.255.224
 24.4264 +66.224.6.32/255.255.255.224
 24.4265 +66.225.64.0/255.255.224.0
 24.4266 +66.226.0.0/255.255.255.192
 24.4267 +66.226.128.0/255.255.224.0
 24.4268 +66.226.197.0/255.255.255.0
 24.4269 +66.227.1.97/255.255.255.248
 24.4270 +66.228.143.32/255.255.255.240
 24.4271 +66.228.160.0/255.255.224.0
 24.4272 +66.235.128.0/255.255.240.0
 24.4273 +66.235.231.0/255.255.253.0
 24.4274 +66.243.153.0/255.255.255.0
 24.4275 +66.244.0.0/255.255.192.0
 24.4276 +66.247.101.144/255.255.255.248
 24.4277 +66.250.24.2/255.255.255.248
 24.4278 +66.250.32.227/255.255.255.240
 24.4279 +66.252.128.0/255.255.240.0
 24.4280 +66.252.198.80/255.255.255.248
 24.4281 +66.255.92.112/255.255.255.240
 24.4282 +67.36.21.0/255.255.255.128
 24.4283 +67.36.21.160/255.255.255.248
 24.4284 +67.36.32.208/255.255.255.248
 24.4285 +67.36.32.240/255.255.255.248
 24.4286 +67.36.161.128/255.255.255.224
 24.4287 +67.36.168.32/255.255.255.248
 24.4288 +67.38.82.128/255.255.255.128
 24.4289 +67.38.96.232/255.255.255.248
 24.4290 +67.38.157.32/255.255.255.248
 24.4291 +67.38.188.152/255.255.255.248
 24.4292 +67.38.205.24/255.255.255.248
 24.4293 +67.38.226.216/255.255.255.248
 24.4294 +67.38.235.64/255.255.255.224
 24.4295 +67.39.27.120/255.255.255.248
 24.4296 +67.39.162.32/255.255.255.248
 24.4297 +67.39.214.8/255.255.255.248
 24.4298 +67.39.216.24/255.255.255.248
 24.4299 +67.39.252.8/255.255.255.248
 24.4300 +67.40.80.80/255.255.255.248
 24.4301 +67.41.40.128/255.255.255.248
 24.4302 +67.43.144.0/255.255.240.0
 24.4303 +67.50.160.48/255.255.255.240
 24.4304 +67.64.82.16/255.255.255.248
 24.4305 +67.64.88.176/255.255.255.248
 24.4306 +67.64.101.144/255.255.255.248
 24.4307 +67.64.101.224/255.255.255.248
 24.4308 +67.64.154.88/255.255.255.248
 24.4309 +67.64.210.248/255.255.255.248
 24.4310 +67.65.88.104/255.255.255.248
 24.4311 +67.65.97.192/255.255.255.248
 24.4312 +67.65.106.168/255.255.255.248
 24.4313 +67.65.140.232/255.255.255.248
 24.4314 +67.65.141.8/255.255.255.248
 24.4315 +67.65.195.32/255.255.255.224
 24.4316 +67.65.195.64/255.255.255.248
 24.4317 +67.65.207.96/255.255.255.248
 24.4318 +67.66.12.128/255.255.255.248
 24.4319 +67.66.52.48/255.255.255.248
 24.4320 +67.66.91.48/255.255.255.248
 24.4321 +67.66.108.0/255.255.255.248
 24.4322 +67.66.115.8/255.255.255.248
 24.4323 +67.66.115.16/255.255.255.248
 24.4324 +67.66.115.120/255.255.255.248
 24.4325 +67.66.193.88/255.255.255.248
 24.4326 +67.67.34.72/255.255.255.248
 24.4327 +67.67.87.96/255.255.255.248
 24.4328 +67.67.199.128/255.255.255.248
 24.4329 +67.69.2.232/255.255.255.248
 24.4330 +67.69.4.64/255.255.255.248
 24.4331 +67.69.8.192/255.255.255.248
 24.4332 +67.69.13.208/255.255.255.248
 24.4333 +67.69.15.128/255.255.255.248
 24.4334 +67.69.24.112/255.255.255.248
 24.4335 +67.69.25.8/255.255.255.248
 24.4336 +67.69.32.136/255.255.255.248
 24.4337 +67.69.50.224/255.255.255.224
 24.4338 +67.69.104.184/255.255.255.248
 24.4339 +67.70.213.144/255.255.255.248
 24.4340 +67.70.243.64/255.255.255.240
 24.4341 +67.70.248.96/255.255.255.224
 24.4342 +67.70.252.96/255.255.255.224
 24.4343 +67.70.255.160/255.255.255.248
 24.4344 +67.71.196.128/255.255.255.248
 24.4345 +67.71.227.0/255.255.255.248
 24.4346 +67.96.66.80/255.255.255.240
 24.4347 +67.97.3.128/255.255.255.128
 24.4348 +67.97.167.0/255.255.255.0
 24.4349 +67.98.2.224/255.255.255.224
 24.4350 +67.98.69.128/255.255.255.224
 24.4351 +67.98.72.64/255.255.255.224
 24.4352 +67.98.78.0/255.255.255.240
 24.4353 +67.98.78.32/255.255.255.240
 24.4354 +67.98.92.0/255.255.255.0
 24.4355 +67.98.223.0/255.255.255.0
 24.4356 +67.99.75.0/255.255.255.0
 24.4357 +67.112.11.176/255.255.255.248
 24.4358 +67.112.32.152/255.255.255.248
 24.4359 +67.112.66.192/255.255.255.248
 24.4360 +67.112.113.160/255.255.255.248
 24.4361 +67.112.127.240/255.255.255.248
 24.4362 +67.112.134.248/255.255.255.248
 24.4363 +67.112.135.16/255.255.255.248
 24.4364 +67.112.155.224/255.255.255.248
 24.4365 +67.112.188.144/255.255.255.248
 24.4366 +67.112.189.208/255.255.255.248
 24.4367 +67.112.232.208/255.255.255.248
 24.4368 +67.112.252.184/255.255.255.248
 24.4369 +67.113.21.176/255.255.255.248
 24.4370 +67.113.46.0/255.255.255.240
 24.4371 +67.113.89.112/255.255.255.248
 24.4372 +67.113.130.224/255.255.255.248
 24.4373 +67.113.132.208/255.255.255.248
 24.4374 +67.113.135.56/255.255.255.248
 24.4375 +67.113.166.32/255.255.255.240
 24.4376 +67.113.168.216/255.255.255.248
 24.4377 +67.113.170.248/255.255.255.248
 24.4378 +67.113.192.168/255.255.255.248
 24.4379 +67.113.206.80/255.255.255.248
 24.4380 +67.113.236.184/255.255.255.248
 24.4381 +67.113.238.16/255.255.255.248
 24.4382 +67.114.23.192/255.255.255.248
 24.4383 +67.114.24.232/255.255.255.248
 24.4384 +67.114.28.40/255.255.255.248
 24.4385 +67.114.82.8/255.255.255.248
 24.4386 +67.114.102.16/255.255.255.248
 24.4387 +67.114.148.176/255.255.255.248
 24.4388 +67.114.149.32/255.255.255.248
 24.4389 +67.114.152.136/255.255.255.248
 24.4390 +67.114.153.152/255.255.255.248
 24.4391 +67.114.161.112/255.255.255.248
 24.4392 +67.114.167.0/255.255.255.248
 24.4393 +67.114.167.8/255.255.255.248
 24.4394 +67.114.173.176/255.255.255.248
 24.4395 +67.114.199.112/255.255.255.248
 24.4396 +67.115.70.16/255.255.255.248
 24.4397 +67.115.70.136/255.255.255.248
 24.4398 +67.115.71.184/255.255.255.248
 24.4399 +67.115.83.64/255.255.255.248
 24.4400 +67.115.99.0/255.255.255.0
 24.4401 +67.115.128.72/255.255.255.248
 24.4402 +67.115.140.8/255.255.255.248
 24.4403 +67.115.141.112/255.255.255.248
 24.4404 +67.115.149.128/255.255.255.248
 24.4405 +67.115.156.80/255.255.255.248
 24.4406 +67.115.157.24/255.255.255.248
 24.4407 +67.115.175.0/255.255.255.128
 24.4408 +67.115.252.112/255.255.255.248
 24.4409 +67.116.9.72/255.255.255.248
 24.4410 +67.116.32.216/255.255.255.248
 24.4411 +67.116.43.32/255.255.255.248
 24.4412 +67.116.88.80/255.255.255.248
 24.4413 +67.116.96.56/255.255.255.248
 24.4414 +67.116.105.128/255.255.255.248
 24.4415 +67.116.118.24/255.255.255.248
 24.4416 +67.116.118.120/255.255.255.248
 24.4417 +67.116.124.112/255.255.255.248
 24.4418 +67.116.127.192/255.255.255.192
 24.4419 +67.116.155.120/255.255.255.248
 24.4420 +67.116.191.88/255.255.255.240
 24.4421 +67.116.191.112/255.255.255.248
 24.4422 +67.117.36.88/255.255.255.248
 24.4423 +67.117.42.24/255.255.255.248
 24.4424 +67.117.52.144/255.255.255.248
 24.4425 +67.117.53.0/255.255.255.248
 24.4426 +67.117.54.192/255.255.255.248
 24.4427 +67.117.55.248/255.255.255.248
 24.4428 +67.117.63.112/255.255.255.248
 24.4429 +67.117.70.248/255.255.255.248
 24.4430 +67.117.72.232/255.255.255.248
 24.4431 +67.117.116.160/255.255.255.248
 24.4432 +67.117.124.192/255.255.255.248
 24.4433 +67.117.136.160/255.255.255.248
 24.4434 +67.117.139.152/255.255.255.248
 24.4435 +67.117.166.0/255.255.255.240
 24.4436 +67.117.171.176/255.255.255.248
 24.4437 +67.117.180.184/255.255.255.248
 24.4438 +67.117.184.56/255.255.255.248
 24.4439 +67.117.186.160/255.255.255.240
 24.4440 +67.117.201.128/255.255.255.240
 24.4441 +67.117.222.232/255.255.255.248
 24.4442 +67.117.254.184/255.255.255.248
 24.4443 +67.118.42.24/255.255.255.248
 24.4444 +67.118.43.224/255.255.255.248
 24.4445 +67.118.65.8/255.255.255.248
 24.4446 +67.118.65.168/255.255.255.232
 24.4447 +67.118.80.192/255.255.255.192
 24.4448 +67.118.82.32/255.255.255.248
 24.4449 +67.118.104.8/255.255.255.248
 24.4450 +67.118.107.152/255.255.255.248
 24.4451 +67.118.168.64/255.255.255.248
 24.4452 +67.118.172.56/255.255.255.248
 24.4453 +67.118.174.96/255.255.255.248
 24.4454 +67.118.182.88/255.255.255.248
 24.4455 +67.118.183.240/255.255.255.248
 24.4456 +67.119.18.184/255.255.255.248
 24.4457 +67.119.41.40/255.255.255.248
 24.4458 +67.119.85.40/255.255.255.248
 24.4459 +67.119.112.184/255.255.255.248
 24.4460 +67.119.112.208/255.255.255.248
 24.4461 +67.119.126.152/255.255.255.248
 24.4462 +67.120.8.200/255.255.255.248
 24.4463 +67.120.12.128/255.255.255.248
 24.4464 +67.120.13.144/255.255.255.248
 24.4465 +67.120.39.80/255.255.255.240
 24.4466 +67.120.40.32/255.255.255.248
 24.4467 +67.120.62.32/255.255.255.248
 24.4468 +67.120.89.232/255.255.255.248
 24.4469 +67.120.124.8/255.255.255.248
 24.4470 +67.120.132.128/255.255.255.248
 24.4471 +67.120.132.152/255.255.255.248
 24.4472 +67.120.132.192/255.255.255.224
 24.4473 +67.120.156.184/255.255.255.240
 24.4474 +67.120.172.136/255.255.255.248
 24.4475 +67.120.220.80/255.255.255.248
 24.4476 +67.120.223.152/255.255.255.248
 24.4477 +67.120.239.104/255.255.255.248
 24.4478 +67.121.64.232/255.255.255.248
 24.4479 +67.121.65.216/255.255.255.248
 24.4480 +67.121.199.24/255.255.255.248
 24.4481 +67.121.226.208/255.255.255.248
 24.4482 +67.121.252.16/255.255.255.248
 24.4483 +67.122.36.80/255.255.255.248
 24.4484 +67.122.66.104/255.255.255.248
 24.4485 +67.122.142.232/255.255.255.248
 24.4486 +67.122.158.32/255.255.255.224
 24.4487 +67.122.170.176/255.255.255.248
 24.4488 +67.122.184.80/255.255.255.248
 24.4489 +67.122.186.48/255.255.255.248
 24.4490 +67.122.187.192/255.255.255.248
 24.4491 +67.122.195.48/255.255.255.248
 24.4492 +67.122.195.56/255.255.255.248
 24.4493 +67.122.196.136/255.255.255.248
 24.4494 +67.122.219.152/255.255.255.248
 24.4495 +67.123.61.208/255.255.255.248
 24.4496 +67.123.88.216/255.255.255.248
 24.4497 +67.123.102.32/255.255.255.248
 24.4498 +67.123.161.224/255.255.255.248
 24.4499 +67.124.23.88/255.255.255.248
 24.4500 +67.124.23.112/255.255.255.248
 24.4501 +67.124.33.224/255.255.255.248
 24.4502 +67.124.34.72/255.255.255.248
 24.4503 +67.124.83.8/255.255.255.248
 24.4504 +67.125.48.224/255.255.255.224
 24.4505 +67.125.49.192/255.255.255.248
 24.4506 +67.125.78.112/255.255.255.248
 24.4507 +67.125.219.56/255.255.255.248
 24.4508 +67.126.102.144/255.255.255.240
 24.4509 +67.126.137.176/255.255.255.248
 24.4510 +67.126.138.88/255.255.255.248
 24.4511 +67.126.138.240/255.255.255.248
 24.4512 +67.126.145.232/255.255.255.248
 24.4513 +67.126.168.24/255.255.255.248
 24.4514 +67.126.169.144/255.255.255.248
 24.4515 +67.126.193.48/255.255.255.248
 24.4516 +67.126.230.48/255.255.255.248
 24.4517 +67.127.38.184/255.255.255.248
 24.4518 +67.127.67.112/255.255.255.248
 24.4519 +67.127.104.48/255.255.255.248
 24.4520 +67.127.104.208/255.255.255.248
 24.4521 +67.127.108.80/255.255.255.248
 24.4522 +67.127.170.104/255.255.255.248
 24.4523 +67.127.183.176/255.255.255.248
 24.4524 +67.127.224.136/255.255.255.248
 24.4525 +67.127.231.208/255.255.255.248
 24.4526 +67.129.115.208/255.255.255.248
 24.4527 +67.130.47.64/255.255.255.224
 24.4528 +67.130.141.96/255.255.255.240
 24.4529 +67.131.215.96/255.255.255.240
 24.4530 +67.131.229.192/255.255.255.240
 24.4531 +67.136.66.128/255.255.255.248
 24.4532 +67.136.71.176/255.255.255.248
 24.4533 +68.20.54.16/255.255.255.248
 24.4534 +68.20.60.24/255.255.255.248
 24.4535 +68.20.61.216/255.255.255.248
 24.4536 +68.20.66.56/255.255.255.248
 24.4537 +68.20.66.168/255.255.255.248
 24.4538 +68.20.82.0/255.255.255.248
 24.4539 +68.20.100.160/255.255.255.248
 24.4540 +68.20.114.128/255.255.255.248
 24.4541 +68.20.115.0/255.255.255.248
 24.4542 +68.20.134.152/255.255.255.248
 24.4543 +68.20.157.104/255.255.255.248
 24.4544 +68.20.190.88/255.255.255.248
 24.4545 +68.20.229.40/255.255.255.248
 24.4546 +68.20.230.240/255.255.255.248
 24.4547 +68.20.240.64/255.255.255.248
 24.4548 +68.21.61.88/255.255.255.248
 24.4549 +68.21.62.8/255.255.255.248
 24.4550 +68.21.63.128/255.255.255.248
 24.4551 +68.21.79.40/255.255.255.248
 24.4552 +68.21.79.104/255.255.255.248
 24.4553 +68.21.110.232/255.255.255.248
 24.4554 +68.21.119.224/255.255.255.248
 24.4555 +68.21.226.40/255.255.255.248
 24.4556 +68.21.226.64/255.255.255.248
 24.4557 +68.21.227.232/255.255.255.248
 24.4558 +68.21.229.152/255.255.255.248
 24.4559 +68.22.3.96/255.255.255.248
 24.4560 +68.22.23.208/255.255.255.248
 24.4561 +68.22.86.224/255.255.255.248
 24.4562 +68.22.139.0/255.255.255.240
 24.4563 +68.22.174.96/255.255.255.248
 24.4564 +68.22.179.128/255.255.255.224
 24.4565 +68.22.212.200/255.255.255.248
 24.4566 +68.22.235.232/255.255.255.248
 24.4567 +68.23.0.16/255.255.255.248
 24.4568 +68.23.7.136/255.255.255.248
 24.4569 +68.23.57.152/255.255.255.248
 24.4570 +68.23.114.192/255.255.255.248
 24.4571 +68.23.192.216/255.255.255.248
 24.4572 +68.23.229.48/255.255.255.248
 24.4573 +68.23.230.40/255.255.255.248
 24.4574 +68.23.250.176/255.255.255.248
 24.4575 +68.72.41.216/255.255.255.248
 24.4576 +68.72.183.152/255.255.255.248
 24.4577 +68.72.195.248/255.255.255.248
 24.4578 +68.72.202.112/255.255.255.248
 24.4579 +68.72.250.64/255.255.255.224
 24.4580 +68.73.129.48/255.255.255.248
 24.4581 +68.73.234.56/255.255.255.248
 24.4582 +68.73.236.16/255.255.255.248
 24.4583 +68.73.247.24/255.255.255.248
 24.4584 +68.73.248.232/255.255.255.248
 24.4585 +68.73.255.176/255.255.255.248
 24.4586 +68.74.35.208/255.255.255.248
 24.4587 +68.74.86.192/255.255.255.224
 24.4588 +68.74.90.40/255.255.255.248
 24.4589 +68.74.91.152/255.255.255.248
 24.4590 +68.74.174.96/255.255.255.248
 24.4591 +68.74.211.224/255.255.255.248
 24.4592 +68.74.231.80/255.255.255.248
 24.4593 +68.74.248.240/255.255.255.248
 24.4594 +68.74.251.64/255.255.255.248
 24.4595 +68.75.86.88/255.255.255.248
 24.4596 +68.75.146.152/255.255.255.248
 24.4597 +68.75.208.120/255.255.255.248
 24.4598 +68.75.208.208/255.255.255.248
 24.4599 +68.76.35.176/255.255.255.248
 24.4600 +68.76.35.192/255.255.255.248
 24.4601 +68.76.69.0/255.255.255.248
 24.4602 +68.76.79.144/255.255.255.248
 24.4603 +68.76.90.160/255.255.255.240
 24.4604 +68.76.193.128/255.255.255.248
 24.4605 +68.76.251.96/255.255.255.248
 24.4606 +68.77.50.24/255.255.255.248
 24.4607 +68.77.191.128/255.255.255.248
 24.4608 +68.79.73.96/255.255.255.248
 24.4609 +68.79.74.224/255.255.255.248
 24.4610 +68.79.218.144/255.255.255.248
 24.4611 +68.79.219.96/255.255.255.248
 24.4612 +68.79.252.136/255.255.255.248
 24.4613 +68.88.25.128/255.255.255.248
 24.4614 +68.88.116.184/255.255.255.248
 24.4615 +68.88.116.200/255.255.255.248
 24.4616 +68.88.216.80/255.255.255.248
 24.4617 +68.89.12.16/255.255.255.248
 24.4618 +68.89.163.160/255.255.255.248
 24.4619 +68.90.154.192/255.255.255.248
 24.4620 +68.90.176.24/255.255.255.248
 24.4621 +68.91.248.112/255.255.255.248
 24.4622 +68.92.96.16/255.255.255.248
 24.4623 +68.92.134.16/255.255.255.248
 24.4624 +68.92.228.0/255.255.255.248
 24.4625 +68.92.228.40/255.255.255.248
 24.4626 +68.93.68.184/255.255.255.248
 24.4627 +68.94.128.192/255.255.255.248
 24.4628 +68.118.31.0/255.255.255.192
 24.4629 +68.120.58.232/255.255.255.248
 24.4630 +68.120.79.64/255.255.255.248
 24.4631 +68.120.93.104/255.255.255.248
 24.4632 +68.120.105.128/255.255.255.128
 24.4633 +68.120.174.240/255.255.255.248
 24.4634 +68.120.176.176/255.255.255.248
 24.4635 +68.120.222.8/255.255.255.248
 24.4636 +68.120.233.112/255.255.255.248
 24.4637 +68.121.30.200/255.255.255.248
 24.4638 +68.121.82.144/255.255.255.248
 24.4639 +68.121.99.0/255.255.255.248
 24.4640 +68.121.105.56/255.255.255.248
 24.4641 +68.121.107.128/255.255.255.248
 24.4642 +68.121.125.8/255.255.255.248
 24.4643 +68.121.125.232/255.255.255.248
 24.4644 +68.121.143.88/255.255.255.248
 24.4645 +68.121.143.168/255.255.255.248
 24.4646 +68.121.172.88/255.255.255.248
 24.4647 +68.121.186.176/255.255.255.248
 24.4648 +68.121.252.56/255.255.255.248
 24.4649 +68.122.30.120/255.255.255.248
 24.4650 +68.122.36.208/255.255.255.248
 24.4651 +68.122.93.216/255.255.255.248
 24.4652 +68.122.99.64/255.255.255.248
 24.4653 +68.122.215.24/255.255.255.248
 24.4654 +68.122.234.232/255.255.255.248
 24.4655 +68.122.235.16/255.255.255.248
 24.4656 +68.122.244.0/255.255.255.248
 24.4657 +68.122.247.144/255.255.255.248
 24.4658 +68.123.42.208/255.255.255.248
 24.4659 +68.123.42.240/255.255.255.248
 24.4660 +68.123.79.48/255.255.255.248
 24.4661 +68.123.79.64/255.255.255.224
 24.4662 +68.123.163.184/255.255.255.248
 24.4663 +68.123.201.64/255.255.255.248
 24.4664 +68.123.201.200/255.255.255.248
 24.4665 +68.124.141.200/255.255.255.248
 24.4666 +68.124.147.128/255.255.255.248
 24.4667 +68.124.158.176/255.255.255.248
 24.4668 +68.124.170.72/255.255.255.248
 24.4669 +68.124.174.120/255.255.255.248
 24.4670 +68.124.174.240/255.255.255.248
 24.4671 +68.124.208.104/255.255.255.248
 24.4672 +68.124.226.80/255.255.255.248
 24.4673 +68.125.44.80/255.255.255.248
 24.4674 +68.125.44.152/255.255.255.216
 24.4675 +68.125.45.112/255.255.255.240
 24.4676 +68.125.91.88/255.255.255.248
 24.4677 +68.125.178.16/255.255.255.248
 24.4678 +68.125.192.208/255.255.255.248
 24.4679 +68.126.245.120/255.255.255.248
 24.4680 +68.126.246.184/255.255.255.248
 24.4681 +68.126.247.248/255.255.255.248
 24.4682 +68.127.41.200/255.255.255.248
 24.4683 +68.127.141.48/255.255.255.248
 24.4684 +68.127.218.128/255.255.255.248
 24.4685 +68.161.255.160/255.255.255.224
 24.4686 +68.163.75.0/255.255.255.0
 24.4687 +68.163.88.64/255.255.255.224
 24.4688 +68.163.90.0/255.255.255.0
 24.4689 +68.167.223.144/255.255.255.240
 24.4690 +68.248.100.120/255.255.255.248
 24.4691 +68.248.174.168/255.255.255.248
 24.4692 +68.249.22.184/255.255.255.248
 24.4693 +68.249.53.64/255.255.255.248
 24.4694 +68.249.78.216/255.255.255.248
 24.4695 +68.249.78.224/255.255.255.248
 24.4696 +68.249.130.56/255.255.255.248
 24.4697 +68.249.134.64/255.255.255.248
 24.4698 +68.249.146.56/255.255.255.248
 24.4699 +68.249.222.96/255.255.255.248
 24.4700 +68.249.249.160/255.255.255.248
 24.4701 +68.250.10.232/255.255.255.248
 24.4702 +68.250.50.16/255.255.255.248
 24.4703 +68.250.51.216/255.255.255.248
 24.4704 +68.250.94.96/255.255.255.248
 24.4705 +68.250.130.128/255.255.255.240
 24.4706 +68.252.146.240/255.255.255.248
 24.4707 +68.252.203.160/255.255.255.248
 24.4708 +68.254.4.152/255.255.255.248
 24.4709 +68.255.180.168/255.255.255.248
 24.4710 +68.255.213.224/255.255.255.248
 24.4711 +68.255.222.72/255.255.255.248
 24.4712 +69.0.76.120/255.255.255.248
 24.4713 +69.0.88.16/255.255.255.248
 24.4714 +69.0.101.64/255.255.255.248
 24.4715 +69.0.109.128/255.255.255.248
 24.4716 +69.0.114.48/255.255.255.248
 24.4717 +69.1.192.0/255.255.224.0
 24.4718 +69.2.35.0/255.255.255.0
 24.4719 +69.2.228.24/255.255.255.248
 24.4720 +69.7.166.128/255.255.255.192
 24.4721 +69.7.202.72/255.255.255.248
 24.4722 +69.8.156.192/255.255.255.192
 24.4723 +69.15.64.169/255.255.255.249
 24.4724 +69.20.12.136/255.255.255.248
 24.4725 +69.20.18.104/255.255.255.248
 24.4726 +69.20.18.112/255.255.255.248
 24.4727 +69.20.111.32/255.255.255.248
 24.4728 +69.22.160.0/255.255.255.0
 24.4729 +69.25.16.0/255.255.248.0
 24.4730 +69.25.34.64/255.255.255.192
 24.4731 +69.25.35.0/255.255.255.224
 24.4732 +69.26.160.0/255.255.224.0
 24.4733 +69.27.13.104/255.255.255.248
 24.4734 +69.27.15.96/255.255.255.240
 24.4735 +69.27.242.64/255.255.255.224
 24.4736 +69.36.32.0/255.255.240.0
 24.4737 +69.37.46.8/255.255.255.248
 24.4738 +69.37.46.152/255.255.255.248
 24.4739 +69.37.46.200/255.255.255.248
 24.4740 +69.42.64.0/255.255.224.0
 24.4741 +69.44.123.32/255.255.255.224
 24.4742 +69.50.137.0/255.255.254.0
 24.4743 +69.54.160.0/255.255.224.0
 24.4744 +69.56.42.144/255.255.255.248
 24.4745 +69.56.42.152/255.255.255.248
 24.4746 +69.56.42.160/255.255.255.248
 24.4747 +69.56.42.168/255.255.255.248
 24.4748 +69.59.128.0/255.255.192.0
 24.4749 +69.63.162.33/255.255.255.224
 24.4750 +69.67.32.144/255.255.255.240
 24.4751 +69.104.5.72/255.255.255.248
 24.4752 +69.104.27.144/255.255.255.248
 24.4753 +69.104.27.208/255.255.255.248
 24.4754 +69.104.29.216/255.255.255.248
 24.4755 +69.104.29.224/255.255.255.224
 24.4756 +69.104.155.144/255.255.255.248
 24.4757 +69.104.209.56/255.255.255.248
 24.4758 +69.105.160.160/255.255.255.248
 24.4759 +69.105.181.56/255.255.255.248
 24.4760 +69.105.209.192/255.255.255.248
 24.4761 +69.105.210.80/255.255.255.248
 24.4762 +69.105.228.48/255.255.255.248
 24.4763 +69.106.172.8/255.255.255.248
 24.4764 +69.106.192.216/255.255.255.248
 24.4765 +69.107.255.248/255.255.255.248
 24.4766 +69.108.214.216/255.255.255.248
 24.4767 +69.110.85.32/255.255.255.248
 24.4768 +69.110.86.112/255.255.255.248
 24.4769 +69.111.23.184/255.255.255.248
 24.4770 +69.111.46.88/255.255.255.248
 24.4771 +69.111.141.192/255.255.255.248
 24.4772 +69.111.172.40/255.255.255.248
 24.4773 +69.111.239.120/255.255.255.248
 24.4774 +69.150.104.72/255.255.255.248
 24.4775 +69.153.161.16/255.255.255.240
 24.4776 +69.208.98.88/255.255.255.248
 24.4777 +69.210.170.48/255.255.255.248
 24.4778 +69.210.170.152/255.255.255.248
 24.4779 +69.210.170.168/255.255.255.248
 24.4780 +69.210.171.32/255.255.255.248
 24.4781 +69.210.227.96/255.255.255.240
 24.4782 +69.211.47.24/255.255.255.248
 24.4783 +69.212.253.144/255.255.255.248
 24.4784 +69.224.53.104/255.255.255.240
 24.4785 +69.224.53.128/255.255.255.232
 24.4786 +69.224.61.40/255.255.255.248
 24.4787 +69.224.63.8/255.255.255.248
 24.4788 +69.224.84.128/255.255.255.224
 24.4789 +69.224.109.152/255.255.255.248
 24.4790 +69.224.124.176/255.255.255.248
 24.4791 +69.224.129.64/255.255.255.248
 24.4792 +69.224.176.72/255.255.255.248
 24.4793 +69.224.176.216/255.255.255.248
 24.4794 +69.224.208.128/255.255.255.248
 24.4795 +69.224.215.32/255.255.255.248
 24.4796 +69.224.253.144/255.255.255.248
 24.4797 +69.225.152.0/255.255.255.248
 24.4798 +69.225.170.112/255.255.255.248
 24.4799 +69.226.0.24/255.255.255.248
 24.4800 +69.226.49.24/255.255.255.232
 24.4801 +69.226.51.144/255.255.255.248
 24.4802 +69.226.153.0/255.255.255.240
 24.4803 +69.226.164.80/255.255.255.248
 24.4804 +69.227.11.88/255.255.255.248
 24.4805 +69.227.180.104/255.255.255.248
 24.4806 +69.227.181.112/255.255.255.248
 24.4807 +69.232.19.104/255.255.255.248
 24.4808 +69.232.22.16/255.255.255.248
 24.4809 +69.232.22.40/255.255.255.248
 24.4810 +69.232.22.56/255.255.255.248
 24.4811 +69.232.122.144/255.255.255.248
 24.4812 +69.232.164.200/255.255.255.248
 24.4813 +69.232.176.160/255.255.255.248
 24.4814 +69.232.176.240/255.255.255.248
 24.4815 +69.232.177.168/255.255.255.248
 24.4816 +69.232.177.184/255.255.255.248
 24.4817 +69.233.17.240/255.255.255.248
 24.4818 +69.233.28.64/255.255.255.248
 24.4819 +70.241.165.216/255.255.255.248
 24.4820 +80.5.89.64/255.255.255.224
 24.4821 +80.6.88.248/255.255.255.248
 24.4822 +80.6.91.48/255.255.255.248
 24.4823 +80.15.240.152/255.255.255.248
 24.4824 +80.16.24.64/255.255.255.236
 24.4825 +80.16.41.192/255.255.255.240
 24.4826 +80.16.45.64/255.255.255.240
 24.4827 +80.16.58.112/255.255.255.240
 24.4828 +80.16.80.176/255.255.255.248
 24.4829 +80.16.147.160/255.255.255.240
 24.4830 +80.16.152.72/255.255.255.248
 24.4831 +80.16.161.152/255.255.255.248
 24.4832 +80.16.164.112/255.255.255.248
 24.4833 +80.16.172.32/255.255.255.240
 24.4834 +80.16.180.136/255.255.255.248
 24.4835 +80.16.219.144/255.255.255.244
 24.4836 +80.16.228.40/255.255.255.248
 24.4837 +80.16.233.176/255.255.255.240
 24.4838 +80.16.234.144/255.255.255.244
 24.4839 +80.16.239.184/255.255.255.248
 24.4840 +80.16.243.32/255.255.255.248
 24.4841 +80.17.12.16/255.255.255.240
 24.4842 +80.17.17.104/255.255.255.248
 24.4843 +80.17.32.80/255.255.255.240
 24.4844 +80.17.34.132/255.255.255.244
 24.4845 +80.17.49.40/255.255.255.248
 24.4846 +80.17.80.64/255.255.255.248
 24.4847 +80.17.157.40/255.255.255.248
 24.4848 +80.17.183.32/255.255.255.248
 24.4849 +80.17.231.176/255.255.255.248
 24.4850 +80.17.233.96/255.255.255.248
 24.4851 +80.18.20.112/255.255.255.248
 24.4852 +80.18.20.232/255.255.255.248
 24.4853 +80.18.21.152/255.255.255.248
 24.4854 +80.18.22.160/255.255.255.248
 24.4855 +80.18.28.152/255.255.255.248
 24.4856 +80.18.55.64/255.255.255.248
 24.4857 +80.18.55.208/255.255.255.240
 24.4858 +80.18.73.32/255.255.255.240
 24.4859 +80.18.74.96/255.255.255.248
 24.4860 +80.18.83.136/255.255.255.248
 24.4861 +80.18.93.16/255.255.255.248
 24.4862 +80.18.190.232/255.255.255.248
 24.4863 +80.19.25.112/255.255.255.240
 24.4864 +80.19.49.32/255.255.255.240
 24.4865 +80.19.57.128/255.255.255.240
 24.4866 +80.19.60.16/255.255.255.240
 24.4867 +80.19.80.8/255.255.255.248
 24.4868 +80.19.86.144/255.255.255.248
 24.4869 +80.19.101.40/255.255.255.248
 24.4870 +80.19.109.156/255.255.255.244
 24.4871 +80.19.121.112/255.255.255.248
 24.4872 +80.19.172.224/255.255.255.248
 24.4873 +80.19.180.72/255.255.255.248
 24.4874 +80.19.208.0/255.255.255.0
 24.4875 +80.20.84.56/255.255.255.248
 24.4876 +80.20.101.160/255.255.255.248
 24.4877 +80.20.154.48/255.255.255.240
 24.4878 +80.20.154.120/255.255.255.248
 24.4879 +80.20.212.216/255.255.255.248
 24.4880 +80.21.34.232/255.255.255.248
 24.4881 +80.21.37.64/255.255.255.248
 24.4882 +80.21.38.40/255.255.255.248
 24.4883 +80.21.39.176/255.255.255.248
 24.4884 +80.21.47.176/255.255.255.248
 24.4885 +80.21.48.240/255.255.255.248
 24.4886 +80.21.52.56/255.255.255.248
 24.4887 +80.21.81.224/255.255.255.248
 24.4888 +80.21.100.64/255.255.255.248
 24.4889 +80.21.105.216/255.255.255.248
 24.4890 +80.21.144.232/255.255.255.248
 24.4891 +80.21.146.120/255.255.255.248
 24.4892 +80.21.153.112/255.255.255.248
 24.4893 +80.21.203.0/255.255.255.0
 24.4894 +80.21.206.16/255.255.255.248
 24.4895 +80.21.208.96/255.255.255.248
 24.4896 +80.21.214.240/255.255.255.248
 24.4897 +80.21.243.88/255.255.255.248
 24.4898 +80.22.48.192/255.255.255.248
 24.4899 +80.22.49.232/255.255.255.248
 24.4900 +80.22.97.64/255.255.255.248
 24.4901 +80.22.186.136/255.255.255.248
 24.4902 +80.22.231.8/255.255.255.248
 24.4903 +80.22.231.16/255.255.255.240
 24.4904 +80.22.237.64/255.255.255.240
 24.4905 +80.22.237.80/255.255.255.240
 24.4906 +80.23.45.48/255.255.255.240
 24.4907 +80.23.45.72/255.255.255.248
 24.4908 +80.23.57.200/255.255.255.248
 24.4909 +80.23.88.32/255.255.255.224
 24.4910 +80.23.92.112/255.255.255.240
 24.4911 +80.23.158.72/255.255.255.248
 24.4912 +80.23.190.168/255.255.255.248
 24.4913 +80.23.204.8/255.255.255.232
 24.4914 +80.23.219.120/255.255.255.248
 24.4915 +80.23.237.48/255.255.255.248
 24.4916 +80.23.237.64/255.255.255.248
 24.4917 +80.23.237.120/255.255.255.248
 24.4918 +80.23.240.168/255.255.255.248
 24.4919 +80.23.241.240/255.255.255.248
 24.4920 +80.23.242.0/255.255.255.248
 24.4921 +80.23.243.80/255.255.255.248
 24.4922 +80.48.177.0/255.255.255.0
 24.4923 +80.53.164.184/255.255.255.248
 24.4924 +80.53.196.104/255.255.255.248
 24.4925 +80.55.24.224/255.255.255.248
 24.4926 +80.55.64.24/255.255.255.248
 24.4927 +80.55.84.224/255.255.255.248
 24.4928 +80.55.92.216/255.255.255.248
 24.4929 +80.55.134.88/255.255.255.248
 24.4930 +80.55.162.72/255.255.255.248
 24.4931 +80.55.168.24/255.255.255.248
 24.4932 +80.55.168.32/255.255.255.248
 24.4933 +80.55.255.104/255.255.255.248
 24.4934 +80.55.255.136/255.255.255.248
 24.4935 +80.55.255.240/255.255.255.248
 24.4936 +80.62.237.184/255.255.255.248
 24.4937 +80.63.27.48/255.255.255.248
 24.4938 +80.63.60.32/255.255.255.248
 24.4939 +80.64.195.224/255.255.255.240
 24.4940 +80.64.196.72/255.255.255.248
 24.4941 +80.65.107.224/255.255.255.248
 24.4942 +80.65.230.8/255.255.255.248
 24.4943 +80.65.231.0/255.255.255.128
 24.4944 +80.66.6.208/255.255.255.248
 24.4945 +80.69.4.0/255.255.255.192
 24.4946 +80.69.207.0/255.255.255.192
 24.4947 +80.69.207.64/255.255.255.224
 24.4948 +80.69.225.0/255.255.255.0
 24.4949 +80.71.2.0/255.255.255.248
 24.4950 +80.71.2.32/255.255.255.248
 24.4951 +80.71.3.160/255.255.255.224
 24.4952 +80.73.203.64/255.255.255.248
 24.4953 +80.73.224.0/255.255.253.0
 24.4954 +80.75.9.32/255.255.255.224
 24.4955 +80.75.64.128/255.255.255.224
 24.4956 +80.77.67.96/255.255.255.248
 24.4957 +80.77.98.24/255.255.255.248
 24.4958 +80.77.98.80/255.255.255.240
 24.4959 +80.77.106.0/255.255.255.240
 24.4960 +80.80.2.120/255.255.255.248
 24.4961 +80.80.2.160/255.255.255.240
 24.4962 +80.80.3.80/255.255.255.248
 24.4963 +80.80.11.200/255.255.255.248
 24.4964 +80.80.16.96/255.255.255.224
 24.4965 +80.80.19.128/255.255.254.128
 24.4966 +80.80.165.160/255.255.255.240
 24.4967 +80.81.112.0/255.255.255.0
 24.4968 +80.81.115.80/255.255.255.248
 24.4969 +80.82.42.32/255.255.255.248
 24.4970 +80.86.66.144/255.255.255.240
 24.4971 +80.86.114.64/255.255.255.192
 24.4972 +80.88.32.0/255.255.240.0
 24.4973 +80.89.65.208/255.255.255.240
 24.4974 +80.89.65.224/255.255.255.240
 24.4975 +80.89.66.0/255.255.255.128
 24.4976 +80.89.129.64/255.255.255.240
 24.4977 +80.93.2.64/255.255.255.224
 24.4978 +80.93.10.0/255.255.255.248
 24.4979 +80.93.10.96/255.255.255.248
 24.4980 +80.95.113.120/255.255.255.248
 24.4981 +80.96.72.0/255.255.255.240
 24.4982 +80.96.186.0/255.255.255.0
 24.4983 +80.97.150.192/255.255.255.208
 24.4984 +80.105.84.192/255.255.255.248
 24.4985 +80.105.219.24/255.255.255.244
 24.4986 +80.105.228.108/255.255.255.244
 24.4987 +80.120.141.192/255.255.255.248
 24.4988 +80.120.154.64/255.255.255.248
 24.4989 +80.120.170.48/255.255.255.240
 24.4990 +80.121.145.96/255.255.255.224
 24.4991 +80.121.221.92/255.255.255.248
 24.4992 +80.121.228.200/255.255.255.248
 24.4993 +80.121.242.136/255.255.255.248
 24.4994 +80.121.244.144/255.255.255.248
 24.4995 +80.122.0.12/255.255.255.248
 24.4996 +80.122.5.136/255.255.255.248
 24.4997 +80.127.162.248/255.255.255.248
 24.4998 +80.127.175.48/255.255.255.240
 24.4999 +80.127.186.32/255.255.255.240
 24.5000 +80.127.192.216/255.255.255.248
 24.5001 +80.127.199.24/255.255.255.248
 24.5002 +80.127.208.192/255.255.255.240
 24.5003 +80.146.171.96/255.255.255.248
 24.5004 +80.146.171.112/255.255.255.240
 24.5005 +80.146.176.112/255.255.255.248
 24.5006 +80.146.179.32/255.255.255.248
 24.5007 +80.146.185.144/255.255.255.248
 24.5008 +80.146.186.80/255.255.255.248
 24.5009 +80.146.188.24/255.255.255.248
 24.5010 +80.146.192.8/255.255.255.248
 24.5011 +80.146.197.240/255.255.255.248
 24.5012 +80.146.208.216/255.255.255.248
 24.5013 +80.146.209.80/255.255.255.248
 24.5014 +80.146.210.16/255.255.255.248
 24.5015 +80.146.215.16/255.255.255.248
 24.5016 +80.146.216.192/255.255.255.248
 24.5017 +80.146.216.224/255.255.255.248
 24.5018 +80.146.223.200/255.255.255.248
 24.5019 +80.146.243.72/255.255.255.248
 24.5020 +80.146.243.240/255.255.255.248
 24.5021 +80.146.248.208/255.255.255.248
 24.5022 +80.148.8.40/255.255.255.248
 24.5023 +80.148.13.152/255.255.255.248
 24.5024 +80.148.13.192/255.255.255.224
 24.5025 +80.148.34.224/255.255.255.248
 24.5026 +80.152.7.184/255.255.255.248
 24.5027 +80.154.0.224/255.255.255.248
 24.5028 +80.154.3.128/255.255.255.224
 24.5029 +80.154.12.128/255.255.255.248
 24.5030 +80.156.1.232/255.255.255.248
 24.5031 +80.156.4.0/255.255.253.192
 24.5032 +80.156.11.0/255.255.255.248
 24.5033 +80.156.11.40/255.255.255.248
 24.5034 +80.160.64.192/255.255.255.248
 24.5035 +80.160.69.96/255.255.255.248
 24.5036 +80.161.239.16/255.255.255.248
 24.5037 +80.164.142.232/255.255.255.248
 24.5038 +80.165.80.144/255.255.255.248
 24.5039 +80.168.29.208/255.255.255.240
 24.5040 +80.168.34.32/255.255.255.240
 24.5041 +80.168.54.0/255.255.255.224
 24.5042 +80.168.66.56/255.255.255.248
 24.5043 +80.168.137.168/255.255.255.248
 24.5044 +80.168.150.72/255.255.255.248
 24.5045 +80.168.150.96/255.255.255.248
 24.5046 +80.168.151.120/255.255.255.248
 24.5047 +80.168.151.248/255.255.255.248
 24.5048 +80.168.152.0/255.255.255.248
 24.5049 +80.168.155.136/255.255.255.248
 24.5050 +80.168.157.224/255.255.255.248
 24.5051 +80.168.164.0/255.255.254.0
 24.5052 +80.168.168.224/255.255.255.248
 24.5053 +80.168.177.152/255.255.255.248
 24.5054 +80.168.217.16/255.255.255.248
 24.5055 +80.168.220.248/255.255.255.248
 24.5056 +80.168.221.96/255.255.255.248
 24.5057 +80.176.193.104/255.255.255.248
 24.5058 +80.176.202.192/255.255.255.240
 24.5059 +80.176.212.96/255.255.255.248
 24.5060 +80.176.214.16/255.255.255.240
 24.5061 +80.176.247.96/255.255.255.248
 24.5062 +80.177.41.16/255.255.255.248
 24.5063 +80.177.46.208/255.255.255.248
 24.5064 +80.177.54.144/255.255.255.248
 24.5065 +80.177.56.176/255.255.255.240
 24.5066 +80.177.57.232/255.255.255.248
 24.5067 +80.177.60.152/255.255.255.248
 24.5068 +80.177.62.64/255.255.255.248
 24.5069 +80.177.64.24/255.255.255.248
 24.5070 +80.177.76.176/255.255.255.248
 24.5071 +80.177.85.32/255.255.255.248
 24.5072 +80.177.87.40/255.255.255.248
 24.5073 +80.177.87.200/255.255.255.248
 24.5074 +80.177.93.208/255.255.255.240
 24.5075 +80.177.132.32/255.255.255.248
 24.5076 +80.177.139.72/255.255.255.248
 24.5077 +80.177.143.224/255.255.255.248
 24.5078 +80.177.148.56/255.255.255.248
 24.5079 +80.177.180.232/255.255.255.248
 24.5080 +80.177.188.176/255.255.255.240
 24.5081 +80.177.193.128/255.255.255.248
 24.5082 +80.177.198.128/255.255.255.240
 24.5083 +80.177.232.152/255.255.255.248
 24.5084 +80.177.248.176/255.255.255.240
 24.5085 +80.191.69.0/255.255.255.0
 24.5086 +80.191.78.0/255.255.254.0
 24.5087 +80.191.131.0/255.255.255.128
 24.5088 +80.196.172.200/255.255.255.248
 24.5089 +80.196.183.184/255.255.255.248
 24.5090 +80.198.113.96/255.255.255.248
 24.5091 +80.199.79.168/255.255.255.248
 24.5092 +80.199.248.80/255.255.255.240
 24.5093 +80.204.41.48/255.255.255.240
 24.5094 +80.204.68.56/255.255.255.248
 24.5095 +80.204.74.184/255.255.255.248
 24.5096 +80.204.77.200/255.255.255.248
 24.5097 +80.204.77.216/255.255.255.240
 24.5098 +80.204.126.120/255.255.255.248
 24.5099 +80.204.138.248/255.255.255.248
 24.5100 +80.204.153.72/255.255.255.248
 24.5101 +80.204.153.96/255.255.255.240
 24.5102 +80.204.184.168/255.255.255.248
 24.5103 +80.204.228.0/255.255.255.248
 24.5104 +80.204.232.24/255.255.255.248
 24.5105 +80.205.46.0/255.255.255.240
 24.5106 +80.205.47.48/255.255.255.248
 24.5107 +80.205.60.88/255.255.255.248
 24.5108 +80.205.61.160/255.255.255.240
 24.5109 +80.205.94.72/255.255.255.248
 24.5110 +80.205.94.112/255.255.255.240
 24.5111 +80.205.145.168/255.255.255.248
 24.5112 +80.205.150.224/255.255.255.248
 24.5113 +80.205.165.200/255.255.255.248
 24.5114 +80.205.174.224/255.255.255.248
 24.5115 +80.205.204.0/255.255.255.0
 24.5116 +80.205.233.96/255.255.255.240
 24.5117 +80.205.249.168/255.255.255.248
 24.5118 +80.206.62.0/255.255.255.248
 24.5119 +80.206.68.104/255.255.255.248
 24.5120 +80.206.88.192/255.255.255.248
 24.5121 +80.206.112.72/255.255.255.248
 24.5122 +80.206.115.80/255.255.255.248
 24.5123 +80.206.186.32/255.255.255.248
 24.5124 +80.206.214.152/255.255.255.248
 24.5125 +80.206.230.128/255.255.255.240
 24.5126 +80.207.16.192/255.255.255.240
 24.5127 +80.207.19.80/255.255.255.248
 24.5128 +80.207.28.152/255.255.255.248
 24.5129 +80.207.72.144/255.255.255.248
 24.5130 +80.207.83.112/255.255.255.240
 24.5131 +80.207.130.112/255.255.255.248
 24.5132 +80.207.144.88/255.255.255.248
 24.5133 +80.207.198.24/255.255.255.248
 24.5134 +80.207.201.16/255.255.255.248
 24.5135 +80.207.245.104/255.255.255.248
 24.5136 +80.207.246.80/255.255.255.248
 24.5137 +80.227.131.120/255.255.255.248
 24.5138 +80.227.131.128/255.255.255.248
 24.5139 +80.227.131.216/255.255.255.248
 24.5140 +80.227.146.8/255.255.255.248
 24.5141 +80.232.17.64/255.255.255.192
 24.5142 +80.232.140.224/255.255.255.240
 24.5143 +80.234.135.72/255.255.255.248
 24.5144 +80.237.230.32/255.255.255.224
 24.5145 +80.237.233.128/255.255.255.224
 24.5146 +80.237.254.160/255.255.255.224
 24.5147 +80.238.213.88/255.255.255.248
 24.5148 +80.239.13.136/255.255.255.248
 24.5149 +80.239.23.64/255.255.255.224
 24.5150 +80.240.227.160/255.255.255.248
 24.5151 +80.240.238.64/255.255.255.240
 24.5152 +80.246.71.32/255.255.255.240
 24.5153 +80.246.71.96/255.255.255.224
 24.5154 +80.246.96.0/255.255.240.0
 24.5155 +80.249.238.0/255.255.255.248
 24.5156 +80.250.173.64/255.255.255.224
 24.5157 +80.250.175.0/255.255.255.0
 24.5158 +80.250.183.0/255.255.255.0
 24.5159 +80.251.161.112/255.255.255.248
 24.5160 +80.251.161.208/255.255.255.248
 24.5161 +80.254.109.40/255.255.255.248
 24.5162 +80.254.109.56/255.255.255.248
 24.5163 +80.254.109.72/255.255.255.248
 24.5164 +80.254.178.120/255.255.255.248
 24.5165 +81.0.64.160/255.255.255.248
 24.5166 +81.0.202.0/255.255.255.0
 24.5167 +81.0.225.192/255.255.255.224
 24.5168 +81.0.237.240/255.255.255.248
 24.5169 +81.2.12.160/255.255.255.224
 24.5170 +81.2.12.192/255.255.255.224
 24.5171 +81.2.19.32/255.255.255.224
 24.5172 +81.2.78.192/255.255.255.240
 24.5173 +81.2.91.176/255.255.255.240
 24.5174 +81.2.95.0/255.255.255.248
 24.5175 +81.2.95.48/255.255.255.240
 24.5176 +81.2.190.0/255.255.255.224
 24.5177 +81.3.98.240/255.255.255.248
 24.5178 +81.4.78.0/255.255.255.0
 24.5179 +81.6.196.64/255.255.255.240
 24.5180 +81.6.198.224/255.255.255.248
 24.5181 +81.6.199.0/255.255.255.248
 24.5182 +81.8.128.224/255.255.255.224
 24.5183 +81.12.220.72/255.255.255.248
 24.5184 +81.15.38.128/255.255.255.224
 24.5185 +81.15.88.0/255.255.253.0
 24.5186 +81.15.190.112/255.255.255.240
 24.5187 +81.16.38.0/255.255.255.224
 24.5188 +81.18.73.208/255.255.255.248
 24.5189 +81.19.225.112/255.255.255.240
 24.5190 +81.19.228.144/255.255.255.240
 24.5191 +81.21.231.0/255.255.255.0
 24.5192 +81.26.0.0/255.255.255.0
 24.5193 +81.27.133.128/255.255.255.128
 24.5194 +81.30.106.64/255.255.255.248
 24.5195 +81.30.227.160/255.255.255.248
 24.5196 +81.30.227.168/255.255.255.248
 24.5197 +81.49.51.80/255.255.255.80
 24.5198 +81.58.20.224/255.255.255.248
 24.5199 +81.58.30.72/255.255.255.248
 24.5200 +81.58.30.104/255.255.255.248
 24.5201 +81.58.31.216/255.255.255.248
 24.5202 +81.72.71.0/255.255.255.0
 24.5203 +81.72.163.232/255.255.255.248
 24.5204 +81.72.191.16/255.255.255.248
 24.5205 +81.72.241.64/255.255.255.248
 24.5206 +81.73.28.216/255.255.255.248
 24.5207 +81.73.32.120/255.255.255.244
 24.5208 +81.73.91.8/255.255.255.248
 24.5209 +81.74.186.176/255.255.255.248
 24.5210 +81.75.98.208/255.255.255.248
 24.5211 +81.76.132.1/255.255.255.1
 24.5212 +81.80.18.192/255.255.255.248
 24.5213 +81.80.61.240/255.255.255.240
 24.5214 +81.80.80.128/255.255.255.248
 24.5215 +81.80.81.0/255.255.255.248
 24.5216 +81.80.88.192/255.255.255.192
 24.5217 +81.80.93.184/255.255.255.248
 24.5218 +81.80.104.128/255.255.255.248
 24.5219 +81.80.134.176/255.255.255.240
 24.5220 +81.80.147.64/255.255.255.224
 24.5221 +81.80.147.192/255.255.255.240
 24.5222 +81.80.156.128/255.255.255.248
 24.5223 +81.80.163.104/255.255.255.248
 24.5224 +81.80.172.232/255.255.255.240
 24.5225 +81.80.182.176/255.255.255.248
 24.5226 +81.80.201.24/255.255.255.248
 24.5227 +81.80.206.240/255.255.255.248
 24.5228 +81.80.212.176/255.255.255.232
 24.5229 +81.80.212.200/255.255.255.232
 24.5230 +81.80.212.224/255.255.255.232
 24.5231 +81.80.212.248/255.255.255.248
 24.5232 +81.80.213.128/255.255.255.240
 24.5233 +81.80.213.192/255.255.255.240
 24.5234 +81.80.228.128/255.255.255.128
 24.5235 +81.80.236.32/255.255.255.240
 24.5236 +81.86.10.40/255.255.255.248
 24.5237 +81.86.12.24/255.255.255.248
 24.5238 +81.86.13.136/255.255.255.248
 24.5239 +81.112.54.0/255.255.255.248
 24.5240 +81.112.73.96/255.255.255.240
 24.5241 +81.112.76.104/255.255.255.248
 24.5242 +81.112.86.96/255.255.255.248
 24.5243 +81.112.189.48/255.255.255.240
 24.5244 +81.112.224.0/255.255.255.248
 24.5245 +81.113.41.136/255.255.255.248
 24.5246 +81.113.50.24/255.255.255.248
 24.5247 +81.113.154.232/255.255.255.248
 24.5248 +81.113.155.16/255.255.255.248
 24.5249 +81.113.163.216/255.255.255.248
 24.5250 +81.113.172.240/255.255.255.248
 24.5251 +81.113.175.192/255.255.255.248
 24.5252 +81.113.190.0/255.255.255.0
 24.5253 +81.113.238.176/255.255.255.248
 24.5254 +81.114.79.96/255.255.255.240
 24.5255 +81.115.32.184/255.255.255.248
 24.5256 +81.115.140.0/255.255.255.248
 24.5257 +81.116.88.40/255.255.255.248
 24.5258 +81.138.99.8/255.255.255.248
 24.5259 +81.144.155.64/255.255.255.240
 24.5260 +81.144.169.128/255.255.255.192
 24.5261 +81.144.189.0/255.255.255.0
 24.5262 +81.144.246.192/255.255.255.192
 24.5263 +81.160.0.0/255.255.128.0
 24.5264 +81.168.3.192/255.255.255.248
 24.5265 +81.168.5.80/255.255.255.248
 24.5266 +81.168.20.64/255.255.255.248
 24.5267 +81.168.21.152/255.255.255.248
 24.5268 +81.178.4.240/255.255.255.248
 24.5269 +81.178.33.80/255.255.255.248
 24.5270 +81.187.37.144/255.255.255.248
 24.5271 +81.187.70.96/255.255.255.240
 24.5272 +81.187.195.64/255.255.255.248
 24.5273 +81.187.203.40/255.255.255.248
 24.5274 +81.187.227.216/255.255.255.248
 24.5275 +81.187.229.192/255.255.255.248
 24.5276 +81.188.20.240/255.255.255.248
 24.5277 +81.192.115.48/255.255.255.240
 24.5278 +81.192.226.136/255.255.255.248
 24.5279 +81.195.184.208/255.255.255.240
 24.5280 +81.196.105.160/255.255.255.224
 24.5281 +81.208.39.136/255.255.255.248
 24.5282 +81.208.56.0/255.255.255.0
 24.5283 +81.210.3.232/255.255.255.248
 24.5284 +81.210.22.112/255.255.255.240
 24.5285 +81.210.38.16/255.255.255.248
 24.5286 +81.223.11.72/255.255.255.248
 24.5287 +81.223.12.208/255.255.255.240
 24.5288 +81.223.14.24/255.255.255.248
 24.5289 +81.223.16.8/255.255.255.248
 24.5290 +81.223.46.128/255.255.255.248
 24.5291 +81.223.48.80/255.255.255.248
 24.5292 +81.223.55.96/255.255.255.248
 24.5293 +81.223.99.0/255.255.255.248
 24.5294 +81.223.115.0/255.255.255.128
 24.5295 +81.223.151.88/255.255.255.248
 24.5296 +81.223.151.176/255.255.255.240
 24.5297 +81.223.157.72/255.255.255.248
 24.5298 +81.223.179.112/255.255.255.248
 24.5299 +81.223.204.48/255.255.255.240
 24.5300 +81.223.212.96/255.255.255.248
 24.5301 +81.223.218.16/255.255.255.248
 24.5302 +81.223.220.40/255.255.255.248
 24.5303 +81.223.231.232/255.255.255.240
 24.5304 +81.255.9.24/255.255.255.248
 24.5305 +81.255.13.80/255.255.255.248
 24.5306 +81.255.16.80/255.255.255.240
 24.5307 +81.255.16.112/255.255.255.240
 24.5308 +81.255.18.96/255.255.255.224
 24.5309 +81.255.19.248/255.255.255.248
 24.5310 +81.255.20.80/255.255.255.240
 24.5311 +81.255.20.96/255.255.255.240
 24.5312 +81.255.22.96/255.255.255.248
 24.5313 +81.255.61.32/255.255.255.248
 24.5314 +81.255.62.96/255.255.255.248
 24.5315 +81.255.73.208/255.255.255.248
 24.5316 +81.255.74.192/255.255.255.240
 24.5317 +81.255.82.192/255.255.255.240
 24.5318 +81.255.86.176/255.255.255.248
 24.5319 +81.255.93.208/255.255.255.248
 24.5320 +81.255.97.152/255.255.255.248
 24.5321 +81.255.101.16/255.255.255.248
 24.5322 +81.255.101.112/255.255.255.248
 24.5323 +81.255.109.192/255.255.255.248
 24.5324 +81.255.112.224/255.255.255.240
 24.5325 +81.255.113.0/255.255.255.248
 24.5326 +81.255.120.192/255.255.255.224
 24.5327 +81.255.123.24/255.255.255.248
 24.5328 +81.255.124.200/255.255.255.248
 24.5329 +81.255.127.248/255.255.255.248
 24.5330 +81.255.128.0/255.255.255.240
 24.5331 +81.255.132.64/255.255.255.248
 24.5332 +81.255.132.88/255.255.255.248
 24.5333 +81.255.132.160/255.255.255.240
 24.5334 +81.255.137.0/255.255.255.0
 24.5335 +81.255.139.248/255.255.255.248
 24.5336 +81.255.140.144/255.255.255.240
 24.5337 +81.255.141.232/255.255.255.248
 24.5338 +81.255.147.112/255.255.255.248
 24.5339 +81.255.158.216/255.255.255.248
 24.5340 +81.255.195.128/255.255.255.248
 24.5341 +81.255.200.128/255.255.255.240
 24.5342 +82.68.28.160/255.255.255.248
 24.5343 +82.68.61.240/255.255.255.248
 24.5344 +82.68.79.232/255.255.255.248
 24.5345 +82.68.118.168/255.255.255.248
 24.5346 +82.68.159.32/255.255.255.248
 24.5347 +82.68.161.112/255.255.255.248
 24.5348 +82.68.162.168/255.255.255.248
 24.5349 +82.68.184.160/255.255.255.160
 24.5350 +82.68.185.8/255.255.255.160
 24.5351 +82.68.185.104/255.255.255.200
 24.5352 +82.68.199.192/255.255.255.240
 24.5353 +82.68.206.208/255.255.255.248
 24.5354 +82.68.207.152/255.255.255.248
 24.5355 +82.68.212.24/255.255.255.248
 24.5356 +82.68.214.64/255.255.255.248
 24.5357 +82.68.215.192/255.255.255.248
 24.5358 +82.68.220.160/255.255.255.248
 24.5359 +82.68.228.80/255.255.255.248
 24.5360 +82.68.237.16/255.255.255.248
 24.5361 +82.68.238.216/255.255.255.248
 24.5362 +82.70.11.192/255.255.255.248
 24.5363 +82.70.19.184/255.255.255.216
 24.5364 +82.70.22.216/255.255.255.248
 24.5365 +82.70.42.160/255.255.255.248
 24.5366 +82.70.51.176/255.255.255.248
 24.5367 +82.70.62.128/255.255.255.248
 24.5368 +82.70.73.72/255.255.255.248
 24.5369 +82.70.85.40/255.255.255.248
 24.5370 +82.70.86.200/255.255.255.248
 24.5371 +82.70.102.160/255.255.255.248
 24.5372 +82.70.111.0/255.255.255.248
 24.5373 +82.70.123.0/255.255.255.248
 24.5374 +82.70.146.96/255.255.255.248
 24.5375 +82.85.0.0/255.255.255.240
 24.5376 +82.98.209.0/255.255.255.128
 24.5377 +82.100.207.48/255.255.255.248
 24.5378 +82.108.18.16/255.255.255.248
 24.5379 +82.108.160.88/255.255.255.248
 24.5380 +82.108.168.24/255.255.255.248
 24.5381 +82.108.169.128/255.255.255.224
 24.5382 +82.108.169.160/255.255.255.240
 24.5383 +82.108.169.176/255.255.255.240
 24.5384 +82.108.169.216/255.255.255.248
 24.5385 +82.109.142.240/255.255.255.240
 24.5386 +82.109.189.128/255.255.255.128
 24.5387 +82.109.219.64/255.255.255.248
 24.5388 +82.109.219.72/255.255.255.248
 24.5389 +82.110.4.80/255.255.255.248
 24.5390 +82.110.82.160/255.255.255.240
 24.5391 +82.129.137.8/255.255.255.248
 24.5392 +82.133.25.56/255.255.255.248
 24.5393 +82.135.34.128/255.255.255.248
 24.5394 +82.135.36.40/255.255.255.248
 24.5395 +82.135.37.248/255.255.255.248
 24.5396 +82.135.40.200/255.255.255.248
 24.5397 +82.141.192.240/255.255.255.240
 24.5398 +82.144.58.32/255.255.255.248
 24.5399 +82.144.58.64/255.255.255.192
 24.5400 +82.162.35.144/255.255.255.240
 24.5401 +82.185.181.208/255.255.255.248
 24.5402 +82.187.9.136/255.255.255.248
 24.5403 +82.187.30.56/255.255.255.248
 24.5404 +82.187.31.144/255.255.255.248
 24.5405 +82.187.31.232/255.255.255.248
 24.5406 +82.189.41.184/255.255.255.248
 24.5407 +82.189.42.64/255.255.255.248
 24.5408 +82.189.42.216/255.255.249.240
 24.5409 +82.193.6.64/255.255.255.240
 24.5410 +82.212.204.0/255.255.252.0
 24.5411 +82.212.252.0/255.255.255.192
 24.5412 +82.221.28.0/255.255.255.0
 24.5413 +83.64.11.160/255.255.255.248
 24.5414 +83.64.32.144/255.255.255.248
 24.5415 +83.64.59.152/255.255.255.248
 24.5416 +83.64.69.120/255.255.255.248
 24.5417 +83.104.11.32/255.255.255.248
 24.5418 +83.146.1.64/255.255.255.240
 24.5419 +83.146.7.240/255.255.255.240
 24.5420 +83.146.58.216/255.255.255.248
 24.5421 +83.218.70.40/255.255.255.248
 24.5422 +83.228.103.0/255.255.255.0
 24.5423 +83.236.131.216/255.255.255.248
 24.5424 +83.236.155.136/255.255.255.248
 24.5425 +84.233.131.0/255.255.255.192
 24.5426 +84.233.131.64/255.255.255.192
 24.5427 +128.3.0.0/255.255.0.0
 24.5428 +128.11.18.0/255.255.255.0
 24.5429 +128.11.41.22/255.255.255.241
 24.5430 +128.11.42.78/255.255.255.236
 24.5431 +128.11.58.0/255.255.255.248
 24.5432 +128.20.0.0/255.255.0.0
 24.5433 +128.43.0.0/255.255.0.0
 24.5434 +128.51.0.0/255.255.0.0
 24.5435 +128.56.0.0/255.255.0.0
 24.5436 +128.63.0.0/255.255.0.0
 24.5437 +128.66.0.0/255.255.0.0
 24.5438 +128.93.0.0/255.255.0.0
 24.5439 +128.98.0.0/255.255.0.0
 24.5440 +128.127.0.0/255.255.0.0
 24.5441 +128.132.0.0/255.255.0.0
 24.5442 +128.150.0.0/255.255.0.0
 24.5443 +128.173.0.0/255.255.0.0
 24.5444 +128.202.0.0/255.255.0.0
 24.5445 +128.209.0.0/255.255.0.0
 24.5446 +128.215.0.0/255.255.0.0
 24.5447 +128.216.0.0/255.254.0.0
 24.5448 +128.219.0.0/255.255.0.0
 24.5449 +128.236.0.0/255.255.0.0
 24.5450 +128.241.247.0/255.255.255.170
 24.5451 +128.241.247.87/255.255.255.242
 24.5452 +128.241.247.102/255.255.255.120
 24.5453 +128.245.0.0/255.253.0.0
 24.5454 +129.4.0.0/255.255.0.0
 24.5455 +129.6.0.0/255.255.0.0
 24.5456 +129.20.0.0/255.255.0.0
 24.5457 +129.23.0.0/255.255.0.0
 24.5458 +129.28.0.0/255.254.0.0
 24.5459 +129.33.0.0/255.253.0.0
 24.5460 +129.38.0.0/255.251.0.0
 24.5461 +129.44.34.8/255.255.255.248
 24.5462 +129.48.0.0/255.255.0.0
 24.5463 +129.52.0.0/255.255.0.0
 24.5464 +129.53.0.0/255.254.0.0
 24.5465 +129.67.0.0/255.255.0.0
 24.5466 +129.88.0.0/255.255.0.0
 24.5467 +129.102.0.0/255.255.0.0
 24.5468 +129.104.0.0/255.255.0.0
 24.5469 +129.124.0.0/255.255.0.0
 24.5470 +129.126.0.0/255.255.0.0
 24.5471 +129.141.0.0/255.255.0.0
 24.5472 +129.142.30.32/255.255.255.240
 24.5473 +129.142.71.0/255.255.255.128
 24.5474 +129.142.172.176/255.255.255.240
 24.5475 +129.144.0.0/255.239.0.0
 24.5476 +129.175.0.0/255.255.0.0
 24.5477 +129.186.0.0/255.255.0.0
 24.5478 +129.197.0.0/255.255.0.0
 24.5479 +129.199.0.0/255.255.0.0
 24.5480 +129.201.0.0/255.252.0.0
 24.5481 +129.212.0.0/255.255.0.0
 24.5482 +129.222.0.0/255.250.0.0
 24.5483 +129.228.0.0/255.255.0.0
 24.5484 +129.231.0.0/255.255.0.0
 24.5485 +129.238.0.0/255.255.0.0
 24.5486 +129.243.0.0/255.255.0.0
 24.5487 +129.251.0.0/255.255.0.0
 24.5488 +129.254.0.0/255.255.0.0
 24.5489 +130.14.0.0/255.255.0.0
 24.5490 +130.28.0.0/255.255.0.0
 24.5491 +130.35.0.0/255.255.0.0
 24.5492 +130.45.0.0/255.255.0.0
 24.5493 +130.48.0.0/255.255.0.0
 24.5494 +130.55.0.0/255.255.0.0
 24.5495 +130.66.0.0/255.255.0.0
 24.5496 +130.72.0.0/255.254.0.0
 24.5497 +130.77.0.0/255.254.0.0
 24.5498 +130.79.0.0/255.255.0.0
 24.5499 +130.84.0.0/255.255.0.0
 24.5500 +130.90.0.0/255.255.0.0
 24.5501 +130.98.0.0/255.255.0.0
 24.5502 +130.105.0.0/255.254.0.0
 24.5503 +130.116.0.0/255.255.0.0
 24.5504 +130.119.0.0/255.255.0.0
 24.5505 +130.120.0.0/255.255.0.0
 24.5506 +130.124.0.0/255.255.0.0
 24.5507 +130.131.0.0/255.255.0.0
 24.5508 +130.138.0.0/255.246.0.0
 24.5509 +130.155.0.0/255.255.0.0
 24.5510 +130.165.0.0/255.255.0.0
 24.5511 +130.190.0.0/255.255.0.0
 24.5512 +130.196.0.0/255.255.0.0
 24.5513 +130.200.0.0/255.255.0.0
 24.5514 +130.202.0.0/255.255.0.0
 24.5515 +130.227.227.56/255.255.255.248
 24.5516 +130.228.196.8/255.255.255.248
 24.5517 +130.228.219.0/255.255.255.0
 24.5518 +130.242.58.0/255.255.255.0
 24.5519 +130.248.0.0/255.255.0.0
 24.5520 +131.3.0.0/255.255.0.0
 24.5521 +131.6.0.0/255.255.0.0
 24.5522 +131.10.0.0/255.255.0.0
 24.5523 +131.17.0.0/255.255.0.0
 24.5524 +131.21.0.0/255.254.0.0
 24.5525 +131.24.0.0/255.255.0.0
 24.5526 +131.25.0.0/255.255.0.0
 24.5527 +131.27.0.0/255.255.0.0
 24.5528 +131.30.0.0/255.255.0.0
 24.5529 +131.32.0.0/255.255.0.0
 24.5530 +131.35.0.0/255.254.0.0
 24.5531 +131.37.0.0/255.255.0.0
 24.5532 +131.38.0.0/255.254.0.0
 24.5533 +131.40.0.0/255.255.0.0
 24.5534 +131.44.0.0/255.255.0.0
 24.5535 +131.46.0.0/255.254.0.0
 24.5536 +131.50.0.0/255.255.0.0
 24.5537 +131.52.0.0/255.255.0.0
 24.5538 +131.56.0.0/255.255.0.0
 24.5539 +131.58.0.0/255.254.0.0
 24.5540 +131.61.0.0/255.255.0.0
 24.5541 +131.62.0.0/255.255.0.0
 24.5542 +131.74.0.0/255.255.0.0
 24.5543 +131.84.0.0/255.255.0.0
 24.5544 +131.105.0.0/255.255.0.0
 24.5545 +131.107.0.0/255.255.156.12
 24.5546 +131.107.99.245/255.255.99.245
 24.5547 +131.127.0.0/255.255.0.0
 24.5548 +131.131.0.0/255.245.0.0
 24.5549 +131.144.0.0/255.255.0.0
 24.5550 +131.158.0.0/255.255.0.0
 24.5551 +131.168.0.0/255.255.0.0
 24.5552 +131.176.0.0/255.255.0.0
 24.5553 +131.201.0.0/255.255.0.0
 24.5554 +131.205.0.0/255.255.0.0
 24.5555 +131.209.0.0/255.255.0.0
 24.5556 +131.218.0.0/255.255.0.0
 24.5557 +131.228.0.0/255.255.0.0
 24.5558 +131.236.0.0/255.255.0.0
 24.5559 +131.237.0.0/255.255.0.0
 24.5560 +131.241.0.0/255.254.0.0
 24.5561 +131.243.0.0/255.255.0.0
 24.5562 +131.254.0.0/255.255.0.0
 24.5563 +132.3.0.0/255.255.0.0
 24.5564 +132.5.0.0/255.254.0.0
 24.5565 +132.7.0.0/255.255.0.0
 24.5566 +132.9.0.0/255.254.0.0
 24.5567 +132.12.0.0/255.255.0.0
 24.5568 +132.13.0.0/255.254.0.0
 24.5569 +132.15.0.0/255.255.0.0
 24.5570 +132.16.0.0/255.255.0.0
 24.5571 +132.18.0.0/255.254.0.0
 24.5572 +132.20.0.0/255.255.0.0
 24.5573 +132.21.0.0/255.254.0.0
 24.5574 +132.24.0.0/255.255.0.0
 24.5575 +132.25.0.0/255.255.0.0
 24.5576 +132.27.0.0/255.254.0.0
 24.5577 +132.30.0.0/255.255.0.0
 24.5578 +132.31.0.0/255.255.0.0
 24.5579 +132.33.0.0/255.254.0.0
 24.5580 +132.35.0.0/255.255.0.0
 24.5581 +132.37.0.0/255.254.0.0
 24.5582 +132.39.0.0/255.255.0.0
 24.5583 +132.40.0.0/255.255.0.0
 24.5584 +132.42.0.0/255.254.0.0
 24.5585 +132.45.0.0/255.255.0.0
 24.5586 +132.46.0.0/255.255.0.0
 24.5587 +132.48.0.0/255.254.0.0
 24.5588 +132.50.0.0/255.255.0.0
 24.5589 +132.51.0.0/255.255.0.0
 24.5590 +132.52.0.0/255.255.0.0
 24.5591 +132.53.0.0/255.255.0.0
 24.5592 +132.54.0.0/255.254.0.0
 24.5593 +132.56.0.0/255.255.0.0
 24.5594 +132.57.0.0/255.254.0.0
 24.5595 +132.59.0.0/255.255.0.0
 24.5596 +132.60.0.0/255.254.0.0
 24.5597 +132.62.0.0/255.255.0.0
 24.5598 +132.109.0.0/255.232.0.0
 24.5599 +132.146.0.0/255.255.0.0
 24.5600 +132.149.0.0/255.255.0.0
 24.5601 +132.150.0.0/255.254.0.0
 24.5602 +132.165.0.0/255.255.0.0
 24.5603 +132.166.0.0/255.252.0.0
 24.5604 +132.175.0.0/255.255.0.0
 24.5605 +132.188.0.0/255.255.0.0
 24.5606 +132.200.0.0/255.255.0.0
 24.5607 +132.217.0.0/255.253.0.0
 24.5608 +132.227.0.0/255.255.0.0
 24.5609 +132.233.0.0/255.255.0.0
 24.5610 +133.27.228.0/255.255.255.0
 24.5611 +134.5.0.0/255.254.0.0
 24.5612 +134.11.0.0/255.254.0.0
 24.5613 +134.13.0.0/255.252.0.0
 24.5614 +134.47.0.0/255.255.0.0
 24.5615 +134.51.0.0/255.255.0.0
 24.5616 +134.59.0.0/255.255.0.0
 24.5617 +134.67.0.0/255.255.0.0
 24.5618 +134.100.0.0/255.255.0.0
 24.5619 +134.116.0.0/255.255.0.0
 24.5620 +134.131.0.0/255.255.0.0
 24.5621 +134.134.0.0/255.255.0.0
 24.5622 +134.136.0.0/255.255.0.0
 24.5623 +134.157.0.0/255.255.0.0
 24.5624 +134.168.0.0/255.255.0.0
 24.5625 +134.185.0.0/255.255.0.0
 24.5626 +134.186.0.0/255.255.0.0
 24.5627 +134.205.0.0/255.255.0.0
 24.5628 +134.206.0.0/255.255.0.0
 24.5629 +134.212.0.0/255.255.0.0
 24.5630 +134.214.0.0/255.255.0.0
 24.5631 +134.240.0.0/255.255.0.0
 24.5632 +135.107.0.0/255.255.0.0
 24.5633 +135.196.18.0/255.255.255.248
 24.5634 +136.198.0.0/255.255.0.0
 24.5635 +136.207.0.0/255.240.0.0
 24.5636 +136.232.0.0/255.253.0.0
 24.5637 +136.243.0.0/255.255.0.0
 24.5638 +137.1.0.0/255.255.0.0
 24.5639 +137.2.0.0/255.254.0.0
 24.5640 +137.4.0.0/255.255.0.0
 24.5641 +137.7.0.0/255.255.0.0
 24.5642 +137.8.0.0/255.255.0.0
 24.5643 +137.9.0.0/255.255.0.0
 24.5644 +137.10.0.0/255.255.0.0
 24.5645 +137.13.0.0/255.255.0.0
 24.5646 +137.14.0.0/255.255.0.0
 24.5647 +137.15.0.0/255.255.0.0
 24.5648 +137.16.0.0/255.255.0.0
 24.5649 +137.18.0.0/255.255.0.0
 24.5650 +137.19.0.0/255.255.0.0
 24.5651 +137.23.0.0/255.255.0.0
 24.5652 +137.29.0.0/255.255.0.0
 24.5653 +137.41.0.0/255.255.0.0
 24.5654 +137.46.0.0/255.255.0.0
 24.5655 +137.59.0.0/255.253.0.0
 24.5656 +137.77.0.0/255.255.0.0
 24.5657 +137.94.0.0/255.255.0.0
 24.5658 +137.95.0.0/255.255.0.0
 24.5659 +137.102.0.0/255.255.0.0
 24.5660 +137.105.0.0/255.255.0.0
 24.5661 +137.121.0.0/255.255.0.0
 24.5662 +137.126.0.0/255.255.0.0
 24.5663 +137.128.0.0/255.255.0.0
 24.5664 +137.147.0.0/255.255.0.0
 24.5665 +137.153.0.0/255.255.0.0
 24.5666 +137.160.0.0/255.255.0.0
 24.5667 +137.165.0.0/255.255.0.0
 24.5668 +137.167.0.0/255.255.0.0
 24.5669 +137.172.0.0/255.255.0.0
 24.5670 +137.191.0.0/255.255.0.0
 24.5671 +137.194.0.0/255.255.0.0
 24.5672 +137.200.0.0/255.255.0.0
 24.5673 +137.203.0.0/255.255.0.0
 24.5674 +137.241.0.0/255.254.0.0
 24.5675 +137.243.0.0/255.255.0.0
 24.5676 +137.244.0.0/255.254.0.0
 24.5677 +137.249.0.0/255.255.0.0
 24.5678 +137.252.0.0/255.255.0.0
 24.5679 +138.11.0.0/255.255.0.0
 24.5680 +138.12.0.0/255.255.0.0
 24.5681 +138.35.0.0/255.255.0.0
 24.5682 +138.42.0.0/255.255.0.0
 24.5683 +138.44.0.0/255.255.0.0
 24.5684 +138.52.0.0/255.255.0.0
 24.5685 +138.63.0.0/255.255.0.0
 24.5686 +138.69.0.0/255.255.0.0
 24.5687 +138.72.0.0/255.255.0.0
 24.5688 +138.79.0.0/255.255.0.0
 24.5689 +138.96.0.0/255.255.0.0
 24.5690 +138.102.0.0/255.255.0.0
 24.5691 +138.135.0.0/255.254.0.0
 24.5692 +138.139.0.0/255.251.0.0
 24.5693 +138.145.0.0/255.248.0.0
 24.5694 +138.153.0.0/255.255.0.0
 24.5695 +138.154.0.0/255.254.0.0
 24.5696 +138.156.0.0/255.253.0.0
 24.5697 +138.159.0.0/255.255.0.0
 24.5698 +138.162.0.0/255.255.0.0
 24.5699 +138.163.0.0/255.254.0.0
 24.5700 +138.165.0.0/255.253.0.0
 24.5701 +138.168.0.0/255.255.0.0
 24.5702 +138.177.0.0/255.255.0.0
 24.5703 +138.178.0.0/255.254.0.0
 24.5704 +138.180.0.0/255.255.0.0
 24.5705 +138.181.0.0/255.254.0.0
 24.5706 +138.183.0.0/255.255.0.0
 24.5707 +138.184.0.0/255.255.0.0
 24.5708 +138.188.0.0/255.254.0.0
 24.5709 +138.191.0.0/255.255.0.0
 24.5710 +138.194.0.0/255.255.0.0
 24.5711 +138.195.0.0/255.255.125.185
 24.5712 +138.195.130.72/255.255.130.72
 24.5713 +138.200.0.0/255.255.0.0
 24.5714 +138.209.0.0/255.255.0.0
 24.5715 +138.216.0.0/255.255.0.0
 24.5716 +138.231.0.0/255.255.0.0
 24.5717 +139.31.0.0/255.254.0.0
 24.5718 +139.33.0.0/255.255.0.0
 24.5719 +139.34.0.0/255.254.0.0
 24.5720 +139.36.0.0/255.255.0.0
 24.5721 +139.37.0.0/255.254.0.0
 24.5722 +139.39.0.0/255.255.0.0
 24.5723 +139.40.0.0/255.254.0.0
 24.5724 +139.42.0.0/255.255.0.0
 24.5725 +139.43.0.0/255.255.0.0
 24.5726 +139.60.0.0/255.255.0.0
 24.5727 +139.91.0.0/255.255.0.0
 24.5728 +139.100.0.0/255.255.0.0
 24.5729 +139.104.0.0/255.255.0.0
 24.5730 +139.124.0.0/255.255.0.0
 24.5731 +139.142.0.0/255.255.0.0
 24.5732 +139.191.0.0/255.255.0.0
 24.5733 +139.232.0.0/255.255.0.0
 24.5734 +140.77.0.0/255.255.0.0
 24.5735 +140.79.0.0/255.255.0.0
 24.5736 +140.90.0.0/255.255.0.0
 24.5737 +140.93.0.0/255.255.0.0
 24.5738 +140.147.0.0/255.255.0.0
 24.5739 +140.153.0.0/255.255.0.0
 24.5740 +140.175.0.0/255.255.0.0
 24.5741 +140.186.0.0/255.255.0.0
 24.5742 +140.187.0.0/255.255.0.0
 24.5743 +140.208.0.0/255.255.0.0
 24.5744 +140.217.0.0/255.255.0.0
 24.5745 +140.221.0.0/255.255.0.0
 24.5746 +140.229.0.0/255.255.0.0
 24.5747 +140.239.46.225/255.255.255.226
 24.5748 +140.239.50.113/255.255.255.242
 24.5749 +140.239.99.193/255.255.255.226
 24.5750 +140.239.150.241/255.255.255.242
 24.5751 +140.239.187.81/255.255.255.242
 24.5752 +140.239.211.65/255.255.255.194
 24.5753 +140.239.238.129/255.255.255.242
 24.5754 +140.242.0.0/255.255.0.0
 24.5755 +141.15.0.0/255.255.0.0
 24.5756 +141.90.0.0/255.255.0.0
 24.5757 +141.91.0.0/255.255.0.0
 24.5758 +141.104.0.0/255.255.0.0
 24.5759 +141.114.0.0/255.255.0.0
 24.5760 +141.149.113.160/255.255.255.248
 24.5761 +141.150.146.168/255.255.255.248
 24.5762 +141.150.184.0/255.255.255.224
 24.5763 +141.150.185.32/255.255.255.224
 24.5764 +141.153.107.64/255.255.255.192
 24.5765 +141.154.91.0/255.255.255.192
 24.5766 +141.154.255.192/255.255.255.224
 24.5767 +141.156.28.128/255.255.255.192
 24.5768 +141.156.96.0/255.255.255.0
 24.5769 +141.183.0.0/255.254.0.0
 24.5770 +141.198.0.0/255.255.0.0
 24.5771 +141.202.0.0/255.255.0.0
 24.5772 +141.205.0.0/255.255.0.0
 24.5773 +141.221.0.0/255.255.0.0
 24.5774 +141.236.0.0/255.255.0.0
 24.5775 +142.64.0.0/255.255.0.0
 24.5776 +142.72.0.0/255.255.0.0
 24.5777 +142.105.0.0/255.255.0.0
 24.5778 +142.138.0.0/255.255.0.0
 24.5779 +142.145.0.0/255.255.0.0
 24.5780 +142.193.0.0/255.255.0.0
 24.5781 +142.235.0.0/255.255.0.0
 24.5782 +143.45.0.0/255.254.0.0
 24.5783 +143.68.0.0/255.255.0.0
 24.5784 +143.69.0.0/255.251.0.0
 24.5785 +143.74.0.0/255.253.0.0
 24.5786 +143.77.0.0/255.255.0.0
 24.5787 +143.78.0.0/255.254.0.0
 24.5788 +143.80.0.0/255.255.0.0
 24.5789 +143.81.0.0/255.254.0.0
 24.5790 +143.84.0.0/255.255.0.0
 24.5791 +143.85.0.0/255.253.0.0
 24.5792 +143.114.0.0/255.255.0.0
 24.5793 +143.118.0.0/255.255.0.0
 24.5794 +143.138.0.0/255.255.0.0
 24.5795 +143.162.0.0/255.255.0.0
 24.5796 +143.166.0.0/255.255.0.0
 24.5797 +143.175.0.0/255.255.0.0
 24.5798 +143.181.0.0/255.251.0.0
 24.5799 +143.203.0.0/255.254.0.0
 24.5800 +143.228.0.0/255.255.0.0
 24.5801 +143.231.0.0/255.255.0.0
 24.5802 +143.247.0.0/255.255.0.0
 24.5803 +144.3.0.0/255.255.0.0
 24.5804 +144.16.0.0/255.255.0.0
 24.5805 +144.20.0.0/255.250.0.0
 24.5806 +144.36.0.0/255.255.0.0
 24.5807 +144.45.0.0/255.255.0.0
 24.5808 +144.47.0.0/255.255.0.0
 24.5809 +144.51.0.0/255.255.0.0
 24.5810 +144.65.0.0/255.255.0.0
 24.5811 +144.75.0.0/255.255.0.0
 24.5812 +144.76.0.0/255.255.0.0
 24.5813 +144.84.0.0/255.255.0.0
 24.5814 +144.100.0.0/255.252.0.0
 24.5815 +144.110.0.0/255.255.0.0
 24.5816 +144.111.0.0/255.255.0.0
 24.5817 +144.143.0.0/255.254.0.0
 24.5818 +144.146.0.0/255.254.0.0
 24.5819 +144.182.0.0/255.253.0.0
 24.5820 +144.204.0.0/255.255.0.0
 24.5821 +144.233.0.0/255.253.0.0
 24.5822 +144.236.0.0/255.249.0.0
 24.5823 +144.244.0.0/255.253.0.0
 24.5824 +144.247.0.0/255.255.0.0
 24.5825 +144.254.0.0/255.255.0.0
 24.5826 +145.64.0.0/255.255.0.0
 24.5827 +145.68.0.0/255.255.0.0
 24.5828 +145.119.0.0/255.255.0.0
 24.5829 +145.228.0.0/255.255.0.0
 24.5830 +145.232.0.0/255.255.0.0
 24.5831 +145.238.0.0/255.255.0.0
 24.5832 +145.242.0.0/255.255.0.0
 24.5833 +145.250.0.0/255.255.0.0
 24.5834 +145.253.66.120/255.255.255.248
 24.5835 +145.253.81.216/255.255.255.248
 24.5836 +145.253.92.0/255.255.255.128
 24.5837 +145.253.92.128/255.255.255.192
 24.5838 +145.253.99.16/255.255.255.240
 24.5839 +145.253.115.16/255.255.255.240
 24.5840 +145.253.115.208/255.255.255.240
 24.5841 +145.253.162.128/255.255.255.248
 24.5842 +145.253.170.112/255.255.255.248
 24.5843 +145.253.171.0/255.255.255.0
 24.5844 +145.253.174.128/255.255.255.192
 24.5845 +145.253.176.240/255.255.255.248
 24.5846 +145.253.185.128/255.255.255.192
 24.5847 +145.253.237.64/255.255.255.224
 24.5848 +145.253.255.16/255.255.255.240
 24.5849 +145.254.209.0/255.255.255.0
 24.5850 +146.19.0.0/255.255.0.0
 24.5851 +146.53.0.0/255.253.0.0
 24.5852 +146.63.0.0/255.255.0.0
 24.5853 +146.68.0.0/255.255.0.0
 24.5854 +146.76.0.0/255.255.0.0
 24.5855 +146.80.0.0/255.255.0.0
 24.5856 +146.82.146.0/255.255.254.0
 24.5857 +146.82.174.0/255.255.255.0
 24.5858 +146.93.0.0/255.255.0.0
 24.5859 +146.114.0.0/255.255.0.0
 24.5860 +146.118.0.0/255.255.0.0
 24.5861 +146.137.0.0/255.255.0.0
 24.5862 +146.138.0.0/255.255.0.0
 24.5863 +146.139.0.0/255.255.0.0
 24.5864 +146.145.1.32/255.255.255.248
 24.5865 +146.145.46.160/255.255.255.224
 24.5866 +146.145.98.224/255.255.255.240
 24.5867 +146.145.206.160/255.255.255.240
 24.5868 +146.145.226.96/255.255.255.224
 24.5869 +146.145.239.0/255.255.255.224
 24.5870 +146.153.0.0/255.255.0.0
 24.5871 +146.159.0.0/255.255.0.0
 24.5872 +146.215.0.0/255.255.0.0
 24.5873 +146.233.0.0/255.255.0.0
 24.5874 +146.243.0.0/255.255.0.0
 24.5875 +146.248.0.0/255.255.0.0
 24.5876 +147.29.0.0/255.254.0.0
 24.5877 +147.49.0.0/255.255.0.0
 24.5878 +147.51.0.0/255.255.0.0
 24.5879 +147.55.0.0/255.255.0.0
 24.5880 +147.58.0.0/255.255.0.0
 24.5881 +147.67.0.0/255.255.0.0
 24.5882 +147.72.0.0/255.254.0.0
 24.5883 +147.94.0.0/255.255.216.0
 24.5884 +147.94.128.0/255.255.240.0
 24.5885 +147.99.0.0/255.255.0.0
 24.5886 +147.100.0.0/255.255.0.0
 24.5887 +147.127.0.0/255.255.0.0
 24.5888 +147.130.0.0/255.254.0.0
 24.5889 +147.155.0.0/255.255.0.0
 24.5890 +147.171.0.0/255.255.0.0
 24.5891 +147.173.0.0/255.255.0.0
 24.5892 +147.191.0.0/255.255.0.0
 24.5893 +147.208.0.0/255.255.0.0
 24.5894 +147.210.0.0/255.255.0.0
 24.5895 +147.221.0.0/255.255.0.0
 24.5896 +147.242.0.0/255.255.0.0
 24.5897 +147.248.0.0/255.255.0.0
 24.5898 +147.254.0.0/255.255.0.0
 24.5899 +148.1.0.0/255.255.0.0
 24.5900 +148.3.0.0/255.255.0.0
 24.5901 +148.7.0.0/255.255.0.0
 24.5902 +148.60.0.0/255.255.0.0
 24.5903 +148.81.112.0/255.255.250.0
 24.5904 +148.110.0.0/255.255.0.0
 24.5905 +148.117.0.0/255.255.0.0
 24.5906 +148.149.0.0/255.255.0.0
 24.5907 +148.153.0.0/255.255.0.0
 24.5908 +148.184.0.0/255.255.0.0
 24.5909 +148.196.0.0/255.255.0.0
 24.5910 +148.243.229.128/255.255.255.224
 24.5911 +148.243.255.224/255.255.255.239
 24.5912 +148.244.134.0/255.255.253.0
 24.5913 +148.244.148.216/255.255.255.247
 24.5914 +148.244.250.161/255.255.255.242
 24.5915 +148.245.52.0/255.255.255.0
 24.5916 +148.245.99.0/255.255.255.192
 24.5917 +148.245.164.160/255.255.255.224
 24.5918 +148.245.167.128/255.255.255.224
 24.5919 +149.48.0.0/255.255.0.0
 24.5920 +149.56.0.0/255.255.0.0
 24.5921 +149.90.0.0/255.255.0.0
 24.5922 +149.98.0.0/255.255.0.0
 24.5923 +149.101.0.0/255.255.0.0
 24.5924 +149.114.0.0/255.255.0.0
 24.5925 +149.168.21.0/255.255.255.0
 24.5926 +149.168.32.0/255.255.255.0
 24.5927 +149.168.89.0/255.255.255.0
 24.5928 +149.168.96.0/255.255.254.0
 24.5929 +149.168.135.0/255.255.255.0
 24.5930 +149.168.154.0/255.255.255.0
 24.5931 +149.168.212.0/255.255.255.0
 24.5932 +149.168.213.0/255.255.255.0
 24.5933 +149.168.215.0/255.255.255.0
 24.5934 +149.168.223.0/255.255.255.0
 24.5935 +149.168.243.0/255.255.255.0
 24.5936 +149.235.0.0/255.255.0.0
 24.5937 +150.102.0.0/255.253.0.0
 24.5938 +150.111.0.0/255.255.0.0
 24.5939 +150.113.0.0/255.254.0.0
 24.5940 +150.118.0.0/255.254.0.0
 24.5941 +150.120.0.0/255.255.0.0
 24.5942 +150.124.0.0/255.255.0.0
 24.5943 +150.125.0.0/255.255.0.0
 24.5944 +150.133.0.0/255.255.0.0
 24.5945 +150.151.0.0/255.255.0.0
 24.5946 +150.157.0.0/255.255.0.0
 24.5947 +150.176.0.0/255.255.0.0
 24.5948 +150.177.0.0/255.255.0.0
 24.5949 +150.178.0.0/255.255.0.0
 24.5950 +150.180.0.0/255.255.0.0
 24.5951 +150.184.0.0/255.255.0.0
 24.5952 +150.190.0.0/255.255.0.0
 24.5953 +150.191.0.0/255.255.0.0
 24.5954 +150.196.0.0/255.255.0.0
 24.5955 +150.217.0.0/255.255.0.0
 24.5956 +150.220.0.0/255.253.0.0
 24.5957 +150.224.0.0/255.255.0.0
 24.5958 +150.245.0.0/255.251.0.0
 24.5959 +150.254.3.0/255.255.251.192
 24.5960 +150.254.7.68/255.255.255.244
 24.5961 +150.254.7.144/255.255.255.240
 24.5962 +150.254.7.192/255.255.239.128
 24.5963 +150.254.25.0/255.255.250.0
 24.5964 +150.254.32.0/255.255.252.0
 24.5965 +150.254.40.0/255.255.253.0
 24.5966 +150.254.45.0/255.255.253.0
 24.5967 +150.254.51.0/255.255.252.0
 24.5968 +150.254.128.0/255.255.253.0
 24.5969 +150.254.132.0/255.255.251.0
 24.5970 +150.254.142.0/255.255.255.224
 24.5971 +150.254.142.64/255.255.255.192
 24.5972 +150.254.143.0/255.255.254.224
 24.5973 +150.254.145.0/255.255.255.0
 24.5974 +150.254.147.0/255.255.255.0
 24.5975 +151.8.7.80/255.255.255.238
 24.5976 +151.8.66.112/255.255.255.240
 24.5977 +151.11.171.64/255.255.255.239
 24.5978 +151.12.60.64/255.255.255.224
 24.5979 +151.17.101.0/255.255.255.0
 24.5980 +151.17.103.0/255.255.255.0
 24.5981 +151.17.222.160/255.255.255.240
 24.5982 +151.90.0.0/255.255.0.0
 24.5983 +151.99.156.160/255.255.255.224
 24.5984 +151.99.187.248/255.255.255.248
 24.5985 +151.99.243.192/255.255.255.224
 24.5986 +151.121.0.0/255.255.0.0
 24.5987 +151.139.0.0/255.255.0.0
 24.5988 +151.176.0.0/255.255.0.0
 24.5989 +151.197.68.96/255.255.255.240
 24.5990 +151.198.224.0/255.255.255.192
 24.5991 +151.200.173.0/255.255.255.0
 24.5992 +151.200.233.32/255.255.255.224
 24.5993 +151.201.250.0/255.255.255.224
 24.5994 +151.204.98.248/255.255.255.248
 24.5995 +151.204.105.224/255.255.255.248
 24.5996 +151.204.164.224/255.255.255.224
 24.5997 +151.207.0.0/255.255.0.0
 24.5998 +152.70.0.0/255.255.0.0
 24.5999 +152.77.0.0/255.255.0.0
 24.6000 +152.80.0.0/255.255.0.0
 24.6001 +152.81.0.0/255.255.0.0
 24.6002 +152.82.0.0/255.255.0.0
 24.6003 +152.83.0.0/255.255.0.0
 24.6004 +152.91.0.0/255.255.0.0
 24.6005 +152.113.0.0/255.255.0.0
 24.6006 +152.119.0.0/255.251.0.0
 24.6007 +152.140.0.0/255.253.0.0
 24.6008 +152.160.124.0/255.255.255.0
 24.6009 +152.165.0.0/255.255.0.0
 24.6010 +152.229.0.0/255.255.0.0
 24.6011 +153.6.0.0/255.253.0.0
 24.6012 +153.12.0.0/255.255.0.0
 24.6013 +153.21.0.0/255.244.0.0
 24.6014 +155.5.0.0/255.253.0.0
 24.6015 +155.35.0.0/255.255.0.0
 24.6016 +155.39.0.0/255.255.0.0
 24.6017 +155.50.0.0/255.255.0.0
 24.6018 +155.61.0.0/255.255.0.0
 24.6019 +155.64.0.0/255.255.0.0
 24.6020 +155.74.0.0/255.251.0.0
 24.6021 +155.80.0.0/255.253.0.0
 24.6022 +155.96.0.0/255.255.0.0
 24.6023 +155.103.0.0/255.255.0.0
 24.6024 +155.149.0.0/255.255.0.0
 24.6025 +155.150.0.0/255.255.0.0
 24.6026 +155.178.0.0/255.255.0.0
 24.6027 +155.187.0.0/255.255.0.0
 24.6028 +155.201.0.0/255.255.0.0
 24.6029 +155.206.0.0/255.255.0.0
 24.6030 +155.213.0.0/255.254.0.0
 24.6031 +155.215.0.0/255.255.0.0
 24.6032 +155.216.0.0/255.254.0.0
 24.6033 +155.218.0.0/255.255.0.0
 24.6034 +155.219.0.0/255.254.0.0
 24.6035 +155.221.0.0/255.255.0.0
 24.6036 +155.228.0.0/255.255.0.0
 24.6037 +155.229.0.0/255.255.0.0
 24.6038 +155.234.0.0/255.255.0.0
 24.6039 +155.251.0.0/255.255.0.0
 24.6040 +156.3.0.0/255.255.0.0
 24.6041 +156.9.0.0/255.255.0.0
 24.6042 +156.14.0.0/255.255.0.0
 24.6043 +156.18.0.0/255.255.0.0
 24.6044 +156.20.0.0/255.255.0.0
 24.6045 +156.25.0.0/255.255.0.0
 24.6046 +156.27.0.0/255.255.0.0
 24.6047 +156.33.0.0/255.255.0.0
 24.6048 +156.40.0.0/255.253.0.0
 24.6049 +156.44.0.0/255.255.0.0
 24.6050 +156.46.8.0/255.255.255.128
 24.6051 +156.46.212.0/255.255.254.248
 24.6052 +156.47.0.0/255.255.0.0
 24.6053 +156.60.0.0/255.255.0.0
 24.6054 +156.63.0.0/255.255.0.0
 24.6055 +156.79.0.0/255.255.0.0
 24.6056 +156.82.0.0/255.255.0.0
 24.6057 +156.83.0.0/255.255.0.0
 24.6058 +156.98.0.0/255.254.0.0
 24.6059 +156.112.0.0/255.254.0.0
 24.6060 +156.117.0.0/255.255.0.0
 24.6061 +156.118.0.0/255.255.0.0
 24.6062 +156.119.0.0/255.242.0.0
 24.6063 +157.23.0.0/255.255.0.0
 24.6064 +157.26.0.0/255.255.0.0
 24.6065 +157.28.0.0/255.254.0.0
 24.6066 +157.54.0.0/255.249.0.0
 24.6067 +157.68.0.0/255.255.0.0
 24.6068 +157.79.0.0/255.255.0.0
 24.6069 +157.81.0.0/255.255.0.0
 24.6070 +157.87.0.0/255.255.0.0
 24.6071 +157.103.0.0/255.255.0.0
 24.6072 +157.109.0.0/255.255.0.0
 24.6073 +157.120.0.0/255.255.0.0
 24.6074 +157.121.0.0/255.255.0.0
 24.6075 +157.136.0.0/255.255.0.0
 24.6076 +157.141.0.0/255.255.0.0
 24.6077 +157.146.0.0/255.255.0.0
 24.6078 +157.150.0.0/255.255.0.0
 24.6079 +157.153.0.0/255.255.0.0
 24.6080 +157.159.0.0/255.255.0.0
 24.6081 +157.164.0.0/255.255.0.0
 24.6082 +157.166.0.0/255.255.0.0
 24.6083 +157.169.0.0/255.255.0.0
 24.6084 +157.170.0.0/255.255.0.0
 24.6085 +157.189.0.0/255.255.0.0
 24.6086 +157.202.0.0/255.255.0.0
 24.6087 +157.217.0.0/255.255.0.0
 24.6088 +157.224.0.0/255.255.0.0
 24.6089 +158.1.0.0/255.254.0.0
 24.6090 +158.4.0.0/255.254.0.0
 24.6091 +158.6.0.0/255.255.0.0
 24.6092 +158.7.0.0/255.254.0.0
 24.6093 +158.9.0.0/255.255.0.0
 24.6094 +158.12.0.0/255.255.0.0
 24.6095 +158.13.0.0/255.254.0.0
 24.6096 +158.15.0.0/255.255.0.0
 24.6097 +158.16.0.0/255.254.0.0
 24.6098 +158.18.0.0/255.255.0.0
 24.6099 +158.19.0.0/255.254.0.0
 24.6100 +158.63.0.0/255.255.0.0
 24.6101 +158.66.0.0/255.255.0.0
 24.6102 +158.70.0.0/255.251.0.0
 24.6103 +158.111.0.0/255.255.0.0
 24.6104 +158.116.0.0/255.255.0.0
 24.6105 +158.123.0.0/255.255.0.0
 24.6106 +158.166.0.0/255.253.0.0
 24.6107 +158.169.0.0/255.255.0.0
 24.6108 +158.183.0.0/255.255.0.0
 24.6109 +158.185.0.0/255.252.0.0
 24.6110 +158.219.0.0/255.255.0.0
 24.6111 +158.236.0.0/255.253.0.0
 24.6112 +158.240.0.0/255.255.0.0
 24.6113 +158.241.0.0/255.255.0.0
 24.6114 +158.242.0.0/255.255.0.0
 24.6115 +159.1.0.0/255.255.0.0
 24.6116 +159.6.0.0/255.255.0.0
 24.6117 +159.16.0.0/255.255.0.255
 24.6118 +159.22.0.0/255.255.0.0
 24.6119 +159.26.0.0/255.255.0.0
 24.6120 +159.31.0.0/255.255.0.0
 24.6121 +159.33.0.0/255.255.0.0
 24.6122 +159.36.0.0/255.255.0.0
 24.6123 +159.46.0.0/255.255.0.0
 24.6124 +159.56.0.0/255.255.0.0
 24.6125 +159.77.0.0/255.255.0.0
 24.6126 +159.84.0.0/255.255.0.0
 24.6127 +159.87.0.0/255.255.0.0
 24.6128 +159.106.0.0/255.255.0.0
 24.6129 +159.119.0.0/255.255.0.0
 24.6130 +159.121.0.0/255.255.0.0
 24.6131 +159.142.0.0/255.255.0.0
 24.6132 +159.145.0.0/255.255.0.0
 24.6133 +159.147.0.0/255.255.0.0
 24.6134 +159.150.0.0/255.255.0.0
 24.6135 +159.153.0.0/255.255.0.0
 24.6136 +159.157.0.0/255.255.0.0
 24.6137 +159.169.0.0/255.255.0.0
 24.6138 +159.181.0.0/255.255.0.0
 24.6139 +159.189.0.0/255.255.0.0
 24.6140 +159.199.0.0/255.255.0.0
 24.6141 +159.238.0.0/255.255.0.0
 24.6142 +159.247.0.0/255.255.0.0
 24.6143 +160.1.0.0/255.252.0.0
 24.6144 +160.25.0.0/255.255.0.0
 24.6145 +160.33.0.0/255.254.0.0
 24.6146 +160.38.0.0/255.255.0.0
 24.6147 +160.53.0.0/255.255.0.0
 24.6148 +160.67.0.0/255.254.0.0
 24.6149 +160.91.0.0/255.255.0.0
 24.6150 +160.103.0.0/255.254.0.0
 24.6151 +160.130.0.0/255.254.0.0
 24.6152 +160.134.0.0/255.255.0.0
 24.6153 +160.135.0.0/255.255.0.0
 24.6154 +160.138.0.0/255.254.0.0
 24.6155 +160.141.0.0/255.255.0.0
 24.6156 +160.143.0.0/255.255.0.0
 24.6157 +160.145.0.0/255.254.0.0
 24.6158 +160.149.0.0/255.255.0.0
 24.6159 +160.150.0.0/255.255.0.0
 24.6160 +160.151.0.0/255.255.0.0
 24.6161 +160.153.0.0/255.255.0.0
 24.6162 +160.187.0.0/255.255.0.0
 24.6163 +160.196.0.0/255.255.0.0
 24.6164 +160.205.0.0/255.255.0.0
 24.6165 +160.208.0.0/255.255.0.0
 24.6166 +160.228.0.0/255.255.0.0
 24.6167 +160.232.0.0/255.255.0.0
 24.6168 +161.3.0.0/255.255.0.0
 24.6169 +161.7.0.0/255.255.0.0
 24.6170 +161.11.0.0/255.255.0.0
 24.6171 +161.44.0.0/255.255.0.0
 24.6172 +161.55.0.0/255.255.0.0
 24.6173 +161.58.227.32/255.255.255.248
 24.6174 +161.80.0.0/255.255.0.0
 24.6175 +161.83.0.0/255.246.0.0
 24.6176 +161.104.0.0/255.254.0.0
 24.6177 +161.106.0.0/255.255.0.0
 24.6178 +161.108.0.0/255.255.0.0
 24.6179 +161.114.0.0/255.255.0.0
 24.6180 +161.119.0.0/255.255.0.0
 24.6181 +161.203.0.0/255.255.0.0
 24.6182 +161.214.0.0/255.255.0.0
 24.6183 +161.240.0.0/255.255.0.0
 24.6184 +162.1.0.0/255.255.0.0
 24.6185 +162.2.0.0/255.255.0.0
 24.6186 +162.23.0.0/255.255.0.0
 24.6187 +162.24.0.0/255.255.0.0
 24.6188 +162.35.0.0/255.255.0.0
 24.6189 +162.38.0.0/255.255.0.0
 24.6190 +162.49.0.0/255.255.0.0
 24.6191 +162.55.0.0/255.255.0.0
 24.6192 +162.58.0.0/255.255.0.0
 24.6193 +162.59.0.0/255.255.0.0
 24.6194 +162.62.0.0/255.255.0.0
 24.6195 +162.67.0.0/255.253.0.0
 24.6196 +162.70.0.0/255.255.0.0
 24.6197 +162.75.0.0/255.255.0.0
 24.6198 +162.77.0.0/255.255.0.0
 24.6199 +162.79.0.0/255.255.0.0
 24.6200 +162.80.0.0/255.255.0.0
 24.6201 +162.82.0.0/255.255.0.0
 24.6202 +162.90.0.0/255.255.0.0
 24.6203 +162.94.0.0/255.255.0.0
 24.6204 +162.108.0.0/255.255.0.0
 24.6205 +162.114.0.0/255.255.0.0
 24.6206 +162.127.0.0/255.255.0.0
 24.6207 +162.133.0.0/255.255.0.0
 24.6208 +162.138.0.0/255.255.0.0
 24.6209 +162.140.0.0/255.255.0.0
 24.6210 +162.143.0.0/255.255.0.0
 24.6211 +163.9.0.0/255.255.0.0
 24.6212 +163.29.0.0/255.255.0.0
 24.6213 +163.33.0.0/255.255.0.0
 24.6214 +163.150.0.0/255.255.0.0
 24.6215 +163.173.0.0/255.255.0.0
 24.6216 +163.174.0.0/255.255.0.0
 24.6217 +163.191.0.0/255.255.0.0
 24.6218 +163.244.0.0/255.255.0.0
 24.6219 +163.249.0.0/255.255.0.0
 24.6220 +163.251.0.0/255.255.0.0
 24.6221 +164.13.0.0/255.255.0.0
 24.6222 +164.49.0.0/255.255.0.0
 24.6223 +164.54.0.0/255.254.0.0
 24.6224 +164.62.0.0/255.255.0.0
 24.6225 +164.64.0.0/255.255.0.0
 24.6226 +164.66.0.0/255.255.0.0
 24.6227 +164.81.0.0/255.255.0.0
 24.6228 +164.82.0.0/255.255.0.0
 24.6229 +164.86.0.0/255.255.0.0
 24.6230 +164.87.0.0/255.255.0.0
 24.6231 +164.105.0.0/255.255.0.0
 24.6232 +164.110.0.0/255.255.0.0
 24.6233 +164.112.0.0/255.255.0.0
 24.6234 +164.119.0.0/255.255.0.0
 24.6235 +164.122.0.0/255.255.0.0
 24.6236 +164.128.50.32/255.255.255.248
 24.6237 +164.128.69.96/255.255.255.224
 24.6238 +164.133.0.0/255.255.0.0
 24.6239 +164.141.0.0/255.255.0.0
 24.6240 +164.143.248.0/255.255.252.0
 24.6241 +164.144.0.0/255.255.0.0
 24.6242 +164.154.0.0/255.255.0.0
 24.6243 +164.156.0.0/255.255.0.0
 24.6244 +164.157.0.0/255.255.0.0
 24.6245 +164.159.0.0/255.255.0.0
 24.6246 +164.164.0.0/255.255.0.0
 24.6247 +164.165.0.0/255.255.0.0
 24.6248 +164.195.0.0/255.255.0.0
 24.6249 +164.198.0.0/255.255.0.0
 24.6250 +164.214.0.0/255.255.0.0
 24.6251 +164.217.0.0/255.254.0.0
 24.6252 +164.220.0.0/255.254.0.0
 24.6253 +164.224.0.0/255.254.0.0
 24.6254 +165.13.0.0/255.255.0.0
 24.6255 +165.74.0.0/255.255.0.0
 24.6256 +165.105.0.0/255.255.0.0
 24.6257 +165.110.0.0/255.255.0.0
 24.6258 +165.119.0.0/255.255.0.0
 24.6259 +165.121.245.96/255.255.255.248
 24.6260 +165.121.254.240/255.255.255.248
 24.6261 +165.127.0.0/255.255.0.0
 24.6262 +165.135.0.0/255.255.0.0
 24.6263 +165.142.0.0/255.255.0.0
 24.6264 +165.151.0.0/255.255.0.0
 24.6265 +165.153.0.0/255.255.0.0
 24.6266 +165.163.0.0/255.255.0.0
 24.6267 +165.170.0.0/255.255.0.0
 24.6268 +165.187.0.0/255.255.0.0
 24.6269 +165.189.0.0/255.255.0.0
 24.6270 +165.191.0.0/255.255.0.0
 24.6271 +165.197.0.0/255.254.0.0
 24.6272 +165.221.0.0/255.255.0.0
 24.6273 +165.224.0.0/255.255.0.0
 24.6274 +165.234.0.0/255.255.0.0
 24.6275 +165.239.0.0/255.255.0.0
 24.6276 +165.247.197.72/255.255.255.248
 24.6277 +165.247.198.128/255.255.255.248
 24.6278 +165.252.0.0/255.255.0.0
 24.6279 +166.30.0.0/255.255.0.0
 24.6280 +166.64.0.0/255.255.0.0
 24.6281 +166.77.0.0/255.255.0.0
 24.6282 +166.96.0.0/255.255.0.0
 24.6283 +166.112.0.0/255.255.0.0
 24.6284 +166.121.0.0/255.255.0.0
 24.6285 +166.123.0.0/255.255.0.0
 24.6286 +167.7.0.0/255.255.0.0
 24.6287 +167.11.0.0/255.255.0.0
 24.6288 +167.13.0.0/255.255.0.0
 24.6289 +167.21.0.0/255.255.0.0
 24.6290 +167.27.0.0/255.255.0.0
 24.6291 +167.44.0.0/255.255.0.0
 24.6292 +167.68.0.0/255.255.0.0
 24.6293 +167.72.0.0/255.255.0.0
 24.6294 +167.102.0.0/255.255.0.0
 24.6295 +167.131.0.0/255.255.0.0
 24.6296 +167.141.0.0/255.255.0.0
 24.6297 +167.144.0.0/255.255.0.0
 24.6298 +167.154.0.0/255.255.0.0
 24.6299 +167.158.0.0/255.255.0.0
 24.6300 +167.167.0.0/255.255.0.0
 24.6301 +167.192.0.0/255.247.0.0
 24.6302 +167.206.48.160/255.255.255.248
 24.6303 +167.206.49.0/255.255.255.240
 24.6304 +167.206.67.32/255.255.255.240
 24.6305 +167.206.84.64/255.255.255.192
 24.6306 +167.206.144.88/255.255.255.248
 24.6307 +167.206.174.240/255.255.255.248
 24.6308 +167.218.0.0/255.255.0.0
 24.6309 +167.220.0.0/255.255.0.0
 24.6310 +167.229.0.0/255.255.0.0
 24.6311 +167.240.0.0/255.255.0.0
 24.6312 +167.254.0.0/255.255.0.0
 24.6313 +168.8.0.0/255.232.0.0
 24.6314 +168.32.0.0/255.227.0.0
 24.6315 +168.68.0.0/255.255.0.0
 24.6316 +168.71.0.0/255.255.0.0
 24.6317 +168.82.0.0/255.255.0.0
 24.6318 +168.85.0.0/255.254.0.0
 24.6319 +168.102.0.0/255.255.0.0
 24.6320 +168.127.0.0/255.255.0.0
 24.6321 +168.138.0.0/255.255.0.0
 24.6322 +168.161.0.0/255.255.0.0
 24.6323 +168.166.0.0/255.255.0.0
 24.6324 +168.177.0.0/255.252.0.0
 24.6325 +168.215.140.0/255.255.254.0
 24.6326 +168.242.0.0/255.255.0.0
 24.6327 +169.2.0.0/255.254.0.0
 24.6328 +169.130.0.0/255.255.0.0
 24.6329 +169.134.0.0/255.255.0.0
 24.6330 +169.135.0.0/255.255.0.0
 24.6331 +169.199.0.0/255.255.0.0
 24.6332 +169.203.0.0/255.255.0.0
 24.6333 +169.207.190.112/255.255.255.240
 24.6334 +169.228.0.0/255.246.0.0
 24.6335 +169.245.0.0/255.249.0.0
 24.6336 +169.252.0.0/255.254.0.0
 24.6337 +170.3.0.0/255.255.0.0
 24.6338 +170.47.0.0/255.255.0.0
 24.6339 +170.94.0.0/255.255.0.0
 24.6340 +170.99.0.0/255.255.0.0
 24.6341 +170.104.0.0/255.255.0.0
 24.6342 +170.110.0.0/255.255.0.0
 24.6343 +170.123.0.0/255.255.0.0
 24.6344 +170.141.0.0/255.253.0.0
 24.6345 +170.144.0.0/255.255.0.0
 24.6346 +170.154.0.0/255.255.0.0
 24.6347 +170.156.0.0/255.255.0.0
 24.6348 +170.190.0.0/255.255.0.0
 24.6349 +170.209.0.0/255.255.0.0
 24.6350 +170.214.0.0/255.255.0.0
 24.6351 +170.216.0.0/255.255.0.0
 24.6352 +170.248.0.0/255.255.0.0
 24.6353 +170.251.0.0/255.254.0.0
 24.6354 +192.5.8.0/255.255.255.0
 24.6355 +192.5.18.0/255.255.255.0
 24.6356 +192.5.21.0/255.255.251.0
 24.6357 +192.5.41.0/255.255.255.0
 24.6358 +192.5.142.0/255.255.255.0
 24.6359 +192.5.147.0/255.255.255.0
 24.6360 +192.5.170.0/255.255.224.0
 24.6361 +192.5.214.0/255.255.255.0
 24.6362 +192.6.144.0/255.255.144.0
 24.6363 +192.9.0.0/255.255.56.0
 24.6364 +192.9.201.0/255.255.202.0
 24.6365 +192.11.0.0/255.255.0.0
 24.6366 +192.12.9.0/255.255.255.0
 24.6367 +192.12.62.0/255.255.255.0
 24.6368 +192.12.64.0/255.255.255.0
 24.6369 +192.12.65.0/255.255.253.0
 24.6370 +192.12.74.0/255.255.255.0
 24.6371 +192.12.139.0/255.255.255.0
 24.6372 +192.16.180.0/255.255.255.0
 24.6373 +192.18.0.0/255.255.61.0
 24.6374 +192.18.196.0/255.255.196.0
 24.6375 +192.25.56.0/255.255.244.0
 24.6376 +192.25.71.0/255.255.249.0
 24.6377 +192.25.78.0/255.255.253.0
 24.6378 +192.25.81.0/255.255.236.0
 24.6379 +192.25.101.0/255.255.101.0
 24.6380 +192.26.7.0/255.255.255.0
 24.6381 +192.26.48.0/255.255.255.0
 24.6382 +192.26.89.0/255.255.255.0
 24.6383 +192.26.122.0/255.255.255.0
 24.6384 +192.26.154.0/255.255.236.0
 24.6385 +192.26.194.0/255.255.240.0
 24.6386 +192.26.213.0/255.255.255.0
 24.6387 +192.26.215.0/255.255.240.0
 24.6388 +192.28.110.0/255.255.226.0
 24.6389 +192.29.0.0/255.254.0.0
 24.6390 +192.31.8.0/255.255.255.0
 24.6391 +192.31.10.0/255.255.252.0
 24.6392 +192.31.16.0/255.255.251.0
 24.6393 +192.31.29.0/255.255.255.0
 24.6394 +192.31.38.0/255.255.255.0
 24.6395 +192.31.86.0/255.255.255.0
 24.6396 +192.31.106.0/255.255.255.0
 24.6397 +192.31.225.0/255.255.255.0
 24.6398 +192.31.229.0/255.255.255.0
 24.6399 +192.33.5.0/255.255.251.0
 24.6400 +192.33.13.0/255.255.255.0
 24.6401 +192.33.131.0/255.255.255.0
 24.6402 +192.33.158.0/255.255.255.0
 24.6403 +192.33.182.0/255.255.255.0
 24.6404 +192.33.185.0/255.255.255.0
 24.6405 +192.33.241.0/255.255.246.0
 24.6406 +192.34.0.0/255.255.0.0
 24.6407 +192.35.37.0/255.255.255.0
 24.6408 +192.35.74.0/255.255.253.0
 24.6409 +192.35.128.0/255.255.254.0
 24.6410 +192.35.204.0/255.255.255.0
 24.6411 +192.35.208.0/255.255.255.0
 24.6412 +192.35.230.0/255.255.255.0
 24.6413 +192.35.232.0/255.255.255.0
 24.6414 +192.36.20.0/255.255.255.0
 24.6415 +192.40.0.0/255.255.0.0
 24.6416 +192.41.146.0/255.255.255.0
 24.6417 +192.41.213.0/255.255.255.0
 24.6418 +192.41.221.0/255.255.255.0
 24.6419 +192.41.246.0/255.255.255.0
 24.6420 +192.41.250.0/255.255.250.0
 24.6421 +192.42.2.0/255.255.255.0
 24.6422 +192.42.60.0/255.255.253.0
 24.6423 +192.42.66.0/255.255.255.0
 24.6424 +192.42.148.0/255.255.253.0
 24.6425 +192.42.244.0/255.255.255.0
 24.6426 +192.42.249.0/255.255.255.0
 24.6427 +192.43.174.0/255.255.255.0
 24.6428 +192.43.189.0/255.255.255.0
 24.6429 +192.43.191.0/255.255.255.0
 24.6430 +192.46.0.0/255.255.0.0
 24.6431 +192.47.250.0/255.255.253.0
 24.6432 +192.48.123.0/255.255.255.0
 24.6433 +192.48.238.0/255.255.255.0
 24.6434 +192.48.242.0/255.255.255.0
 24.6435 +192.48.249.0/255.255.254.0
 24.6436 +192.52.0.0/255.255.205.0
 24.6437 +192.52.51.0/255.255.246.0
 24.6438 +192.52.72.0/255.255.254.0
 24.6439 +192.52.151.0/255.255.255.0
 24.6440 +192.52.171.0/255.255.250.0
 24.6441 +192.52.239.0/255.255.255.0
 24.6442 +192.52.246.0/255.255.255.0
 24.6443 +192.54.52.0/255.255.255.0
 24.6444 +192.54.74.0/255.255.255.0
 24.6445 +192.54.105.0/255.255.254.0
 24.6446 +192.54.122.0/255.255.255.0
 24.6447 +192.54.138.0/255.255.255.0
 24.6448 +192.54.143.0/255.255.255.0
 24.6449 +192.54.205.0/255.255.251.0
 24.6450 +192.54.221.0/255.255.255.0
 24.6451 +192.54.240.0/255.255.255.0
 24.6452 +192.55.32.0/255.255.206.0
 24.6453 +192.55.135.0/255.255.255.0
 24.6454 +192.55.223.0/255.255.255.0
 24.6455 +192.55.232.0/255.255.255.0
 24.6456 +192.56.0.0/255.255.0.0
 24.6457 +192.58.4.0/255.255.251.0
 24.6458 +192.58.28.0/255.255.248.0
 24.6459 +192.58.102.0/255.255.251.0
 24.6460 +192.58.149.0/255.255.255.0
 24.6461 +192.58.155.0/255.255.255.0
 24.6462 +192.58.181.0/255.255.255.0
 24.6463 +192.58.200.0/255.255.252.0
 24.6464 +192.58.206.0/255.255.251.0
 24.6465 +192.58.217.0/255.255.255.0
 24.6466 +192.58.247.0/255.255.255.0
 24.6467 +192.65.71.0/255.255.255.0
 24.6468 +192.65.80.0/255.255.255.0
 24.6469 +192.65.130.0/255.255.255.0
 24.6470 +192.65.137.0/255.255.255.0
 24.6471 +192.65.177.0/255.255.255.0
 24.6472 +192.65.204.0/255.255.249.0
 24.6473 +192.65.214.0/255.255.255.0
 24.6474 +192.65.216.0/255.255.255.0
 24.6475 +192.65.218.0/255.255.255.0
 24.6476 +192.65.220.0/255.255.255.0
 24.6477 +192.65.253.0/255.255.255.0
 24.6478 +192.67.12.0/255.255.255.0
 24.6479 +192.67.105.0/255.255.254.0
 24.6480 +192.67.158.0/255.255.255.0
 24.6481 +192.67.166.0/255.255.255.0
 24.6482 +192.67.170.0/255.255.255.0
 24.6483 +192.67.171.0/255.255.255.0
 24.6484 +192.67.209.0/255.255.255.0
 24.6485 +192.67.210.0/255.255.255.0
 24.6486 +192.67.211.0/255.255.255.0
 24.6487 +192.67.214.0/255.255.255.0
 24.6488 +192.67.215.0/255.255.255.0
 24.6489 +192.67.216.0/255.255.255.0
 24.6490 +192.67.249.0/255.255.255.0
 24.6491 +192.68.18.0/255.255.255.0
 24.6492 +192.68.31.0/255.255.236.0
 24.6493 +192.68.75.0/255.255.255.0
 24.6494 +192.68.132.0/255.255.255.0
 24.6495 +192.68.154.0/255.255.255.0
 24.6496 +192.68.157.0/255.255.255.0
 24.6497 +192.68.202.0/255.255.255.0
 24.6498 +192.70.75.0/255.255.255.0
 24.6499 +192.70.77.0/255.255.255.0
 24.6500 +192.70.118.0/255.255.255.0
 24.6501 +192.70.119.0/255.255.255.0
 24.6502 +192.70.175.0/255.255.255.0
 24.6503 +192.70.189.0/255.255.254.0
 24.6504 +192.71.128.0/255.255.255.0
 24.6505 +192.72.1.0/255.255.254.0
 24.6506 +192.72.3.0/255.255.6.0
 24.6507 +192.73.22.0/255.255.255.0
 24.6508 +192.73.56.0/255.255.255.0
 24.6509 +192.73.213.0/255.255.255.0
 24.6510 +192.73.214.0/255.255.255.0
 24.6511 +192.73.215.0/255.255.255.0
 24.6512 +192.73.224.0/255.255.255.0
 24.6513 +192.73.229.0/255.255.255.0
 24.6514 +192.75.19.0/255.255.252.0
 24.6515 +192.75.85.0/255.255.253.0
 24.6516 +192.75.91.0/255.255.253.0
 24.6517 +192.75.102.0/255.255.254.0
 24.6518 +192.75.143.0/255.255.255.0
 24.6519 +192.75.183.0/255.255.255.0
 24.6520 +192.75.212.0/255.255.255.0
 24.6521 +192.76.138.0/255.255.255.0
 24.6522 +192.76.148.0/255.255.255.0
 24.6523 +192.77.17.0/255.255.255.0
 24.6524 +192.77.25.0/255.255.255.0
 24.6525 +192.78.1.0/255.255.69.0
 24.6526 +192.78.188.0/255.255.255.0
 24.6527 +192.80.48.0/255.255.255.0
 24.6528 +192.82.113.0/255.255.255.0
 24.6529 +192.82.140.0/255.255.255.0
 24.6530 +192.82.151.0/255.255.255.0
 24.6531 +192.82.238.0/255.255.255.0
 24.6532 +192.83.104.0/255.255.255.0
 24.6533 +192.83.200.0/255.255.255.0
 24.6534 +192.83.236.0/255.255.255.0
 24.6535 +192.83.238.0/255.255.255.0
 24.6536 +192.83.251.0/255.255.255.0
 24.6537 +192.84.74.0/255.255.255.0
 24.6538 +192.84.125.0/255.255.255.0
 24.6539 +192.84.170.0/255.255.255.0
 24.6540 +192.84.171.0/255.255.255.0
 24.6541 +192.84.208.0/255.255.255.0
 24.6542 +192.84.215.0/255.255.255.0
 24.6543 +192.84.220.0/255.255.255.0
 24.6544 +192.84.237.0/255.255.254.0
 24.6545 +192.86.19.0/255.255.252.0
 24.6546 +192.86.24.0/255.255.255.0
 24.6547 +192.86.110.0/255.255.255.0
 24.6548 +192.86.128.0/255.255.255.0
 24.6549 +192.86.140.0/255.255.246.0
 24.6550 +192.86.170.0/255.255.176.0
 24.6551 +192.87.35.0/255.255.255.0
 24.6552 +192.87.77.0/255.255.255.0
 24.6553 +192.87.83.0/255.255.255.0
 24.6554 +192.87.88.0/255.255.255.0
 24.6555 +192.87.198.0/255.255.255.0
 24.6556 +192.87.200.0/255.255.248.0
 24.6557 +192.88.5.0/255.255.255.0
 24.6558 +192.88.51.0/255.255.227.0
 24.6559 +192.88.87.0/255.255.255.0
 24.6560 +192.88.96.0/255.255.255.0
 24.6561 +192.88.136.0/255.255.255.0
 24.6562 +192.89.15.176/255.255.255.240
 24.6563 +192.89.43.128/255.255.255.128
 24.6564 +192.89.214.192/255.255.255.192
 24.6565 +192.91.60.0/255.255.184.0
 24.6566 +192.91.146.0/255.255.226.0
 24.6567 +192.91.250.0/255.255.255.0
 24.6568 +192.92.14.0/255.255.255.0
 24.6569 +192.92.89.0/255.255.255.0
 24.6570 +192.92.91.0/255.255.255.0
 24.6571 +192.92.94.0/255.255.255.0
 24.6572 +192.93.124.0/255.255.255.0
 24.6573 +192.93.140.0/255.255.255.0
 24.6574 +192.93.205.0/255.255.255.0
 24.6575 +192.94.25.0/255.255.255.0
 24.6576 +192.94.42.0/255.255.253.0
 24.6577 +192.94.62.0/255.255.253.0
 24.6578 +192.94.74.0/255.255.255.0
 24.6579 +192.94.81.0/255.255.236.0
 24.6580 +192.94.164.0/255.255.255.0
 24.6581 +192.94.209.0/255.255.255.0
 24.6582 +192.94.219.0/255.255.255.0
 24.6583 +192.100.30.0/255.255.255.0
 24.6584 +192.100.51.0/255.255.255.0
 24.6585 +192.100.69.0/255.255.254.0
 24.6586 +192.100.95.0/255.255.255.0
 24.6587 +192.100.100.0/255.255.255.0
 24.6588 +192.100.145.0/255.255.255.0
 24.6589 +192.100.146.0/255.255.255.0
 24.6590 +192.101.97.0/255.255.255.0
 24.6591 +192.101.100.0/255.255.246.0
 24.6592 +192.101.119.0/255.255.255.0
 24.6593 +192.101.134.0/255.255.255.0
 24.6594 +192.101.169.0/255.255.255.0
 24.6595 +192.101.172.0/255.255.255.0
 24.6596 +192.101.190.0/255.255.255.0
 24.6597 +192.101.193.0/255.255.255.0
 24.6598 +192.101.197.0/255.255.254.0
 24.6599 +192.101.252.0/255.255.255.0
 24.6600 +192.102.86.0/255.255.254.0
 24.6601 +192.102.88.0/255.255.255.0
 24.6602 +192.102.94.0/255.255.255.0
 24.6603 +192.102.182.0/255.255.226.0
 24.6604 +192.102.241.0/255.255.255.0
 24.6605 +192.102.250.0/255.255.254.0
 24.6606 +192.104.19.0/255.255.255.0
 24.6607 +192.104.46.0/255.255.254.0
 24.6608 +192.104.54.0/255.255.255.0
 24.6609 +192.104.158.0/255.255.255.0
 24.6610 +192.106.144.0/255.255.252.0
 24.6611 +192.106.154.0/255.255.255.0
 24.6612 +192.106.196.0/255.255.254.0
 24.6613 +192.107.9.0/255.255.255.0
 24.6614 +192.107.116.0/255.255.255.0
 24.6615 +192.107.165.0/255.255.255.0
 24.6616 +192.107.175.0/255.255.255.0
 24.6617 +192.107.188.0/255.255.255.0
 24.6618 +192.107.221.0/255.255.255.0
 24.6619 +192.107.234.0/255.255.255.0
 24.6620 +192.108.94.0/255.255.255.0
 24.6621 +192.108.115.0/255.255.251.0
 24.6622 +192.108.124.0/255.255.255.0
 24.6623 +192.108.215.0/255.255.255.0
 24.6624 +192.108.231.0/255.255.255.0
 24.6625 +192.108.235.0/255.255.255.0
 24.6626 +192.108.244.0/255.255.255.0
 24.6627 +192.109.36.0/255.255.255.0
 24.6628 +192.109.78.0/255.255.255.0
 24.6629 +192.109.81.0/255.255.255.0
 24.6630 +192.109.206.0/255.255.255.0
 24.6631 +192.109.241.0/255.255.255.0
 24.6632 +192.111.32.0/255.255.255.0
 24.6633 +192.111.52.0/255.255.255.0
 24.6634 +192.111.86.0/255.255.255.0
 24.6635 +192.111.111.0/255.255.255.0
 24.6636 +192.111.123.0/255.255.255.0
 24.6637 +192.111.223.0/255.255.255.0
 24.6638 +192.111.228.0/255.255.255.0
 24.6639 +192.112.68.0/255.255.255.0
 24.6640 +192.112.97.0/255.255.255.0
 24.6641 +192.112.183.0/255.255.255.0
 24.6642 +192.112.211.0/255.255.255.0
 24.6643 +192.114.170.48/255.255.255.240
 24.6644 +192.117.128.64/255.255.255.192
 24.6645 +192.118.44.0/255.255.252.0
 24.6646 +192.120.193.0/255.255.255.0
 24.6647 +192.121.27.0/255.255.255.0
 24.6648 +192.121.30.0/255.255.255.0
 24.6649 +192.121.83.0/255.255.255.0
 24.6650 +192.121.228.0/255.255.255.0
 24.6651 +192.122.176.0/255.255.255.0
 24.6652 +192.122.213.0/255.255.255.0
 24.6653 +192.124.9.0/255.255.255.0
 24.6654 +192.124.33.0/255.255.255.0
 24.6655 +192.124.117.0/255.255.255.0
 24.6656 +192.124.119.0/255.255.255.0
 24.6657 +192.124.142.0/255.255.255.0
 24.6658 +192.124.150.0/255.255.255.0
 24.6659 +192.124.152.0/255.255.255.0
 24.6660 +192.124.164.0/255.255.255.0
 24.6661 +192.124.244.0/255.255.255.0
 24.6662 +192.129.62.0/255.255.255.0
 24.6663 +192.129.63.0/255.255.255.0
 24.6664 +192.129.65.0/255.255.255.0
 24.6665 +192.129.69.0/255.255.255.0
 24.6666 +192.129.86.0/255.255.255.0
 24.6667 +192.129.101.0/255.255.246.0
 24.6668 +192.130.76.0/255.255.255.192
 24.6669 +192.131.1.0/255.255.255.0
 24.6670 +192.131.93.0/255.255.255.0
 24.6671 +192.132.72.0/255.255.252.0
 24.6672 +192.132.79.0/255.255.255.0
 24.6673 +192.132.83.0/255.255.255.0
 24.6674 +192.132.84.0/255.255.255.0
 24.6675 +192.132.88.0/255.255.255.0
 24.6676 +192.132.103.0/255.255.255.0
 24.6677 +192.132.210.0/255.255.255.0
 24.6678 +192.133.41.0/255.255.255.0
 24.6679 +192.133.61.0/255.255.255.0
 24.6680 +192.133.70.0/255.255.255.0
 24.6681 +192.133.125.0/255.255.255.0
 24.6682 +192.134.15.0/255.255.254.0
 24.6683 +192.134.27.0/255.255.255.0
 24.6684 +192.134.100.0/255.255.255.0
 24.6685 +192.134.105.0/255.255.255.0
 24.6686 +192.134.107.0/255.255.255.0
 24.6687 +192.134.113.0/255.255.255.0
 24.6688 +192.134.126.0/255.255.252.0
 24.6689 +192.134.144.0/255.255.255.0
 24.6690 +192.134.146.0/255.255.255.0
 24.6691 +192.134.147.0/255.255.255.0
 24.6692 +192.134.149.0/255.255.255.0
 24.6693 +192.134.150.0/255.255.255.0
 24.6694 +192.134.151.0/255.255.255.0
 24.6695 +192.134.152.0/255.255.255.0
 24.6696 +192.134.153.0/255.255.255.0
 24.6697 +192.134.154.0/255.255.255.0
 24.6698 +192.134.155.0/255.255.255.0
 24.6699 +192.134.156.0/255.255.255.0
 24.6700 +192.134.157.0/255.255.255.0
 24.6701 +192.134.184.0/255.255.255.0
 24.6702 +192.134.208.0/255.255.255.0
 24.6703 +192.134.216.0/255.255.255.0
 24.6704 +192.134.220.0/255.255.253.0
 24.6705 +192.135.67.0/255.255.255.0
 24.6706 +192.135.78.0/255.255.255.0
 24.6707 +192.135.86.0/255.255.253.0
 24.6708 +192.135.122.0/255.255.255.0
 24.6709 +192.135.176.0/255.255.255.0
 24.6710 +192.135.177.0/255.255.255.0
 24.6711 +192.135.182.0/255.255.255.0
 24.6712 +192.136.12.0/255.255.255.0
 24.6713 +192.136.62.0/255.255.255.0
 24.6714 +192.136.126.0/255.255.254.0
 24.6715 +192.136.128.0/255.255.255.0
 24.6716 +192.136.130.0/255.255.255.0
 24.6717 +192.136.134.0/255.255.255.0
 24.6718 +192.137.0.0/255.255.0.0
 24.6719 +192.138.100.0/255.255.255.0
 24.6720 +192.138.118.0/255.255.246.0
 24.6721 +192.138.138.0/255.255.246.0
 24.6722 +192.138.169.0/255.255.255.0
 24.6723 +192.138.181.0/255.255.255.0
 24.6724 +192.139.8.0/255.255.255.0
 24.6725 +192.139.74.0/255.255.255.0
 24.6726 +192.139.209.0/255.255.252.0
 24.6727 +192.139.218.0/255.255.255.0
 24.6728 +192.139.250.0/255.255.255.0
 24.6729 +192.146.103.0/255.255.255.0
 24.6730 +192.146.104.0/255.255.255.0
 24.6731 +192.146.142.0/255.255.255.0
 24.6732 +192.146.205.0/255.255.255.0
 24.6733 +192.146.215.0/255.255.254.0
 24.6734 +192.147.14.0/255.255.254.0
 24.6735 +192.147.82.0/255.255.255.0
 24.6736 +192.147.117.0/255.255.232.0
 24.6737 +192.147.180.0/255.255.242.0
 24.6738 +192.147.195.0/255.255.241.0
 24.6739 +192.147.237.0/255.255.255.0
 24.6740 +192.147.251.0/255.255.255.0
 24.6741 +192.148.172.0/255.255.255.0
 24.6742 +192.148.195.0/255.255.255.0
 24.6743 +192.148.197.0/255.255.255.0
 24.6744 +192.149.16.0/255.255.255.0
 24.6745 +192.149.36.0/255.255.255.0
 24.6746 +192.149.56.0/255.255.255.0
 24.6747 +192.149.120.0/255.255.255.0
 24.6748 +192.149.213.0/255.255.255.0
 24.6749 +192.149.215.0/255.255.252.0
 24.6750 +192.149.229.0/255.255.255.0
 24.6751 +192.150.1.0/255.255.232.0
 24.6752 +192.150.76.0/255.255.255.0
 24.6753 +192.150.107.0/255.255.255.0
 24.6754 +192.150.122.0/255.255.255.0
 24.6755 +192.150.143.0/255.255.255.0
 24.6756 +192.150.202.0/255.255.255.0
 24.6757 +192.150.204.0/255.255.255.0
 24.6758 +192.151.1.0/255.255.172.0
 24.6759 +192.151.100.0/255.255.255.0
 24.6760 +192.151.111.0/255.255.238.0
 24.6761 +192.152.3.0/255.255.255.0
 24.6762 +192.152.7.0/255.255.255.0
 24.6763 +192.152.10.0/255.255.255.0
 24.6764 +192.152.61.0/255.255.255.0
 24.6765 +192.152.63.0/255.255.255.0
 24.6766 +192.152.120.0/255.255.255.0
 24.6767 +192.152.127.0/255.255.255.0
 24.6768 +192.152.139.0/255.255.255.0
 24.6769 +192.152.145.0/255.255.255.0
 24.6770 +192.152.206.0/255.255.255.0
 24.6771 +192.152.220.0/255.255.254.0
 24.6772 +192.152.246.0/255.255.255.0
 24.6773 +192.153.16.0/255.255.255.0
 24.6774 +192.153.133.0/255.255.255.0
 24.6775 +192.153.135.0/255.255.255.0
 24.6776 +192.153.137.0/255.255.255.0
 24.6777 +192.153.140.0/255.255.255.0
 24.6778 +192.153.141.0/255.255.255.0
 24.6779 +192.153.149.0/255.255.255.0
 24.6780 +192.153.221.0/255.255.233.0
 24.6781 +192.154.36.0/255.255.255.0
 24.6782 +192.154.40.0/255.255.255.0
 24.6783 +192.154.54.0/255.255.255.0
 24.6784 +192.155.1.0/255.255.250.0
 24.6785 +192.156.81.0/255.255.255.0
 24.6786 +192.156.82.0/255.255.255.0
 24.6787 +192.156.133.0/255.255.255.0
 24.6788 +192.156.155.0/255.255.254.0
 24.6789 +192.156.198.0/255.255.255.0
 24.6790 +192.156.206.0/255.255.255.0
 24.6791 +192.156.219.0/255.255.254.0
 24.6792 +192.156.222.0/255.255.254.0
 24.6793 +192.157.136.0/255.255.255.0
 24.6794 +192.157.171.0/255.255.255.0
 24.6795 +192.157.176.0/255.255.255.0
 24.6796 +192.157.186.0/255.255.255.0
 24.6797 +192.158.1.0/255.255.254.0
 24.6798 +192.159.11.0/255.255.255.0
 24.6799 +192.160.16.0/255.255.255.0
 24.6800 +192.160.34.0/255.255.255.0
 24.6801 +192.160.40.0/255.255.255.0
 24.6802 +192.160.95.0/255.255.254.0
 24.6803 +192.160.108.0/255.255.255.0
 24.6804 +192.160.110.0/255.255.255.0
 24.6805 +192.163.1.0/255.255.236.0
 24.6806 +192.165.16.0/255.255.255.0
 24.6807 +192.165.17.0/255.255.255.0
 24.6808 +192.165.18.0/255.255.255.0
 24.6809 +192.165.19.0/255.255.255.0
 24.6810 +192.165.20.0/255.255.255.0
 24.6811 +192.165.21.0/255.255.255.0
 24.6812 +192.165.22.0/255.255.254.0
 24.6813 +192.165.24.0/255.255.255.0
 24.6814 +192.165.25.0/255.255.255.0
 24.6815 +192.165.26.0/255.255.255.0
 24.6816 +192.165.67.0/255.255.255.0
 24.6817 +192.165.85.0/255.255.255.0
 24.6818 +192.165.113.0/255.255.255.0
 24.6819 +192.165.127.0/255.255.255.0
 24.6820 +192.165.208.0/255.255.240.0
 24.6821 +192.165.242.0/255.255.255.0
 24.6822 +192.166.84.0/255.255.244.0
 24.6823 +192.166.156.0/255.255.255.0
 24.6824 +192.167.3.0/255.255.255.0
 24.6825 +192.170.0.0/255.255.127.0
 24.6826 +192.171.1.0/255.255.251.0
 24.6827 +192.172.3.0/255.255.255.0
 24.6828 +192.172.4.0/255.255.255.0
 24.6829 +192.172.13.0/255.255.255.0
 24.6830 +192.172.16.0/255.255.255.0
 24.6831 +192.172.17.0/255.255.255.0
 24.6832 +192.175.8.0/255.255.251.0
 24.6833 +192.176.245.0/255.255.255.0
 24.6834 +192.187.138.0/255.255.255.0
 24.6835 +192.188.18.0/255.255.255.0
 24.6836 +192.188.106.0/255.255.255.0
 24.6837 +192.188.114.0/255.255.255.0
 24.6838 +192.188.115.0/255.255.255.0
 24.6839 +192.188.159.0/255.255.251.0
 24.6840 +192.188.186.0/255.255.255.0
 24.6841 +192.189.52.0/255.255.255.0
 24.6842 +192.189.102.0/255.255.255.0
 24.6843 +192.189.188.0/255.255.254.0
 24.6844 +192.189.206.0/255.255.255.0
 24.6845 +192.189.226.0/255.255.255.0
 24.6846 +192.189.234.0/255.255.252.0
 24.6847 +192.190.55.0/255.255.253.0
 24.6848 +192.190.61.0/255.255.255.0
 24.6849 +192.190.116.0/255.255.254.0
 24.6850 +192.190.119.0/255.255.255.0
 24.6851 +192.190.244.0/255.255.255.0
 24.6852 +192.194.225.0/255.255.255.0
 24.6853 +192.195.37.0/255.255.255.0
 24.6854 +192.195.44.0/255.255.244.0
 24.6855 +192.195.63.0/255.255.251.0
 24.6856 +192.195.108.0/255.255.255.0
 24.6857 +192.195.204.0/255.255.255.0
 24.6858 +192.195.246.0/255.255.255.0
 24.6859 +192.197.57.0/255.255.255.0
 24.6860 +192.197.167.0/255.255.255.0
 24.6861 +192.197.215.0/255.255.255.0
 24.6862 +192.197.233.0/255.255.246.0
 24.6863 +192.198.64.0/255.255.241.0
 24.6864 +192.203.43.0/255.255.255.0
 24.6865 +192.203.150.0/255.255.255.0
 24.6866 +192.203.182.0/255.255.252.0
 24.6867 +192.203.207.0/255.255.255.0
 24.6868 +192.203.235.0/255.255.255.0
 24.6869 +192.206.20.0/255.255.255.0
 24.6870 +192.206.38.0/255.255.255.0
 24.6871 +192.206.40.0/255.255.255.0
 24.6872 +192.206.51.0/255.255.255.0
 24.6873 +192.206.109.0/255.255.255.0
 24.6874 +192.206.180.0/255.255.255.0
 24.6875 +192.206.181.0/255.255.255.0
 24.6876 +192.206.184.0/255.255.255.0
 24.6877 +192.207.1.0/255.255.254.0
 24.6878 +192.207.24.0/255.255.255.0
 24.6879 +192.207.33.0/255.255.255.0
 24.6880 +192.207.113.0/255.255.255.0
 24.6881 +192.207.123.0/255.255.255.0
 24.6882 +192.207.156.0/255.255.253.0
 24.6883 +192.207.161.0/255.255.255.0
 24.6884 +192.207.185.0/255.255.255.0
 24.6885 +192.207.189.0/255.255.255.0
 24.6886 +192.207.197.0/255.255.254.0
 24.6887 +192.207.216.0/255.255.255.0
 24.6888 +192.207.240.0/255.255.254.0
 24.6889 +192.208.32.0/255.255.236.0
 24.6890 +192.209.32.0/255.255.226.0
 24.6891 +192.215.175.0/255.255.255.0
 24.6892 +192.215.248.0/255.255.255.0
 24.6893 +192.215.249.0/255.255.255.0
 24.6894 +192.216.166.0/255.255.255.0
 24.6895 +192.216.222.0/255.255.254.0
 24.6896 +192.222.64.0/255.255.234.0
 24.6897 +192.222.86.0/255.255.255.0
 24.6898 +192.222.87.0/255.255.242.0
 24.6899 +192.227.16.0/255.255.240.0
 24.6900 +192.228.64.0/255.255.241.0
 24.6901 +192.228.195.0/255.255.255.0
 24.6902 +192.230.0.0/255.255.240.0
 24.6903 +192.231.8.0/255.255.255.0
 24.6904 +192.231.10.0/255.255.255.0
 24.6905 +192.231.12.0/255.255.254.0
 24.6906 +192.231.17.0/255.255.246.0
 24.6907 +192.231.30.0/255.255.255.0
 24.6908 +192.231.58.0/255.255.255.0
 24.6909 +192.231.59.0/255.255.255.0
 24.6910 +192.231.128.0/255.255.255.0
 24.6911 +192.231.168.0/255.255.255.0
 24.6912 +192.231.212.0/255.255.255.0
 24.6913 +192.233.54.0/255.255.255.0
 24.6914 +192.234.35.0/255.255.255.0
 24.6915 +192.234.53.0/255.255.254.0
 24.6916 +192.234.93.0/255.255.255.0
 24.6917 +192.234.156.0/255.255.255.0
 24.6918 +192.234.163.0/255.255.254.0
 24.6919 +192.234.183.0/255.255.255.0
 24.6920 +192.234.239.0/255.255.255.0
 24.6921 +192.234.246.0/255.255.255.0
 24.6922 +192.239.92.0/255.255.255.0
 24.6923 +192.243.128.0/255.255.171.0
 24.6924 +192.245.37.0/255.255.251.0
 24.6925 +192.245.82.0/255.255.252.0
 24.6926 +192.245.97.0/255.255.255.0
 24.6927 +192.245.138.0/255.255.255.0
 24.6928 +192.245.179.0/255.255.255.0
 24.6929 +192.245.197.0/255.255.246.0
 24.6930 +192.245.210.0/255.255.248.0
 24.6931 +192.245.225.0/255.255.255.0
 24.6932 +192.246.40.0/255.255.255.0
 24.6933 +192.246.59.0/255.255.255.0
 24.6934 +192.246.60.0/255.255.255.0
 24.6935 +192.246.127.0/255.255.254.0
 24.6936 +192.246.136.0/255.255.255.0
 24.6937 +192.246.238.0/255.255.255.0
 24.6938 +192.251.5.0/255.255.254.0
 24.6939 +192.251.43.0/255.255.253.0
 24.6940 +192.251.66.0/255.255.249.0
 24.6941 +192.251.77.0/255.255.255.0
 24.6942 +192.251.92.0/255.255.255.0
 24.6943 +192.251.132.0/255.255.251.0
 24.6944 +192.251.138.0/255.255.255.0
 24.6945 +193.2.218.0/255.255.254.0
 24.6946 +193.2.220.0/255.255.254.0
 24.6947 +193.3.43.0/255.255.255.0
 24.6948 +193.4.142.0/255.255.255.0
 24.6949 +193.5.61.104/255.255.255.248
 24.6950 +193.5.76.0/255.255.252.0
 24.6951 +193.5.88.0/255.255.248.0
 24.6952 +193.5.176.0/255.255.254.0
 24.6953 +193.5.216.0/255.255.248.0
 24.6954 +193.5.240.0/255.255.246.0
 24.6955 +193.6.115.0/255.255.255.0
 24.6956 +193.6.216.0/255.255.254.0
 24.6957 +193.7.224.0/255.255.224.0
 24.6958 +193.8.88.0/255.255.252.0
 24.6959 +193.8.138.0/255.255.255.0
 24.6960 +193.8.197.0/255.255.255.0
 24.6961 +193.9.1.0/255.255.249.0
 24.6962 +193.9.32.0/255.255.240.0
 24.6963 +193.9.128.0/255.255.236.0
 24.6964 +193.12.124.0/255.255.255.0
 24.6965 +193.13.133.0/255.255.255.0
 24.6966 +193.13.229.0/255.255.255.0
 24.6967 +193.15.85.0/255.255.255.128
 24.6968 +193.15.193.64/255.255.255.224
 24.6969 +193.16.3.0/255.255.255.0
 24.6970 +193.16.212.0/255.255.255.0
 24.6971 +193.16.222.0/255.255.254.0
 24.6972 +193.16.228.0/255.255.255.0
 24.6973 +193.16.230.0/255.255.254.0
 24.6974 +193.16.237.0/255.255.255.0
 24.6975 +193.16.248.0/255.255.254.0
 24.6976 +193.16.252.0/255.255.253.0
 24.6977 +193.17.6.0/255.255.255.0
 24.6978 +193.17.72.0/255.255.255.0
 24.6979 +193.17.80.0/255.255.252.0
 24.6980 +193.17.86.0/255.255.246.0
 24.6981 +193.17.176.0/255.255.254.0
 24.6982 +193.17.180.0/255.255.251.0
 24.6983 +193.17.190.0/255.255.254.0
 24.6984 +193.19.32.0/255.255.224.0
 24.6985 +193.22.20.0/255.255.255.0
 24.6986 +193.22.22.0/255.255.250.0
 24.6987 +193.22.112.0/255.255.252.0
 24.6988 +193.22.144.0/255.255.240.0
 24.6989 +193.22.224.0/255.255.238.0
 24.6990 +193.23.252.0/255.255.255.0
 24.6991 +193.24.40.0/255.255.248.0
 24.6992 +193.24.88.0/255.255.248.0
 24.6993 +193.24.128.0/255.255.192.0
 24.6994 +193.25.48.0/255.255.240.0
 24.6995 +193.26.96.0/255.255.240.0
 24.6996 +193.26.130.0/255.255.255.0
 24.6997 +193.26.192.0/255.255.240.0
 24.6998 +193.26.224.0/255.255.240.0
 24.6999 +193.27.18.0/255.255.255.0
 24.7000 +193.27.24.0/255.255.255.0
 24.7001 +193.27.128.0/255.255.192.0
 24.7002 +193.28.1.0/255.255.255.0
 24.7003 +193.28.32.0/255.255.252.0
 24.7004 +193.28.40.0/255.255.254.0
 24.7005 +193.28.64.0/255.255.248.0
 24.7006 +193.28.104.0/255.255.254.0
 24.7007 +193.28.206.0/255.255.255.0
 24.7008 +193.28.240.0/255.255.246.0
 24.7009 +193.29.4.0/255.255.255.0
 24.7010 +193.29.11.0/255.255.251.0
 24.7011 +193.29.24.0/255.255.255.0
 24.7012 +193.29.30.0/255.255.254.0
 24.7013 +193.29.179.0/255.255.255.0
 24.7014 +193.29.228.0/255.255.254.0
 24.7015 +193.30.28.0/255.255.252.0
 24.7016 +193.30.48.0/255.255.240.0
 24.7017 +193.30.80.0/255.255.248.0
 24.7018 +193.30.130.0/255.255.254.0
 24.7019 +193.31.21.0/255.255.255.0
 24.7020 +193.31.64.0/255.255.240.0
 24.7021 +193.31.96.0/255.255.224.0
 24.7022 +193.31.224.0/255.255.240.0
 24.7023 +193.32.6.0/255.255.254.0
 24.7024 +193.32.28.0/255.255.254.0
 24.7025 +193.32.246.0/255.255.252.0
 24.7026 +193.35.13.0/255.255.255.0
 24.7027 +193.35.158.0/255.255.252.0
 24.7028 +193.36.16.0/255.255.240.0
 24.7029 +193.36.170.0/255.255.254.0
 24.7030 +193.36.192.0/255.255.224.0
 24.7031 +193.37.192.0/255.255.224.0
 24.7032 +193.39.141.0/255.255.255.0
 24.7033 +193.41.200.0/255.255.255.0
 24.7034 +193.42.1.0/255.255.255.0
 24.7035 +193.42.15.0/255.255.255.0
 24.7036 +193.42.134.0/255.255.255.0
 24.7037 +193.42.140.0/255.255.254.0
 24.7038 +193.43.14.0/255.255.255.0
 24.7039 +193.43.20.0/255.255.252.0
 24.7040 +193.43.28.0/255.255.255.0
 24.7041 +193.43.76.0/255.255.255.0
 24.7042 +193.43.80.0/255.255.248.0
 24.7043 +193.43.100.0/255.255.255.0
 24.7044 +193.43.101.0/255.255.255.0
 24.7045 +193.43.106.0/255.255.253.0
 24.7046 +193.43.134.0/255.255.255.0
 24.7047 +193.43.137.0/255.255.255.0
 24.7048 +193.45.190.0/255.255.255.0
 24.7049 +193.45.244.0/255.255.255.0
 24.7050 +193.46.250.0/255.255.255.0
 24.7051 +193.47.64.0/255.255.253.0
 24.7052 +193.47.104.0/255.255.224.0
 24.7053 +193.47.168.0/255.255.240.0
 24.7054 +193.47.230.0/255.255.255.0
 24.7055 +193.47.255.0/255.255.255.0
 24.7056 +193.48.0.0/255.255.255.0
 24.7057 +193.48.2.0/255.255.255.0
 24.7058 +193.48.9.0/255.255.254.0
 24.7059 +193.48.11.0/255.255.255.0
 24.7060 +193.48.12.0/255.255.255.0
 24.7061 +193.48.13.0/255.255.255.0
 24.7062 +193.48.14.0/255.255.255.0
 24.7063 +193.48.15.0/255.255.255.0
 24.7064 +193.48.16.0/255.255.255.0
 24.7065 +193.48.17.0/255.255.255.0
 24.7066 +193.48.18.0/255.255.255.0
 24.7067 +193.48.20.0/255.255.255.0
 24.7068 +193.48.21.0/255.255.254.0
 24.7069 +193.48.23.0/255.255.255.0
 24.7070 +193.48.28.0/255.255.255.0
 24.7071 +193.48.42.0/255.255.255.0
 24.7072 +193.48.67.0/255.255.255.0
 24.7073 +193.48.69.0/255.255.255.0
 24.7074 +193.48.104.0/255.255.255.0
 24.7075 +193.48.107.0/255.255.255.0
 24.7076 +193.48.109.0/255.255.253.0
 24.7077 +193.48.120.0/255.255.246.0
 24.7078 +193.48.141.0/255.255.255.0
 24.7079 +193.48.143.0/255.255.255.0
 24.7080 +193.48.163.0/255.255.255.0
 24.7081 +193.48.168.0/255.255.254.0
 24.7082 +193.48.177.0/255.255.255.0
 24.7083 +193.48.178.0/255.255.255.0
 24.7084 +193.48.183.0/255.255.255.128
 24.7085 +193.48.198.0/255.255.255.0
 24.7086 +193.48.203.0/255.255.255.0
 24.7087 +193.48.205.0/255.255.255.0
 24.7088 +193.48.206.0/255.255.255.0
 24.7089 +193.48.207.0/255.255.255.0
 24.7090 +193.48.212.0/255.255.254.0
 24.7091 +193.48.214.0/255.255.254.0
 24.7092 +193.48.220.0/255.255.255.0
 24.7093 +193.48.223.0/255.255.255.0
 24.7094 +193.48.247.0/255.255.255.128
 24.7095 +193.48.248.0/255.255.255.0
 24.7096 +193.48.250.0/255.255.255.0
 24.7097 +193.48.252.0/255.255.255.0
 24.7098 +193.49.5.0/255.255.255.0
 24.7099 +193.49.15.0/255.255.255.0
 24.7100 +193.49.17.0/255.255.255.0
 24.7101 +193.49.24.0/255.255.255.0
 24.7102 +193.49.27.128/255.255.255.128
 24.7103 +193.49.29.0/255.255.255.0
 24.7104 +193.49.36.0/255.255.254.192
 24.7105 +193.49.39.0/255.255.255.128
 24.7106 +193.49.65.0/255.255.255.192
 24.7107 +193.49.68.0/255.255.252.0
 24.7108 +193.49.104.0/255.255.255.0
 24.7109 +193.49.105.0/255.255.255.0
 24.7110 +193.49.106.0/255.255.255.0
 24.7111 +193.49.107.0/255.255.255.0
 24.7112 +193.49.108.0/255.255.255.0
 24.7113 +193.49.111.0/255.255.255.0
 24.7114 +193.49.114.0/255.255.254.0
 24.7115 +193.49.122.0/255.255.255.0
 24.7116 +193.49.128.0/255.255.255.0
 24.7117 +193.49.129.0/255.255.255.0
 24.7118 +193.49.130.0/255.255.255.0
 24.7119 +193.49.131.0/255.255.255.0
 24.7120 +193.49.138.0/255.255.255.0
 24.7121 +193.49.143.0/255.255.255.0
 24.7122 +193.49.152.0/255.255.255.0
 24.7123 +193.49.157.0/255.255.255.0
 24.7124 +193.49.158.0/255.255.255.0
 24.7125 +193.49.159.0/255.255.255.0
 24.7126 +193.49.160.0/255.255.255.0
 24.7127 +193.49.178.0/255.255.255.0
 24.7128 +193.49.206.0/255.255.255.0
 24.7129 +193.49.216.0/255.255.244.255
 24.7130 +193.49.239.0/255.255.255.0
 24.7131 +193.49.251.0/255.255.255.0
 24.7132 +193.50.5.0/255.255.255.0
 24.7133 +193.50.8.0/255.255.255.0
 24.7134 +193.50.10.0/255.255.254.0
 24.7135 +193.50.12.0/255.255.255.0
 24.7136 +193.50.13.0/255.255.255.0
 24.7137 +193.50.14.0/255.255.255.0
 24.7138 +193.50.15.0/255.255.255.0
 24.7139 +193.50.17.0/255.255.255.0
 24.7140 +193.50.18.0/255.255.255.0
 24.7141 +193.50.19.0/255.255.255.128
 24.7142 +193.50.20.0/255.255.255.240
 24.7143 +193.50.20.16/255.255.255.192
 24.7144 +193.50.21.0/255.255.255.0
 24.7145 +193.50.22.0/255.255.255.128
 24.7146 +193.50.23.0/255.255.255.0
 24.7147 +193.50.24.0/255.255.255.0
 24.7148 +193.50.25.0/255.255.255.0
 24.7149 +193.50.30.0/255.255.255.0
 24.7150 +193.50.31.0/255.255.255.0
 24.7151 +193.50.32.0/255.255.255.128
 24.7152 +193.50.33.0/255.255.255.0
 24.7153 +193.50.34.0/255.255.255.0
 24.7154 +193.50.35.0/255.255.255.128
 24.7155 +193.50.36.0/255.255.255.0
 24.7156 +193.50.37.0/255.255.255.0
 24.7157 +193.50.65.0/255.255.255.0
 24.7158 +193.50.79.96/255.255.255.224
 24.7159 +193.50.251.0/255.255.255.0
 24.7160 +193.50.254.0/255.255.255.0
 24.7161 +193.51.1.0/255.255.255.0
 24.7162 +193.51.136.0/255.255.255.0
 24.7163 +193.51.137.0/255.255.255.0
 24.7164 +193.51.140.0/255.255.255.0
 24.7165 +193.51.141.0/255.255.255.0
 24.7166 +193.51.142.0/255.255.255.0
 24.7167 +193.51.143.0/255.255.255.0
 24.7168 +193.51.146.0/255.255.255.0
 24.7169 +193.51.165.0/255.255.255.0
 24.7170 +193.51.166.0/255.255.255.0
 24.7171 +193.51.167.0/255.255.255.0
 24.7172 +193.51.169.0/255.255.255.0
 24.7173 +193.51.170.0/255.255.255.0
 24.7174 +193.51.171.0/255.255.255.0
 24.7175 +193.51.192.0/255.255.255.0
 24.7176 +193.51.193.0/255.255.255.0
 24.7177 +193.51.194.0/255.255.255.0
 24.7178 +193.51.196.0/255.255.255.0
 24.7179 +193.51.197.0/255.255.255.0
 24.7180 +193.51.198.0/255.255.255.0
 24.7181 +193.51.209.0/255.255.255.0
 24.7182 +193.52.4.0/255.255.255.0
 24.7183 +193.52.21.0/255.255.255.192
 24.7184 +193.52.70.0/255.255.255.0
 24.7185 +193.53.37.0/255.255.255.0
 24.7186 +193.53.113.0/255.255.244.0
 24.7187 +193.53.250.0/255.255.255.0
 24.7188 +193.54.17.0/255.255.255.0
 24.7189 +193.54.18.0/255.255.255.0
 24.7190 +193.54.48.0/255.255.255.248
 24.7191 +193.54.56.0/255.255.255.0
 24.7192 +193.54.57.0/255.255.255.0
 24.7193 +193.54.58.0/255.255.255.0
 24.7194 +193.54.59.0/255.255.255.0
 24.7195 +193.54.60.0/255.255.255.0
 24.7196 +193.54.61.0/255.255.255.0
 24.7197 +193.54.62.0/255.255.255.0
 24.7198 +193.54.63.0/255.255.255.0
 24.7199 +193.54.64.0/255.255.255.0
 24.7200 +193.54.65.0/255.255.255.0
 24.7201 +193.54.96.0/255.255.255.0
 24.7202 +193.54.97.0/255.255.255.0
 24.7203 +193.54.98.0/255.255.255.0
 24.7204 +193.54.99.0/255.255.255.0
 24.7205 +193.54.101.0/255.255.255.0
 24.7206 +193.54.102.0/255.255.255.0
 24.7207 +193.54.104.0/255.255.255.0
 24.7208 +193.54.105.0/255.255.255.0
 24.7209 +193.54.106.0/255.255.255.0
 24.7210 +193.54.124.0/255.255.255.0
 24.7211 +193.54.125.0/255.255.255.0
 24.7212 +193.54.126.0/255.255.255.0
 24.7213 +193.54.127.0/255.255.255.0
 24.7214 +193.55.52.0/255.255.255.0
 24.7215 +193.55.55.0/255.255.255.0
 24.7216 +193.55.107.0/255.255.255.0
 24.7217 +193.55.109.0/255.255.255.0
 24.7218 +193.55.152.248/255.255.255.248
 24.7219 +193.55.214.0/255.255.255.0
 24.7220 +193.55.234.0/255.255.254.0
 24.7221 +193.55.237.0/255.255.255.0
 24.7222 +193.55.240.0/255.255.255.0
 24.7223 +193.56.32.0/255.255.244.0
 24.7224 +193.56.44.0/255.255.254.0
 24.7225 +193.56.106.0/255.255.255.0
 24.7226 +193.57.49.0/255.255.255.0
 24.7227 +193.57.51.0/255.255.255.0
 24.7228 +193.57.89.0/255.255.255.0
 24.7229 +193.57.176.0/255.255.252.0
 24.7230 +193.58.92.0/255.255.252.0
 24.7231 +193.58.132.0/255.255.253.0
 24.7232 +193.58.192.0/255.255.250.0
 24.7233 +193.63.54.0/255.255.255.0
 24.7234 +193.63.67.0/255.255.255.0
 24.7235 +193.63.202.0/255.255.255.0
 24.7236 +193.63.240.0/255.255.248.0
 24.7237 +193.64.3.208/255.255.255.248
 24.7238 +193.64.42.104/255.255.255.248
 24.7239 +193.64.205.176/255.255.255.248
 24.7240 +193.64.249.192/255.255.255.224
 24.7241 +193.65.33.80/255.255.255.248
 24.7242 +193.65.83.128/255.255.255.224
 24.7243 +193.65.218.96/255.255.255.240
 24.7244 +193.66.56.192/255.255.255.240
 24.7245 +193.66.186.96/255.255.255.240
 24.7246 +193.67.16.0/255.255.254.0
 24.7247 +193.67.20.0/255.255.253.0
 24.7248 +193.67.48.0/255.255.250.0
 24.7249 +193.67.120.0/255.255.252.0
 24.7250 +193.67.130.0/255.255.255.0
 24.7251 +193.67.246.248/255.255.255.248
 24.7252 +193.69.60.128/255.255.255.248
 24.7253 +193.69.249.40/255.255.255.248
 24.7254 +193.70.12.0/255.255.252.0
 24.7255 +193.70.28.0/255.255.255.0
 24.7256 +193.70.106.16/255.255.255.240
 24.7257 +193.70.121.192/255.255.255.192
 24.7258 +193.70.162.64/255.255.255.224
 24.7259 +193.70.224.0/255.255.255.0
 24.7260 +193.70.238.0/255.255.255.0
 24.7261 +193.71.60.0/255.255.252.0
 24.7262 +193.71.210.0/255.255.250.0
 24.7263 +193.71.216.0/255.255.255.240
 24.7264 +193.72.195.0/255.255.255.0
 24.7265 +193.72.208.0/255.255.255.0
 24.7266 +193.72.224.0/255.255.254.0
 24.7267 +193.73.206.0/255.255.254.0
 24.7268 +193.74.19.0/255.255.255.0
 24.7269 +193.74.118.0/255.255.255.0
 24.7270 +193.74.126.0/255.255.255.0
 24.7271 +193.74.145.128/255.255.255.192
 24.7272 +193.74.145.192/255.255.255.224
 24.7273 +193.74.217.16/255.255.255.240
 24.7274 +193.74.243.0/255.255.255.0
 24.7275 +193.74.248.8/255.255.255.248
 24.7276 +193.74.248.16/255.255.255.240
 24.7277 +193.75.240.0/255.255.255.0
 24.7278 +193.76.87.0/255.255.255.0
 24.7279 +193.76.127.0/255.255.255.0
 24.7280 +193.76.214.0/255.255.255.0
 24.7281 +193.76.218.0/255.255.255.0
 24.7282 +193.76.220.0/255.255.255.0
 24.7283 +193.77.187.0/255.255.255.0
 24.7284 +193.78.24.0/255.255.255.0
 24.7285 +193.78.57.0/255.255.255.0
 24.7286 +193.78.59.0/255.255.255.0
 24.7287 +193.78.188.0/255.255.254.0
 24.7288 +193.78.211.0/255.255.255.0
 24.7289 +193.79.24.0/255.255.252.0
 24.7290 +193.79.133.0/255.255.255.0
 24.7291 +193.79.142.64/255.255.255.248
 24.7292 +193.79.181.80/255.255.255.240
 24.7293 +193.79.214.0/255.255.254.0
 24.7294 +193.80.53.224/255.255.255.248
 24.7295 +193.80.118.24/255.255.255.248
 24.7296 +193.81.2.0/255.255.255.0
 24.7297 +193.81.95.0/255.255.255.0
 24.7298 +193.81.105.0/255.255.255.248
 24.7299 +193.81.191.0/255.255.255.0
 24.7300 +193.81.243.0/255.255.255.0
 24.7301 +193.82.18.224/255.255.255.240
 24.7302 +193.82.57.0/255.255.255.0
 24.7303 +193.82.112.192/255.255.255.240
 24.7304 +193.82.145.128/255.255.255.248
 24.7305 +193.83.85.0/255.255.255.0
 24.7306 +193.84.114.0/255.255.255.0
 24.7307 +193.84.249.0/255.255.255.0
 24.7308 +193.85.112.0/255.255.224.0
 24.7309 +193.85.207.112/255.255.255.248
 24.7310 +193.86.16.0/255.255.240.0
 24.7311 +193.87.75.64/255.255.255.224
 24.7312 +193.88.98.0/255.255.255.0
 24.7313 +193.88.111.0/255.255.255.0
 24.7314 +193.89.103.32/255.255.255.224
 24.7315 +193.89.135.112/255.255.255.240
 24.7316 +193.90.252.0/255.255.255.0
 24.7317 +193.91.96.128/255.255.255.192
 24.7318 +193.91.96.240/255.255.255.248
 24.7319 +193.91.115.0/255.255.255.0
 24.7320 +193.92.13.128/255.255.255.128
 24.7321 +193.92.120.0/255.255.255.192
 24.7322 +193.92.134.64/255.255.255.192
 24.7323 +193.95.145.80/255.255.255.248
 24.7324 +193.95.145.128/255.255.255.224
 24.7325 +193.95.148.128/255.255.255.224
 24.7326 +193.95.168.0/255.255.255.248
 24.7327 +193.96.7.0/255.255.255.0
 24.7328 +193.96.24.0/255.255.255.0
 24.7329 +193.96.27.0/255.255.254.0
 24.7330 +193.96.33.48/255.255.255.248
 24.7331 +193.96.33.96/255.255.255.224
 24.7332 +193.96.33.224/255.255.255.224
 24.7333 +193.96.150.0/255.255.255.0
 24.7334 +193.96.156.0/255.255.254.0
 24.7335 +193.96.165.0/255.255.255.0
 24.7336 +193.96.193.80/255.255.255.240
 24.7337 +193.96.194.128/255.255.255.240
 24.7338 +193.96.195.0/255.255.255.224
 24.7339 +193.96.197.128/255.255.255.128
 24.7340 +193.96.198.128/255.255.255.128
 24.7341 +193.96.219.0/255.255.253.0
 24.7342 +193.96.254.0/255.255.254.0
 24.7343 +193.97.0.0/255.255.128.0
 24.7344 +193.97.129.0/255.255.255.0
 24.7345 +193.97.191.0/255.255.255.0
 24.7346 +193.97.199.192/255.255.255.192
 24.7347 +193.97.202.160/255.255.255.240
 24.7348 +193.97.206.224/255.255.255.224
 24.7349 +193.97.207.128/255.255.255.128
 24.7350 +193.97.228.0/255.255.255.0
 24.7351 +193.97.240.0/255.255.248.0
 24.7352 +193.98.2.0/255.255.255.0
 24.7353 +193.98.46.80/255.255.255.224
 24.7354 +193.98.46.128/255.255.255.128
 24.7355 +193.98.99.0/255.255.255.0
 24.7356 +193.98.101.0/255.255.255.0
 24.7357 +193.98.144.0/255.255.254.0
 24.7358 +193.98.154.0/255.255.255.0
 24.7359 +193.98.159.0/255.255.255.0
 24.7360 +193.98.176.0/255.255.254.0
 24.7361 +193.98.186.192/255.255.255.248
 24.7362 +193.98.217.88/255.255.255.248
 24.7363 +193.98.217.128/255.255.255.128
 24.7364 +193.98.223.0/255.255.255.0
 24.7365 +193.98.227.0/255.255.255.0
 24.7366 +193.98.231.0/255.255.255.0
 24.7367 +193.98.237.240/255.255.255.248
 24.7368 +193.98.238.0/255.255.254.0
 24.7369 +193.98.250.0/255.255.255.0
 24.7370 +193.99.36.224/255.255.255.224
 24.7371 +193.99.47.0/255.255.255.0
 24.7372 +193.99.49.128/255.255.255.208
 24.7373 +193.99.52.0/255.255.254.0
 24.7374 +193.99.57.128/255.255.255.192
 24.7375 +193.99.59.160/255.255.255.224
 24.7376 +193.99.59.240/255.255.255.240
 24.7377 +193.99.61.72/255.255.255.248
 24.7378 +193.99.61.144/255.255.255.240
 24.7379 +193.99.94.0/255.255.255.0
 24.7380 +193.99.116.232/255.255.255.248
 24.7381 +193.99.119.0/255.255.255.224
 24.7382 +193.99.121.16/255.255.255.208
 24.7383 +193.99.124.136/255.255.255.248
 24.7384 +193.99.144.0/255.255.255.185
 24.7385 +193.99.144.72/255.255.254.72
 24.7386 +193.99.156.0/255.255.255.0
 24.7387 +193.99.159.0/255.255.255.0
 24.7388 +193.99.183.0/255.255.255.0
 24.7389 +193.99.192.0/255.255.240.0
 24.7390 +193.99.213.0/255.255.255.0
 24.7391 +193.99.220.0/255.255.255.0
 24.7392 +193.99.224.0/255.255.250.0
 24.7393 +193.99.250.0/255.255.254.0
 24.7394 +193.100.12.0/255.255.255.0
 24.7395 +193.100.116.0/255.255.252.0
 24.7396 +193.100.152.0/255.255.254.0
 24.7397 +193.100.154.160/255.255.255.160
 24.7398 +193.100.163.0/255.255.255.0
 24.7399 +193.100.165.0/255.255.255.0
 24.7400 +193.100.179.0/255.255.255.0
 24.7401 +193.100.209.0/255.255.255.0
 24.7402 +193.100.213.0/255.255.255.0
 24.7403 +193.100.220.0/255.255.254.0
 24.7404 +193.100.228.0/255.255.251.0
 24.7405 +193.100.237.0/255.255.255.0
 24.7406 +193.100.254.0/255.255.254.0
 24.7407 +193.101.11.0/255.255.255.0
 24.7408 +193.101.16.0/255.255.255.0
 24.7409 +193.101.18.0/255.255.255.0
 24.7410 +193.101.37.0/255.255.254.0
 24.7411 +193.101.65.0/255.255.255.0
 24.7412 +193.101.67.0/255.255.255.0
 24.7413 +193.101.69.0/255.255.254.0
 24.7414 +193.101.71.64/255.255.255.224
 24.7415 +193.101.73.0/255.255.255.0
 24.7416 +193.101.75.176/255.255.255.240
 24.7417 +193.101.78.0/255.255.255.0
 24.7418 +193.101.96.72/255.255.255.248
 24.7419 +193.101.99.0/255.255.254.0
 24.7420 +193.101.105.0/255.255.255.0
 24.7421 +193.101.116.0/255.255.254.0
 24.7422 +193.101.124.0/255.255.254.0
 24.7423 +193.101.154.240/255.255.255.248
 24.7424 +193.101.155.0/255.255.255.0
 24.7425 +193.101.160.0/255.255.255.0
 24.7426 +193.101.165.208/255.255.255.240
 24.7427 +193.101.179.0/255.255.255.0
 24.7428 +193.101.184.0/255.255.255.0
 24.7429 +193.101.189.0/255.255.254.0
 24.7430 +193.101.200.0/255.255.248.0
 24.7431 +193.101.214.0/255.255.248.0
 24.7432 +193.101.240.0/255.255.246.0
 24.7433 +193.101.254.0/255.255.255.0
 24.7434 +193.102.6.0/255.255.254.0
 24.7435 +193.102.16.0/255.255.255.0
 24.7436 +193.102.25.0/255.255.255.0
 24.7437 +193.102.28.0/255.255.254.0
 24.7438 +193.102.36.0/255.255.254.0
 24.7439 +193.102.45.0/255.255.255.0
 24.7440 +193.102.52.0/255.255.255.0
 24.7441 +193.102.59.0/255.255.255.0
 24.7442 +193.102.70.0/255.255.254.0
 24.7443 +193.102.74.0/255.255.255.0
 24.7444 +193.102.82.0/255.255.255.0
 24.7445 +193.102.99.0/255.255.255.0
 24.7446 +193.102.110.0/255.255.255.0
 24.7447 +193.102.155.0/255.255.254.0
 24.7448 +193.102.158.0/255.255.254.0
 24.7449 +193.102.160.128/255.255.255.192
 24.7450 +193.102.172.0/255.255.254.0
 24.7451 +193.102.176.0/255.255.254.0
 24.7452 +193.102.186.0/255.255.255.0
 24.7453 +193.102.187.32/255.255.255.224
 24.7454 +193.102.193.104/255.255.255.248
 24.7455 +193.102.199.128/255.255.255.128
 24.7456 +193.102.203.0/255.255.255.0
 24.7457 +193.102.224.0/255.255.255.0
 24.7458 +193.103.131.0/255.255.255.0
 24.7459 +193.103.167.0/255.255.255.0
 24.7460 +193.103.190.0/255.255.255.0
 24.7461 +193.103.208.0/255.255.252.0
 24.7462 +193.103.254.0/255.255.255.0
 24.7463 +193.104.3.0/255.255.255.240
 24.7464 +193.104.122.0/255.255.255.0
 24.7465 +193.104.224.0/255.255.252.0
 24.7466 +193.104.228.0/255.255.255.0
 24.7467 +193.104.229.0/255.255.255.192
 24.7468 +193.106.68.0/255.255.255.0
 24.7469 +193.106.124.0/255.255.255.192
 24.7470 +193.108.8.0/255.255.248.0
 24.7471 +193.110.130.0/255.255.255.0
 24.7472 +193.111.252.0/255.255.252.0
 24.7473 +193.112.255.0/255.255.255.0
 24.7474 +193.113.209.8/255.255.255.238
 24.7475 +193.114.79.200/255.255.255.248
 24.7476 +193.114.92.0/255.255.255.0
 24.7477 +193.114.208.112/255.255.255.240
 24.7478 +193.114.208.176/255.255.255.240
 24.7479 +193.115.130.0/255.255.255.128
 24.7480 +193.115.132.128/255.255.255.128
 24.7481 +193.115.151.128/255.255.255.192
 24.7482 +193.115.229.0/255.255.255.240
 24.7483 +193.115.229.128/255.255.255.240
 24.7484 +193.115.231.0/255.255.255.0
 24.7485 +193.115.246.192/255.255.255.192
 24.7486 +193.116.4.64/255.255.255.192
 24.7487 +193.116.24.192/255.255.255.240
 24.7488 +193.117.106.32/255.255.255.240
 24.7489 +193.119.133.0/255.255.255.240
 24.7490 +193.119.138.128/255.255.255.224
 24.7491 +193.120.46.32/255.255.255.240
 24.7492 +193.120.46.96/255.255.255.240
 24.7493 +193.120.107.240/255.255.255.240
 24.7494 +193.120.126.240/255.255.255.248
 24.7495 +193.120.129.64/255.255.255.248
 24.7496 +193.120.133.40/255.255.255.248
 24.7497 +193.120.135.136/255.255.255.248
 24.7498 +193.120.136.0/255.255.255.248
 24.7499 +193.120.136.192/255.255.255.248
 24.7500 +193.120.140.80/255.255.255.248
 24.7501 +193.120.144.16/255.255.255.248
 24.7502 +193.120.145.200/255.255.255.248
 24.7503 +193.120.149.160/255.255.255.248
 24.7504 +193.120.160.0/255.255.255.0
 24.7505 +193.120.180.0/255.255.255.0
 24.7506 +193.121.1.8/255.255.255.248
 24.7507 +193.121.1.32/255.255.255.240
 24.7508 +193.121.1.192/255.255.255.224
 24.7509 +193.121.1.240/255.255.255.248
 24.7510 +193.121.3.0/255.255.255.0
 24.7511 +193.121.8.0/255.255.255.0
 24.7512 +193.121.13.32/255.255.255.248
 24.7513 +193.121.13.224/255.255.255.240
 24.7514 +193.121.15.0/255.255.255.0
 24.7515 +193.121.18.0/255.255.255.0
 24.7516 +193.121.26.0/255.255.254.0
 24.7517 +193.121.40.0/255.255.255.0
 24.7518 +193.121.42.32/255.255.255.224
 24.7519 +193.121.42.160/255.255.255.224
 24.7520 +193.121.48.192/255.255.255.224
 24.7521 +193.121.50.0/255.255.255.0
 24.7522 +193.121.52.8/255.255.255.248
 24.7523 +193.121.52.64/255.255.255.224
 24.7524 +193.121.52.224/255.255.255.240
 24.7525 +193.121.71.0/255.255.255.0
 24.7526 +193.121.72.0/255.255.255.128
 24.7527 +193.121.74.0/255.255.255.0
 24.7528 +193.121.76.0/255.255.255.0
 24.7529 +193.121.79.0/255.255.255.0
 24.7530 +193.121.80.16/255.255.255.240
 24.7531 +193.121.80.128/255.255.255.224
 24.7532 +193.121.85.16/255.255.255.240
 24.7533 +193.121.85.192/255.255.255.224
 24.7534 +193.121.85.224/255.255.255.240
 24.7535 +193.121.85.240/255.255.255.248
 24.7536 +193.121.87.64/255.255.255.192
 24.7537 +193.121.88.8/255.255.255.248
 24.7538 +193.121.89.160/255.255.255.224
 24.7539 +193.121.89.224/255.255.255.240
 24.7540 +193.121.94.0/255.255.255.0
 24.7541 +193.121.97.128/255.255.255.192
 24.7542 +193.121.99.224/255.255.255.240
 24.7543 +193.121.107.128/255.255.255.192
 24.7544 +193.121.107.192/255.255.255.224
 24.7545 +193.121.115.32/255.255.255.224
 24.7546 +193.121.117.0/255.255.255.0
 24.7547 +193.121.121.0/255.255.255.0
 24.7548 +193.121.132.128/255.255.255.192
 24.7549 +193.121.137.240/255.255.255.248
 24.7550 +193.121.138.8/255.255.255.248
 24.7551 +193.121.138.224/255.255.255.240
 24.7552 +193.121.148.128/255.255.255.192
 24.7553 +193.121.149.8/255.255.255.248
 24.7554 +193.121.150.32/255.255.255.224
 24.7555 +193.121.162.0/255.255.255.0
 24.7556 +193.121.163.0/255.255.255.0
 24.7557 +193.121.165.32/255.255.255.224
 24.7558 +193.121.165.192/255.255.255.224
 24.7559 +193.121.175.32/255.255.255.224
 24.7560 +193.121.175.192/255.255.255.224
 24.7561 +193.121.175.240/255.255.255.248
 24.7562 +193.121.176.8/255.255.255.248
 24.7563 +193.121.176.32/255.255.255.224
 24.7564 +193.121.176.160/255.255.255.224
 24.7565 +193.121.177.0/255.255.255.0
 24.7566 +193.121.186.128/255.255.255.248
 24.7567 +193.121.205.0/255.255.255.0
 24.7568 +193.121.206.128/255.255.255.224
 24.7569 +193.121.206.160/255.255.255.224
 24.7570 +193.121.210.224/255.255.255.240
 24.7571 +193.121.216.0/255.255.255.0
 24.7572 +193.121.217.128/255.255.255.192
 24.7573 +193.121.220.128/255.255.255.192
 24.7574 +193.121.243.32/255.255.255.224
 24.7575 +193.121.244.0/255.255.255.0
 24.7576 +193.121.247.232/255.255.255.248
 24.7577 +193.122.19.160/255.255.255.224
 24.7578 +193.122.26.64/255.255.255.192
 24.7579 +193.122.46.96/255.255.255.224
 24.7580 +193.122.51.0/255.255.255.0
 24.7581 +193.122.147.0/255.255.255.192
 24.7582 +193.122.208.160/255.255.255.248
 24.7583 +193.123.1.176/255.255.255.240
 24.7584 +193.123.80.160/255.255.255.224
 24.7585 +193.123.93.0/255.255.255.192
 24.7586 +193.123.234.160/255.255.255.240
 24.7587 +193.124.33.0/255.255.255.0
 24.7588 +193.124.232.0/255.255.249.0
 24.7589 +193.125.135.0/255.255.255.0
 24.7590 +193.128.1.176/255.255.255.240
 24.7591 +193.128.2.192/255.255.255.240
 24.7592 +193.128.17.176/255.255.255.240
 24.7593 +193.128.24.0/255.255.254.0
 24.7594 +193.128.89.160/255.255.255.240
 24.7595 +193.128.92.0/255.255.254.0
 24.7596 +193.128.104.64/255.255.255.240
 24.7597 +193.128.104.192/255.255.255.224
 24.7598 +193.128.111.144/255.255.255.240
 24.7599 +193.128.114.64/255.255.255.240
 24.7600 +193.128.115.208/255.255.255.240
 24.7601 +193.128.120.192/255.255.255.240
 24.7602 +193.128.123.32/255.255.255.240
 24.7603 +193.128.124.96/255.255.255.240
 24.7604 +193.128.127.48/255.255.255.240
 24.7605 +193.128.128.0/255.255.255.224
 24.7606 +193.128.178.0/255.255.255.0
 24.7607 +193.128.184.0/255.255.252.0
 24.7608 +193.128.233.32/255.255.255.240
 24.7609 +193.129.22.64/255.255.255.240
 24.7610 +193.129.73.0/255.255.255.240
 24.7611 +193.129.86.176/255.255.255.240
 24.7612 +193.129.96.144/255.255.255.240
 24.7613 +193.129.98.176/255.255.255.240
 24.7614 +193.129.100.128/255.255.255.240
 24.7615 +193.129.160.208/255.255.255.240
 24.7616 +193.129.162.0/255.255.255.0
 24.7617 +193.129.187.208/255.255.255.248
 24.7618 +193.129.252.0/255.255.255.224
 24.7619 +193.130.35.208/255.255.255.240
 24.7620 +193.131.2.224/255.255.255.240
 24.7621 +193.132.4.0/255.255.252.0
 24.7622 +193.132.26.0/255.255.255.0
 24.7623 +193.132.151.176/255.255.255.240
 24.7624 +193.132.196.96/255.255.255.240
 24.7625 +193.132.230.0/255.255.255.0
 24.7626 +193.133.17.96/255.255.255.240
 24.7627 +193.133.17.128/255.255.255.128
 24.7628 +193.133.27.112/255.255.255.240
 24.7629 +193.133.100.32/255.255.255.240
 24.7630 +193.133.116.128/255.255.255.128
 24.7631 +193.133.126.176/255.255.255.240
 24.7632 +193.133.192.0/255.255.255.240
 24.7633 +193.134.4.0/255.255.252.0
 24.7634 +193.134.8.0/255.255.232.0
 24.7635 +193.134.240.0/255.255.248.0
 24.7636 +193.135.25.0/255.255.255.0
 24.7637 +193.135.176.0/255.255.224.0
 24.7638 +193.138.66.0/255.255.255.0
 24.7639 +193.138.67.0/255.255.255.0
 24.7640 +193.138.126.0/255.255.255.0
 24.7641 +193.141.17.0/255.255.255.0
 24.7642 +193.141.46.64/255.255.255.240
 24.7643 +193.141.57.0/255.255.255.0
 24.7644 +193.141.66.48/255.255.255.248
 24.7645 +193.141.66.64/255.255.255.248
 24.7646 +193.141.70.0/255.255.255.0
 24.7647 +193.141.74.0/255.255.255.0
 24.7648 +193.141.80.0/255.255.248.0
 24.7649 +193.141.93.64/255.255.255.224
 24.7650 +193.141.98.0/255.255.254.0
 24.7651 +193.141.102.0/255.255.254.0
 24.7652 +193.141.109.0/255.255.255.0
 24.7653 +193.141.117.0/255.255.255.0
 24.7654 +193.141.122.0/255.255.254.0
 24.7655 +193.141.139.0/255.255.255.0
 24.7656 +193.141.177.0/255.255.255.0
 24.7657 +193.141.183.0/255.255.255.0
 24.7658 +193.141.185.0/255.255.255.0
 24.7659 +193.141.188.0/255.255.255.0
 24.7660 +193.141.190.0/255.255.255.0
 24.7661 +193.141.192.0/255.255.224.0
 24.7662 +193.146.152.192/255.255.255.240
 24.7663 +193.148.19.0/255.255.255.0
 24.7664 +193.148.21.0/255.255.255.0
 24.7665 +193.149.32.64/255.255.255.240
 24.7666 +193.149.33.232/255.255.255.248
 24.7667 +193.149.34.0/255.255.255.0
 24.7668 +193.149.37.32/255.255.255.224
 24.7669 +193.149.42.0/255.255.255.0
 24.7670 +193.149.44.128/255.255.255.192
 24.7671 +193.149.57.88/255.255.255.248
 24.7672 +193.149.57.176/255.255.255.240
 24.7673 +193.149.59.176/255.255.255.240
 24.7674 +193.149.60.32/255.255.255.224
 24.7675 +193.149.60.128/255.255.255.224
 24.7676 +193.149.61.0/255.255.255.192
 24.7677 +193.149.61.128/255.255.255.128
 24.7678 +193.150.152.0/255.255.243.0
 24.7679 +193.151.0.0/255.255.252.0
 24.7680 +193.154.60.0/255.255.253.0
 24.7681 +193.154.213.160/255.255.255.240
 24.7682 +193.154.234.0/255.255.255.0
 24.7683 +193.155.0.0/255.255.255.224
 24.7684 +193.155.8.0/255.255.250.0
 24.7685 +193.155.19.0/255.255.255.0
 24.7686 +193.155.25.0/255.255.255.0
 24.7687 +193.155.48.32/255.255.255.216
 24.7688 +193.155.48.80/255.255.255.240
 24.7689 +193.155.63.0/255.255.255.0
 24.7690 +193.155.75.0/255.255.255.0
 24.7691 +193.155.82.0/255.255.254.0
 24.7692 +193.155.86.0/255.255.254.0
 24.7693 +193.155.97.0/255.255.255.0
 24.7694 +193.155.101.0/255.255.255.0
 24.7695 +193.155.111.0/255.255.255.0
 24.7696 +193.155.115.0/255.255.255.0
 24.7697 +193.155.134.0/255.255.254.0
 24.7698 +193.155.141.0/255.255.255.0
 24.7699 +193.155.186.0/255.255.255.0
 24.7700 +193.155.189.0/255.255.255.0
 24.7701 +193.155.192.0/255.255.255.0
 24.7702 +193.155.194.0/255.255.255.224
 24.7703 +193.155.203.0/255.255.255.0
 24.7704 +193.155.225.0/255.255.255.0
 24.7705 +193.155.232.0/255.255.255.0
 24.7706 +193.155.240.0/255.255.253.0
 24.7707 +193.155.244.0/255.255.255.0
 24.7708 +193.155.250.0/255.255.255.0
 24.7709 +193.158.0.0/255.255.255.192
 24.7710 +193.158.3.40/255.255.255.248
 24.7711 +193.158.3.192/255.255.255.248
 24.7712 +193.158.6.0/255.255.255.0
 24.7713 +193.158.10.128/255.255.255.192
 24.7714 +193.158.12.128/255.255.255.192
 24.7715 +193.158.18.0/255.255.255.0
 24.7716 +193.158.29.0/255.255.255.0
 24.7717 +193.158.38.0/255.255.254.0
 24.7718 +193.158.41.232/255.255.255.248
 24.7719 +193.158.41.248/255.255.255.248
 24.7720 +193.158.48.128/255.255.255.128
 24.7721 +193.158.52.192/255.255.255.248
 24.7722 +193.158.54.0/255.255.255.224
 24.7723 +193.158.55.128/255.255.255.128
 24.7724 +193.158.56.32/255.255.255.248
 24.7725 +193.158.56.224/255.255.255.224
 24.7726 +193.158.60.32/255.255.255.248
 24.7727 +193.158.60.128/255.255.255.248
 24.7728 +193.158.61.80/255.255.255.248
 24.7729 +193.158.72.64/255.255.255.224
 24.7730 +193.158.74.192/255.255.255.192
 24.7731 +193.158.77.232/255.255.255.248
 24.7732 +193.158.92.0/255.255.254.192
 24.7733 +193.158.93.128/255.255.255.192
 24.7734 +193.158.95.72/255.255.255.216
 24.7735 +193.158.98.64/255.255.255.184
 24.7736 +193.158.98.248/255.255.255.248
 24.7737 +193.158.99.16/255.255.255.248
 24.7738 +193.158.101.56/255.255.255.184
 24.7739 +193.158.102.208/255.255.255.248
 24.7740 +193.158.102.224/255.255.255.248
 24.7741 +193.158.107.192/255.255.255.232
 24.7742 +193.158.107.240/255.255.255.240
 24.7743 +193.158.109.128/255.255.255.128
 24.7744 +193.158.113.224/255.255.255.224
 24.7745 +193.158.116.128/255.255.255.128
 24.7746 +193.158.117.8/255.255.255.248
 24.7747 +193.158.123.160/255.255.255.160
 24.7748 +193.158.124.0/255.255.254.0
 24.7749 +193.158.234.104/255.255.255.248
 24.7750 +193.158.237.208/255.255.255.248
 24.7751 +193.158.249.128/255.255.255.160
 24.7752 +193.158.249.240/255.255.255.248
 24.7753 +193.158.250.128/255.255.255.248
 24.7754 +193.158.250.160/255.255.255.224
 24.7755 +193.159.160.0/255.255.248.0
 24.7756 +193.159.174.80/255.255.255.248
 24.7757 +193.159.176.144/255.255.255.248
 24.7758 +193.159.184.0/255.255.255.224
 24.7759 +193.159.184.80/255.255.255.248
 24.7760 +193.159.185.0/255.255.255.248
 24.7761 +193.159.185.16/255.255.255.240
 24.7762 +193.159.187.0/255.255.255.224
 24.7763 +193.159.218.0/255.255.254.56
 24.7764 +193.160.156.0/255.255.254.0
 24.7765 +193.162.28.0/255.255.255.0
 24.7766 +193.162.76.0/255.255.254.0
 24.7767 +193.164.187.160/255.255.255.240
 24.7768 +193.164.228.0/255.255.251.160
 24.7769 +193.170.150.0/255.255.255.0
 24.7770 +193.172.69.0/255.255.255.0
 24.7771 +193.172.72.160/255.255.255.240
 24.7772 +193.172.87.80/255.255.255.240
 24.7773 +193.172.114.0/255.255.250.0
 24.7774 +193.172.125.192/255.255.255.240
 24.7775 +193.172.125.224/255.255.255.240
 24.7776 +193.172.159.0/255.255.255.0
 24.7777 +193.172.172.0/255.255.255.0
 24.7778 +193.172.176.0/255.255.254.0
 24.7779 +193.172.246.192/255.255.255.224
 24.7780 +193.173.39.176/255.255.255.240
 24.7781 +193.173.48.240/255.255.255.240
 24.7782 +193.173.59.0/255.255.255.0
 24.7783 +193.173.140.32/255.255.255.240
 24.7784 +193.173.151.208/255.255.255.240
 24.7785 +193.173.195.128/255.255.255.192
 24.7786 +193.174.78.0/255.255.254.0
 24.7787 +193.174.96.0/255.255.252.0
 24.7788 +193.174.160.0/255.255.252.0
 24.7789 +193.174.227.0/255.255.255.0
 24.7790 +193.174.230.0/255.255.254.0
 24.7791 +193.174.249.0/255.255.255.0
 24.7792 +193.174.252.0/255.255.255.0
 24.7793 +193.174.255.0/255.255.255.0
 24.7794 +193.175.82.0/255.255.254.0
 24.7795 +193.175.88.0/255.255.249.0
 24.7796 +193.175.128.0/255.255.254.0
 24.7797 +193.175.170.0/255.255.255.0
 24.7798 +193.175.192.0/255.255.254.0
 24.7799 +193.175.216.0/255.255.255.0
 24.7800 +193.175.220.0/255.255.255.0
 24.7801 +193.175.246.0/255.255.255.0
 24.7802 +193.175.250.0/255.255.255.0
 24.7803 +193.175.254.0/255.255.255.0
 24.7804 +193.176.4.0/255.255.244.0
 24.7805 +193.176.43.0/255.255.255.0
 24.7806 +193.176.222.0/255.255.251.0
 24.7807 +193.176.234.0/255.255.255.0
 24.7808 +193.176.242.0/255.255.253.0
 24.7809 +193.178.1.0/255.255.226.0
 24.7810 +193.178.128.0/255.255.255.0
 24.7811 +193.178.208.0/255.255.255.0
 24.7812 +193.178.212.0/255.255.255.0
 24.7813 +193.178.218.0/255.255.255.0
 24.7814 +193.179.2.208/255.255.255.248
 24.7815 +193.184.41.0/255.255.255.0
 24.7816 +193.184.61.0/255.255.255.0
 24.7817 +193.184.62.0/255.255.255.0
 24.7818 +193.184.63.0/255.255.255.0
 24.7819 +193.184.64.0/255.255.255.0
 24.7820 +193.185.212.0/255.255.255.0
 24.7821 +193.187.3.0/255.255.255.0
 24.7822 +193.189.150.0/255.255.246.0
 24.7823 +193.189.220.0/255.255.255.128
 24.7824 +193.189.224.224/255.255.255.236
 24.7825 +193.189.224.248/255.255.255.248
 24.7826 +193.189.227.0/255.255.254.0
 24.7827 +193.189.231.64/255.255.255.172
 24.7828 +193.189.232.0/255.255.255.0
 24.7829 +193.189.234.0/255.255.251.0
 24.7830 +193.189.241.64/255.255.255.240
 24.7831 +193.189.242.0/255.255.255.0
 24.7832 +193.189.255.144/255.255.255.240
 24.7833 +193.189.255.208/255.255.255.240
 24.7834 +193.190.113.0/255.255.255.0
 24.7835 +193.190.121.0/255.255.255.0
 24.7836 +193.190.122.0/255.255.254.0
 24.7837 +193.190.127.0/255.255.255.0
 24.7838 +193.190.150.0/255.255.254.0
 24.7839 +193.190.152.0/255.255.255.0
 24.7840 +193.190.153.64/255.255.255.192
 24.7841 +193.190.154.0/255.255.255.128
 24.7842 +193.190.156.0/255.255.252.0
 24.7843 +193.190.182.160/255.255.255.240
 24.7844 +193.190.182.176/255.255.255.248
 24.7845 +193.190.182.192/255.255.255.240
 24.7846 +193.190.183.0/255.255.255.128
 24.7847 +193.190.199.0/255.255.255.224
 24.7848 +193.190.203.0/255.255.255.0
 24.7849 +193.190.204.0/255.255.252.0
 24.7850 +193.190.212.0/255.255.255.0
 24.7851 +193.190.215.0/255.255.255.0
 24.7852 +193.190.216.0/255.255.254.0
 24.7853 +193.190.218.0/255.255.255.0
 24.7854 +193.190.219.0/255.255.255.0
 24.7855 +193.190.230.0/255.255.254.0
 24.7856 +193.190.233.0/255.255.255.0
 24.7857 +193.190.235.0/255.255.255.0
 24.7858 +193.190.248.0/255.255.255.0
 24.7859 +193.191.132.48/255.255.255.248
 24.7860 +193.191.132.208/255.255.255.240
 24.7861 +193.191.132.224/255.255.255.224
 24.7862 +193.191.138.0/255.255.255.0
 24.7863 +193.191.208.128/255.255.255.224
 24.7864 +193.191.209.192/255.255.255.240
 24.7865 +193.191.211.0/255.255.255.192
 24.7866 +193.191.211.128/255.255.255.160
 24.7867 +193.191.222.128/255.255.255.192
 24.7868 +193.192.251.0/255.255.254.0
 24.7869 +193.193.75.0/255.255.255.0
 24.7870 +193.193.124.8/255.255.255.248
 24.7871 +193.193.138.216/255.255.255.248
 24.7872 +193.193.142.64/255.255.255.224
 24.7873 +193.193.194.88/255.255.255.248
 24.7874 +193.194.144.0/255.255.254.0
 24.7875 +193.195.87.192/255.255.255.240
 24.7876 +193.195.117.104/255.255.255.248
 24.7877 +193.195.190.120/255.255.255.248
 24.7878 +193.196.153.0/255.255.255.0
 24.7879 +193.196.187.0/255.255.255.0
 24.7880 +193.197.7.0/255.255.255.128
 24.7881 +193.197.42.0/255.255.255.224
 24.7882 +193.197.72.0/255.255.255.232
 24.7883 +193.197.84.0/255.255.255.248
 24.7884 +193.197.144.0/255.255.255.0
 24.7885 +193.197.150.208/255.255.255.240
 24.7886 +193.197.158.0/255.255.255.0
 24.7887 +193.197.165.0/255.255.255.0
 24.7888 +193.197.174.0/255.255.255.0
 24.7889 +193.201.174.0/255.255.255.0
 24.7890 +193.202.1.0/255.255.249.0
 24.7891 +193.202.31.0/255.255.255.0
 24.7892 +193.203.227.0/255.255.255.0
 24.7893 +193.204.0.0/255.253.0.0
 24.7894 +193.207.0.0/255.255.250.0
 24.7895 +193.207.9.0/255.255.255.0
 24.7896 +193.207.13.128/255.255.255.248
 24.7897 +193.207.32.0/255.255.252.0
 24.7898 +193.207.36.0/255.255.255.0
 24.7899 +193.207.37.0/255.255.255.128
 24.7900 +193.207.38.0/255.255.255.128
 24.7901 +193.207.38.128/255.255.255.192
 24.7902 +193.207.39.0/255.255.255.192
 24.7903 +193.207.39.128/255.255.255.128
 24.7904 +193.207.49.0/255.255.255.224
 24.7905 +193.207.49.32/255.255.255.224
 24.7906 +193.207.50.0/255.255.255.0
 24.7907 +193.207.57.0/255.255.255.0
 24.7908 +193.207.60.0/255.255.255.128
 24.7909 +193.207.68.0/255.255.255.224
 24.7910 +193.207.68.96/255.255.255.240
 24.7911 +193.207.82.0/255.255.254.0
 24.7912 +193.207.94.0/255.255.255.224
 24.7913 +193.207.95.0/255.255.255.0
 24.7914 +193.207.113.128/255.255.255.224
 24.7915 +193.207.113.192/255.255.255.224
 24.7916 +193.207.114.160/255.255.255.224
 24.7917 +193.207.118.64/255.255.255.224
 24.7918 +193.207.119.192/255.255.255.224
 24.7919 +193.207.122.48/255.255.255.248
 24.7920 +193.207.122.64/255.255.255.224
 24.7921 +193.207.122.192/255.255.255.224
 24.7922 +193.207.123.208/255.255.255.240
 24.7923 +193.207.123.240/255.255.255.240
 24.7924 +193.209.70.0/255.255.255.0
 24.7925 +193.210.42.0/255.255.255.0
 24.7926 +193.210.149.224/255.255.255.224
 24.7927 +193.211.38.96/255.255.255.240
 24.7928 +193.213.209.160/255.255.255.240
 24.7929 +193.214.114.0/255.255.255.128
 24.7930 +193.215.95.56/255.255.255.248
 24.7931 +193.216.67.208/255.255.255.248
 24.7932 +193.216.190.0/255.255.255.128
 24.7933 +193.216.232.64/255.255.255.192
 24.7934 +193.216.234.136/255.255.255.248
 24.7935 +193.217.13.32/255.255.255.224
 24.7936 +193.218.115.0/255.255.255.0
 24.7937 +193.218.211.80/255.255.255.240
 24.7938 +193.218.213.24/255.255.255.248
 24.7939 +193.218.217.0/255.255.255.192
 24.7940 +193.218.219.96/255.255.255.224
 24.7941 +193.219.0.0/255.255.255.0
 24.7942 +193.219.13.192/255.255.255.224
 24.7943 +193.219.13.224/255.255.255.240
 24.7944 +193.219.57.0/255.255.255.0
 24.7945 +193.222.112.0/255.255.242.0
 24.7946 +193.222.126.0/255.255.255.0
 24.7947 +193.222.127.0/255.255.255.0
 24.7948 +193.224.76.0/255.255.255.0
 24.7949 +193.225.36.0/255.255.255.0
 24.7950 +193.225.51.0/255.255.255.192
 24.7951 +193.225.64.0/255.255.255.0
 24.7952 +193.225.139.0/255.255.255.0
 24.7953 +193.226.44.0/255.255.255.0
 24.7954 +193.227.144.0/255.255.240.0
 24.7955 +193.227.204.0/255.255.254.0
 24.7956 +193.229.199.128/255.255.255.128
 24.7957 +193.230.231.0/255.255.255.0
 24.7958 +193.232.160.0/255.255.255.0
 24.7959 +193.233.188.0/255.255.255.0
 24.7960 +193.235.28.0/255.255.254.0
 24.7961 +193.236.11.0/255.255.255.0
 24.7962 +193.241.0.0/255.255.0.0
 24.7963 +193.246.128.0/255.255.240.0
 24.7964 +193.246.248.184/255.255.255.248
 24.7965 +193.247.0.0/255.255.224.0
 24.7966 +193.247.39.64/255.255.255.240
 24.7967 +193.247.39.96/255.255.255.248
 24.7968 +193.247.107.0/255.255.251.0
 24.7969 +193.247.112.0/255.255.248.0
 24.7970 +193.247.203.0/255.255.255.0
 24.7971 +193.251.137.0/255.255.255.248
 24.7972 +193.252.228.0/255.255.255.0
 24.7973 +193.254.0.128/255.255.255.128
 24.7974 +194.1.224.0/255.255.248.0
 24.7975 +194.2.37.0/255.255.255.0
 24.7976 +194.2.85.0/255.255.255.0
 24.7977 +194.2.88.0/255.255.248.0
 24.7978 +194.2.138.232/255.255.255.248
 24.7979 +194.2.155.0/255.255.255.0
 24.7980 +194.2.163.32/255.255.255.224
 24.7981 +194.2.198.0/255.255.254.0
 24.7982 +194.2.246.0/255.255.255.0
 24.7983 +194.2.250.0/255.255.255.0
 24.7984 +194.3.22.0/255.255.255.0
 24.7985 +194.3.49.179/255.255.255.249
 24.7986 +194.3.65.8/255.255.255.248
 24.7987 +194.3.103.16/255.255.255.240
 24.7988 +194.3.107.0/255.255.255.0
 24.7989 +194.3.117.0/255.255.255.0
 24.7990 +194.3.186.0/255.255.255.0
 24.7991 +194.3.192.0/255.255.255.0
 24.7992 +194.3.209.0/255.255.255.0
 24.7993 +194.3.210.0/255.255.255.0
 24.7994 +194.3.224.0/255.255.232.0
 24.7995 +194.4.224.0/255.255.248.0
 24.7996 +194.5.4.0/255.255.255.0
 24.7997 +194.5.5.0/255.255.255.0
 24.7998 +194.5.6.0/255.255.255.0
 24.7999 +194.5.7.0/255.255.255.0
 24.8000 +194.5.8.0/255.255.255.0
 24.8001 +194.5.9.0/255.255.255.0
 24.8002 +194.5.10.0/255.255.255.0
 24.8003 +194.5.11.0/255.255.255.0
 24.8004 +194.5.12.0/255.255.255.0
 24.8005 +194.5.54.0/255.255.255.0
 24.8006 +194.5.55.0/255.255.255.0
 24.8007 +194.5.79.0/255.255.255.0
 24.8008 +194.5.238.0/255.255.254.0
 24.8009 +194.5.254.0/255.255.254.0
 24.8010 +194.6.3.0/255.255.255.128
 24.8011 +194.6.4.0/255.255.255.248
 24.8012 +194.6.4.208/255.255.255.248
 24.8013 +194.6.23.0/255.255.249.0
 24.8014 +194.6.81.32/255.255.255.248
 24.8015 +194.6.103.248/255.255.255.248
 24.8016 +194.6.105.192/255.255.255.248
 24.8017 +194.6.109.136/255.255.255.248
 24.8018 +194.7.19.72/255.255.255.248
 24.8019 +194.7.27.128/255.255.255.224
 24.8020 +194.7.27.208/255.255.255.240
 24.8021 +194.7.53.0/255.255.255.0
 24.8022 +194.7.89.64/255.255.255.240
 24.8023 +194.7.92.0/255.255.255.0
 24.8024 +194.7.100.64/255.255.255.224
 24.8025 +194.7.101.32/255.255.255.224
 24.8026 +194.7.101.240/255.255.255.240
 24.8027 +194.7.148.0/255.255.255.224
 24.8028 +194.7.149.160/255.255.255.248
 24.8029 +194.7.149.248/255.255.255.248
 24.8030 +194.7.152.208/255.255.255.240
 24.8031 +194.7.157.144/255.255.255.240
 24.8032 +194.7.157.232/255.255.255.248
 24.8033 +194.7.159.144/255.255.255.240
 24.8034 +194.7.161.48/255.255.255.240
 24.8035 +194.7.168.32/255.255.255.240
 24.8036 +194.7.172.16/255.255.255.240
 24.8037 +194.7.175.128/255.255.255.240
 24.8038 +194.7.178.160/255.255.255.240
 24.8039 +194.7.179.208/255.255.255.240
 24.8040 +194.7.183.8/255.255.255.248
 24.8041 +194.7.183.136/255.255.255.248
 24.8042 +194.7.184.224/255.255.255.240
 24.8043 +194.7.188.24/255.255.255.248
 24.8044 +194.7.188.112/255.255.255.240
 24.8045 +194.7.218.0/255.255.255.0
 24.8046 +194.7.221.0/255.255.255.0
 24.8047 +194.7.234.0/255.255.255.0
 24.8048 +194.7.244.128/255.255.255.240
 24.8049 +194.7.246.64/255.255.255.192
 24.8050 +194.7.248.0/255.255.255.240
 24.8051 +194.8.65.128/255.255.255.192
 24.8052 +194.8.84.96/255.255.255.240
 24.8053 +194.8.87.0/255.255.255.0
 24.8054 +194.8.96.0/255.255.224.0
 24.8055 +194.8.181.224/255.255.255.248
 24.8056 +194.8.206.160/255.255.255.224
 24.8057 +194.8.206.224/255.255.255.224
 24.8058 +194.8.213.128/255.255.255.224
 24.8059 +194.8.213.160/255.255.255.160
 24.8060 +194.8.216.80/255.255.255.240
 24.8061 +194.8.216.96/255.255.255.224
 24.8062 +194.8.217.0/255.255.255.0
 24.8063 +194.8.218.224/255.255.255.224
 24.8064 +194.8.223.0/255.255.255.0
 24.8065 +194.10.60.0/255.255.254.0
 24.8066 +194.11.240.0/255.255.254.0
 24.8067 +194.12.192.0/255.255.224.0
 24.8068 +194.13.8.0/255.255.249.0
 24.8069 +194.13.136.0/255.255.254.0
 24.8070 +194.13.139.0/255.255.254.0
 24.8071 +194.15.160.0/255.255.240.0
 24.8072 +194.15.189.0/255.255.255.0
 24.8073 +194.15.213.0/255.255.255.0
 24.8074 +194.15.248.0/255.255.254.0
 24.8075 +194.17.127.0/255.255.255.0
 24.8076 +194.18.73.0/255.255.255.0
 24.8077 +194.19.127.192/255.255.255.224
 24.8078 +194.19.229.208/255.255.255.240
 24.8079 +194.19.232.64/255.255.255.224
 24.8080 +194.20.0.0/255.254.0.0
 24.8081 +194.24.207.16/255.255.255.248
 24.8082 +194.25.14.0/255.255.255.0
 24.8083 +194.25.29.80/255.255.255.248
 24.8084 +194.25.83.216/255.255.255.248
 24.8085 +194.25.85.192/255.255.255.240
 24.8086 +194.25.93.192/255.255.255.192
 24.8087 +194.25.97.0/255.255.255.224
 24.8088 +194.25.111.8/255.255.255.248
 24.8089 +194.25.113.0/255.255.255.128
 24.8090 +194.25.142.184/255.255.255.248
 24.8091 +194.25.143.120/255.255.255.248
 24.8092 +194.25.145.160/255.255.255.224
 24.8093 +194.25.156.0/255.255.255.0
 24.8094 +194.25.159.144/255.255.255.224
 24.8095 +194.25.159.224/255.255.255.224
 24.8096 +194.25.166.136/255.255.255.248
 24.8097 +194.25.170.0/255.255.254.0
 24.8098 +194.25.184.240/255.255.255.248
 24.8099 +194.25.185.208/255.255.255.248
 24.8100 +194.25.187.224/255.255.251.224
 24.8101 +194.25.215.80/255.255.255.240
 24.8102 +194.25.219.144/255.255.255.248
 24.8103 +194.25.229.16/255.255.255.240
 24.8104 +194.25.241.224/255.255.255.248
 24.8105 +194.25.244.0/255.255.252.0
 24.8106 +194.31.0.0/255.255.255.0
 24.8107 +194.31.67.0/255.255.255.0
 24.8108 +194.31.70.0/255.255.254.0
 24.8109 +194.31.194.0/255.255.255.0
 24.8110 +194.31.239.0/255.255.255.0
 24.8111 +194.32.69.0/255.255.255.0
 24.8112 +194.32.218.0/255.255.254.0
 24.8113 +194.34.138.0/255.255.255.0
 24.8114 +194.34.144.0/255.255.248.0
 24.8115 +194.34.198.0/255.255.255.0
 24.8116 +194.34.224.0/255.255.224.0
 24.8117 +194.35.84.0/255.255.252.0
 24.8118 +194.36.32.0/255.255.240.0
 24.8119 +194.36.93.0/255.255.255.0
 24.8120 +194.38.134.200/255.255.255.248
 24.8121 +194.39.149.0/255.255.255.0
 24.8122 +194.39.152.0/255.255.253.0
 24.8123 +194.39.220.0/255.255.252.0
 24.8124 +194.40.128.0/255.255.192.0
 24.8125 +194.41.9.0/255.255.255.0
 24.8126 +194.42.67.0/255.255.255.192
 24.8127 +194.42.76.0/255.255.255.0
 24.8128 +194.42.83.192/255.255.255.160
 24.8129 +194.42.90.208/255.255.255.224
 24.8130 +194.42.91.0/255.255.255.240
 24.8131 +194.45.80.0/255.255.248.0
 24.8132 +194.45.141.0/255.255.255.0
 24.8133 +194.45.182.0/255.255.255.0
 24.8134 +194.45.187.0/255.255.255.0
 24.8135 +194.45.199.0/255.255.255.0
 24.8136 +194.45.225.32/255.255.255.224
 24.8137 +194.45.230.0/255.255.255.0
 24.8138 +194.45.241.0/255.255.255.0
 24.8139 +194.45.247.0/255.255.252.0
 24.8140 +194.45.252.0/255.255.255.0
 24.8141 +194.48.220.0/255.255.254.0
 24.8142 +194.48.222.0/255.255.255.0
 24.8143 +194.48.223.0/255.255.254.0
 24.8144 +194.48.225.0/255.255.255.0
 24.8145 +194.49.8.0/255.255.248.0
 24.8146 +194.49.22.0/255.255.255.0
 24.8147 +194.49.61.0/255.255.255.0
 24.8148 +194.49.82.0/255.255.255.0
 24.8149 +194.49.96.0/255.255.254.0
 24.8150 +194.50.64.0/255.255.252.0
 24.8151 +194.51.10.8/255.255.255.248
 24.8152 +194.51.11.48/255.255.255.248
 24.8153 +194.51.11.152/255.255.255.248
 24.8154 +194.51.44.80/255.255.255.240
 24.8155 +194.51.48.128/255.255.255.248
 24.8156 +194.51.69.0/255.255.255.0
 24.8157 +194.51.87.48/255.255.255.240
 24.8158 +194.51.109.0/255.255.255.240
 24.8159 +194.51.143.0/255.255.255.0
 24.8160 +194.51.180.0/255.255.255.0
 24.8161 +194.51.189.144/255.255.255.248
 24.8162 +194.51.206.32/255.255.255.248
 24.8163 +194.51.206.64/255.255.255.248
 24.8164 +194.53.115.0/255.255.253.0
 24.8165 +194.54.136.0/255.255.252.0
 24.8166 +194.54.152.0/255.255.252.0
 24.8167 +194.55.47.0/255.255.255.0
 24.8168 +194.55.104.0/255.255.254.0
 24.8169 +194.55.140.0/255.255.252.0
 24.8170 +194.57.135.0/255.255.255.0
 24.8171 +194.57.158.0/255.255.252.0
 24.8172 +194.57.173.192/255.255.255.192
 24.8173 +194.57.221.0/255.255.255.0
 24.8174 +194.59.36.0/255.255.252.0
 24.8175 +194.59.46.0/255.255.250.0
 24.8176 +194.59.96.0/255.255.224.0
 24.8177 +194.59.192.0/255.255.237.0
 24.8178 +194.59.246.0/255.255.255.0
 24.8179 +194.60.216.0/255.255.255.0
 24.8180 +194.61.27.0/255.255.255.0
 24.8181 +194.61.128.0/255.255.248.0
 24.8182 +194.61.176.0/255.255.240.0
 24.8183 +194.61.247.0/255.255.251.0
 24.8184 +194.62.22.0/255.255.254.0
 24.8185 +194.62.31.0/255.255.255.0
 24.8186 +194.62.128.0/255.255.240.0
 24.8187 +194.62.192.0/255.255.248.0
 24.8188 +194.64.29.112/255.255.255.240
 24.8189 +194.64.45.0/255.255.255.0
 24.8190 +194.64.71.0/255.255.255.0
 24.8191 +194.64.75.0/255.255.255.0
 24.8192 +194.64.77.0/255.255.255.0
 24.8193 +194.64.96.0/255.255.252.0
 24.8194 +194.64.116.0/255.255.255.0
 24.8195 +194.64.169.224/255.255.255.224
 24.8196 +194.64.186.0/255.255.255.128
 24.8197 +194.64.225.0/255.255.255.224
 24.8198 +194.64.226.112/255.255.255.240
 24.8199 +194.64.231.0/255.255.255.0
 24.8200 +194.64.242.0/255.255.255.0
 24.8201 +194.64.249.0/255.255.255.0
 24.8202 +194.64.251.0/255.255.255.0
 24.8203 +194.64.254.0/255.255.255.0
 24.8204 +194.65.70.96/255.255.255.224
 24.8205 +194.65.108.0/255.255.255.0
 24.8206 +194.65.125.128/255.255.255.128
 24.8207 +194.66.189.0/255.255.255.0
 24.8208 +194.66.254.0/255.255.255.0
 24.8209 +194.67.35.0/255.255.255.0
 24.8210 +194.67.181.192/255.255.255.192
 24.8211 +194.68.215.0/255.255.255.0
 24.8212 +194.69.6.0/255.255.246.0
 24.8213 +194.69.68.72/255.255.255.248
 24.8214 +194.69.181.0/255.255.255.0
 24.8215 +194.70.45.176/255.255.255.248
 24.8216 +194.70.81.0/255.255.255.0
 24.8217 +194.70.146.72/255.255.255.248
 24.8218 +194.71.182.0/255.255.255.0
 24.8219 +194.71.183.0/255.255.255.0
 24.8220 +194.72.70.0/255.255.255.192
 24.8221 +194.72.73.88/255.255.255.248
 24.8222 +194.72.73.240/255.255.255.248
 24.8223 +194.72.81.192/255.255.255.240
 24.8224 +194.72.164.216/255.255.255.248
 24.8225 +194.73.45.208/255.255.255.240
 24.8226 +194.73.59.0/255.255.255.0
 24.8227 +194.73.80.0/255.255.255.0
 24.8228 +194.73.100.192/255.255.255.192
 24.8229 +194.73.113.192/255.255.255.240
 24.8230 +194.73.146.0/255.255.255.128
 24.8231 +194.73.202.0/255.255.255.0
 24.8232 +194.74.50.0/255.255.255.0
 24.8233 +194.74.97.0/255.255.255.224
 24.8234 +194.74.104.64/255.255.255.224
 24.8235 +194.74.206.0/255.255.255.0
 24.8236 +194.74.208.192/255.255.255.192
 24.8237 +194.76.24.0/255.255.254.0
 24.8238 +194.76.38.0/255.255.254.0
 24.8239 +194.76.48.0/255.255.251.0
 24.8240 +194.76.64.0/255.255.224.0
 24.8241 +194.76.110.0/255.255.254.0
 24.8242 +194.76.151.0/255.255.255.0
 24.8243 +194.76.184.0/255.255.254.0
 24.8244 +194.76.190.0/255.255.254.0
 24.8245 +194.76.200.0/255.255.254.0
 24.8246 +194.76.206.0/255.255.254.0
 24.8247 +194.76.232.0/255.255.252.0
 24.8248 +194.76.244.0/255.255.252.0
 24.8249 +194.77.30.0/255.255.255.0
 24.8250 +194.77.40.40/255.255.255.248
 24.8251 +194.77.54.0/255.255.254.0
 24.8252 +194.77.88.0/255.255.255.248
 24.8253 +194.77.103.64/255.255.255.248
 24.8254 +194.77.105.0/255.255.255.0
 24.8255 +194.77.109.16/255.255.255.248
 24.8256 +194.77.156.0/255.255.254.0
 24.8257 +194.77.160.0/255.255.254.0
 24.8258 +194.77.162.48/255.255.255.240
 24.8259 +194.77.162.240/255.255.255.248
 24.8260 +194.77.179.32/255.255.255.248
 24.8261 +194.77.218.0/255.255.255.0
 24.8262 +194.77.219.144/255.255.255.240
 24.8263 +194.78.3.112/255.255.255.240
 24.8264 +194.78.43.224/255.255.255.224
 24.8265 +194.78.83.64/255.255.255.192
 24.8266 +194.78.86.64/255.255.255.224
 24.8267 +194.78.91.128/255.255.255.224
 24.8268 +194.78.99.48/255.255.255.240
 24.8269 +194.79.21.0/255.255.255.0
 24.8270 +194.79.22.0/255.255.255.0
 24.8271 +194.79.155.0/255.255.255.0
 24.8272 +194.79.161.8/255.255.255.248
 24.8273 +194.79.208.0/255.255.255.0
 24.8274 +194.81.24.0/255.255.252.0
 24.8275 +194.84.126.0/255.255.255.0
 24.8276 +194.84.149.0/255.255.255.0
 24.8277 +194.85.148.32/255.255.255.224
 24.8278 +194.88.165.64/255.255.255.224
 24.8279 +194.88.179.192/255.255.255.192
 24.8280 +194.88.186.0/255.255.255.0
 24.8281 +194.88.225.64/255.255.255.192
 24.8282 +194.89.24.0/255.255.254.0
 24.8283 +194.89.205.0/255.255.255.0
 24.8284 +194.90.75.0/255.255.255.0
 24.8285 +194.90.80.208/255.255.255.240
 24.8286 +194.90.145.0/255.255.255.248
 24.8287 +194.90.152.192/255.255.255.224
 24.8288 +194.91.203.0/255.255.255.0
 24.8289 +194.91.255.0/255.255.255.0
 24.8290 +194.93.103.0/255.255.247.0
 24.8291 +194.93.123.0/255.255.255.128
 24.8292 +194.94.19.0/255.255.255.0
 24.8293 +194.94.42.0/255.255.254.0
 24.8294 +194.94.56.0/255.255.242.0
 24.8295 +194.94.100.0/255.255.252.0
 24.8296 +194.94.208.0/255.255.255.0
 24.8297 +194.94.221.0/255.255.255.0
 24.8298 +194.94.238.0/255.255.254.0
 24.8299 +194.95.0.0/255.255.250.0
 24.8300 +194.95.38.0/255.255.254.0
 24.8301 +194.95.58.0/255.255.255.128
 24.8302 +194.95.96.0/255.255.254.0
 24.8303 +194.95.100.0/255.255.252.0
 24.8304 +194.95.110.0/255.255.255.0
 24.8305 +194.95.119.0/255.255.255.0
 24.8306 +194.95.166.0/255.255.255.0
 24.8307 +194.95.176.0/255.255.250.0
 24.8308 +194.95.198.0/255.255.254.0
 24.8309 +194.95.202.0/255.255.252.0
 24.8310 +194.95.212.0/255.255.255.0
 24.8311 +194.95.217.0/255.255.255.0
 24.8312 +194.95.222.0/255.255.255.0
 24.8313 +194.95.250.32/255.255.255.240
 24.8314 +194.95.251.0/255.255.251.0
 24.8315 +194.96.20.160/255.255.255.240
 24.8316 +194.97.1.8/255.255.255.248
 24.8317 +194.97.4.0/255.255.255.240
 24.8318 +194.97.6.64/255.255.255.192
 24.8319 +194.97.8.0/255.255.255.192
 24.8320 +194.97.57.0/255.255.255.0
 24.8321 +194.97.99.0/255.255.255.248
 24.8322 +194.97.99.224/255.255.255.224
 24.8323 +194.97.120.128/255.255.255.216
 24.8324 +194.97.121.64/255.255.255.192
 24.8325 +194.97.132.176/255.255.255.248
 24.8326 +194.97.137.0/255.255.255.0
 24.8327 +194.97.174.0/255.255.255.0
 24.8328 +194.97.178.0/255.255.255.0
 24.8329 +194.97.180.0/255.255.255.0
 24.8330 +194.98.7.64/255.255.255.248
 24.8331 +194.98.13.96/255.255.255.224
 24.8332 +194.98.20.0/255.255.255.0
 24.8333 +194.98.51.32/255.255.255.224
 24.8334 +194.98.58.128/255.255.255.248
 24.8335 +194.98.85.0/255.255.255.0
 24.8336 +194.98.124.0/255.255.255.0
 24.8337 +194.98.147.0/255.255.255.240
 24.8338 +194.98.180.80/255.255.255.240
 24.8339 +194.98.229.0/255.255.255.0
 24.8340 +194.99.38.0/255.255.254.0
 24.8341 +194.99.44.0/255.255.254.0
 24.8342 +194.99.51.0/255.255.255.0
 24.8343 +194.99.75.0/255.255.255.0
 24.8344 +194.99.144.0/255.255.244.0
 24.8345 +194.100.13.176/255.255.255.248
 24.8346 +194.100.14.216/255.255.255.248
 24.8347 +194.100.41.88/255.255.255.248
 24.8348 +194.100.42.0/255.255.255.0
 24.8349 +194.100.51.208/255.255.255.240
 24.8350 +194.100.112.0/255.255.254.0
 24.8351 +194.100.228.0/255.255.255.128
 24.8352 +194.102.210.0/255.255.255.0
 24.8353 +194.104.32.0/255.255.208.0
 24.8354 +194.104.88.0/255.255.254.0
 24.8355 +194.104.91.0/255.255.255.0
 24.8356 +194.104.99.0/255.255.255.0
 24.8357 +194.105.64.0/255.255.224.0
 24.8358 +194.105.176.216/255.255.255.248
 24.8359 +194.105.240.0/255.255.255.0
 24.8360 +194.108.183.64/255.255.255.192
 24.8361 +194.109.86.112/255.255.255.248
 24.8362 +194.109.88.248/255.255.255.248
 24.8363 +194.109.93.224/255.255.255.240
 24.8364 +194.109.114.96/255.255.255.248
 24.8365 +194.109.119.0/255.255.255.224
 24.8366 +194.109.121.0/255.255.255.224
 24.8367 +194.109.212.240/255.255.255.248
 24.8368 +194.109.219.56/255.255.255.248
 24.8369 +194.110.83.0/255.255.255.0
 24.8370 +194.111.115.176/255.255.255.240
 24.8371 +194.112.84.0/255.255.254.0
 24.8372 +194.112.87.0/255.255.255.0
 24.8373 +194.112.100.64/255.255.255.224
 24.8374 +194.112.106.0/255.255.255.0
 24.8375 +194.112.113.48/255.255.255.248
 24.8376 +194.112.123.0/255.255.254.0
 24.8377 +194.113.34.0/255.255.248.0
 24.8378 +194.113.60.0/255.255.255.0
 24.8379 +194.113.84.0/255.255.252.0
 24.8380 +194.113.114.0/255.255.255.0
 24.8381 +194.113.116.0/255.255.255.0
 24.8382 +194.113.154.0/255.255.255.0
 24.8383 +194.113.168.0/255.255.255.0
 24.8384 +194.113.222.0/255.255.255.0
 24.8385 +194.113.247.0/255.255.255.0
 24.8386 +194.115.12.0/255.255.255.0
 24.8387 +194.115.40.0/255.255.252.0
 24.8388 +194.115.49.0/255.255.255.0
 24.8389 +194.115.77.0/255.255.255.0
 24.8390 +194.115.88.0/255.255.248.0
 24.8391 +194.115.182.0/255.255.254.0
 24.8392 +194.115.196.0/255.255.255.0
 24.8393 +194.115.204.0/255.255.254.0
 24.8394 +194.115.248.0/255.255.255.0
 24.8395 +194.116.0.0/255.255.248.0
 24.8396 +194.116.19.0/255.255.255.0
 24.8397 +194.116.20.0/255.255.255.0
 24.8398 +194.116.21.0/255.255.255.0
 24.8399 +194.116.22.0/255.255.255.0
 24.8400 +194.116.23.0/255.255.255.0
 24.8401 +194.116.24.0/255.255.255.0
 24.8402 +194.116.26.0/255.255.255.0
 24.8403 +194.116.29.0/255.255.255.0
 24.8404 +194.116.30.0/255.255.255.0
 24.8405 +194.116.31.0/255.255.255.0
 24.8406 +194.116.61.0/255.255.255.0
 24.8407 +194.116.63.0/255.255.255.0
 24.8408 +194.117.97.188/255.255.255.248
 24.8409 +194.117.99.228/255.255.255.248
 24.8410 +194.117.100.4/255.255.255.248
 24.8411 +194.117.108.112/255.255.255.248
 24.8412 +194.117.111.0/255.255.255.248
 24.8413 +194.117.208.96/255.255.255.224
 24.8414 +194.117.208.128/255.255.255.192
 24.8415 +194.117.208.192/255.255.255.240
 24.8416 +194.117.208.240/255.255.255.240
 24.8417 +194.117.216.32/255.255.255.240
 24.8418 +194.117.219.96/255.255.255.248
 24.8419 +194.117.220.96/255.255.255.240
 24.8420 +194.119.192.0/255.255.255.0
 24.8421 +194.119.193.0/255.255.255.0
 24.8422 +194.119.194.0/255.255.255.0
 24.8423 +194.119.195.0/255.255.255.0
 24.8424 +194.119.196.0/255.255.252.0
 24.8425 +194.119.200.0/255.255.248.0
 24.8426 +194.119.208.0/255.255.255.0
 24.8427 +194.119.209.0/255.255.255.0
 24.8428 +194.119.210.0/255.255.255.0
 24.8429 +194.119.211.0/255.255.255.0
 24.8430 +194.119.212.0/255.255.255.0
 24.8431 +194.119.213.0/255.255.255.0
 24.8432 +194.119.214.0/255.255.255.0
 24.8433 +194.119.215.0/255.255.255.0
 24.8434 +194.119.216.0/255.255.254.0
 24.8435 +194.119.218.0/255.255.255.0
 24.8436 +194.119.219.0/255.255.255.0
 24.8437 +194.119.220.0/255.255.255.0
 24.8438 +194.119.221.0/255.255.255.0
 24.8439 +194.119.245.0/255.255.255.0
 24.8440 +194.119.248.144/255.255.255.248
 24.8441 +194.119.255.32/255.255.255.240
 24.8442 +194.120.19.0/255.255.255.0
 24.8443 +194.120.33.0/255.255.255.0
 24.8444 +194.120.109.0/255.255.255.0
 24.8445 +194.120.122.0/255.255.255.0
 24.8446 +194.120.124.0/255.255.255.0
 24.8447 +194.120.127.0/255.255.255.0
 24.8448 +194.120.175.0/255.255.255.0
 24.8449 +194.120.180.0/255.255.255.224
 24.8450 +194.120.225.0/255.255.255.0
 24.8451 +194.120.248.240/255.255.255.240
 24.8452 +194.120.254.0/255.255.255.0
 24.8453 +194.121.4.0/255.255.255.0
 24.8454 +194.121.10.0/255.255.255.0
 24.8455 +194.121.12.0/255.255.255.0
 24.8456 +194.121.19.0/255.255.254.0
 24.8457 +194.121.23.0/255.255.253.0
 24.8458 +194.121.44.0/255.255.254.0
 24.8459 +194.121.51.0/255.255.255.0
 24.8460 +194.121.80.0/255.255.248.0
 24.8461 +194.121.99.0/255.255.255.128
 24.8462 +194.121.118.0/255.255.255.240
 24.8463 +194.121.220.40/255.255.255.232
 24.8464 +194.121.220.208/255.255.255.240
 24.8465 +194.121.235.0/255.255.255.0
 24.8466 +194.121.238.80/255.255.255.240
 24.8467 +194.121.239.0/255.255.255.0
 24.8468 +194.122.12.192/255.255.255.240
 24.8469 +194.122.21.128/255.255.255.224
 24.8470 +194.122.22.64/255.255.255.240
 24.8471 +194.122.23.56/255.255.255.248
 24.8472 +194.122.45.72/255.255.255.248
 24.8473 +194.122.49.88/255.255.255.232
 24.8474 +194.122.54.64/255.255.255.192
 24.8475 +194.122.59.128/255.255.255.224
 24.8476 +194.122.65.0/255.255.255.0
 24.8477 +194.122.90.248/255.255.255.248
 24.8478 +194.122.91.176/255.255.255.248
 24.8479 +194.122.93.0/255.255.255.0
 24.8480 +194.122.108.0/255.255.255.0
 24.8481 +194.122.146.0/255.255.255.0
 24.8482 +194.122.163.0/255.255.254.0
 24.8483 +194.122.195.96/255.255.255.224
 24.8484 +194.122.215.72/255.255.255.248
 24.8485 +194.123.1.64/255.255.255.240
 24.8486 +194.123.7.144/255.255.255.240
 24.8487 +194.123.17.0/255.255.255.0
 24.8488 +194.123.25.160/255.255.255.248
 24.8489 +194.123.32.0/255.255.255.0
 24.8490 +194.123.51.0/255.255.255.0
 24.8491 +194.123.63.0/255.255.255.0
 24.8492 +194.123.71.0/255.255.254.0
 24.8493 +194.123.113.0/255.255.255.224
 24.8494 +194.123.122.32/255.255.255.224
 24.8495 +194.123.126.24/255.255.255.248
 24.8496 +194.123.126.112/255.255.255.240
 24.8497 +194.123.141.0/255.255.255.0
 24.8498 +194.123.157.120/255.255.255.248
 24.8499 +194.123.163.16/255.255.255.240
 24.8500 +194.123.163.112/255.255.255.248
 24.8501 +194.123.163.128/255.255.255.156
 24.8502 +194.123.168.160/255.255.255.240
 24.8503 +194.123.173.0/255.255.255.0
 24.8504 +194.123.181.240/255.255.255.240
 24.8505 +194.123.185.160/255.255.255.248
 24.8506 +194.123.199.240/255.255.255.240
 24.8507 +194.123.212.0/255.255.255.0
 24.8508 +194.123.217.40/255.255.255.248
 24.8509 +194.123.227.0/255.255.255.0
 24.8510 +194.123.244.0/255.255.255.224
 24.8511 +194.123.248.88/255.255.255.248
 24.8512 +194.123.251.192/255.255.255.240
 24.8513 +194.123.251.240/255.255.255.240
 24.8514 +194.123.253.0/255.255.255.128
 24.8515 +194.123.253.224/255.255.255.240
 24.8516 +194.123.255.192/255.255.255.248
 24.8517 +194.124.78.0/255.255.192.0
 24.8518 +194.125.140.32/255.255.255.224
 24.8519 +194.125.155.0/255.255.255.248
 24.8520 +194.125.209.0/255.255.255.0
 24.8521 +194.127.102.0/255.255.254.0
 24.8522 +194.127.119.0/255.255.255.0
 24.8523 +194.127.140.0/255.255.244.0
 24.8524 +194.127.158.0/255.255.255.0
 24.8525 +194.127.174.0/255.255.255.0
 24.8526 +194.127.180.0/255.255.255.0
 24.8527 +194.127.196.0/255.255.255.0
 24.8528 +194.127.204.0/255.255.254.0
 24.8529 +194.128.85.32/255.255.255.240
 24.8530 +194.128.85.128/255.255.255.192
 24.8531 +194.128.148.112/255.255.255.240
 24.8532 +194.128.160.112/255.255.255.240
 24.8533 +194.128.165.128/255.255.255.192
 24.8534 +194.128.212.0/255.255.255.0
 24.8535 +194.129.73.0/255.255.255.75
 24.8536 +194.129.73.182/255.255.255.182
 24.8537 +194.129.110.24/255.255.255.248
 24.8538 +194.129.173.0/255.255.255.0
 24.8539 +194.129.183.160/255.255.255.240
 24.8540 +194.130.71.0/255.255.255.0
 24.8541 +194.130.102.96/255.255.255.240
 24.8542 +194.131.68.0/255.255.255.0
 24.8543 +194.131.95.0/255.255.255.0
 24.8544 +194.131.98.224/255.255.255.240
 24.8545 +194.131.119.0/255.255.255.0
 24.8546 +194.131.125.88/255.255.255.248
 24.8547 +194.131.125.192/255.255.255.224
 24.8548 +194.131.192.160/255.255.255.224
 24.8549 +194.133.28.0/255.255.254.0
 24.8550 +194.133.62.0/255.255.255.192
 24.8551 +194.134.18.128/255.255.255.248
 24.8552 +194.134.80.232/255.255.255.248
 24.8553 +194.134.90.48/255.255.255.248
 24.8554 +194.134.98.0/255.255.255.0
 24.8555 +194.134.108.112/255.255.255.240
 24.8556 +194.134.234.64/255.255.255.248
 24.8557 +194.137.132.0/255.255.255.240
 24.8558 +194.138.36.0/255.255.254.0
 24.8559 +194.139.3.0/255.255.255.0
 24.8560 +194.139.16.0/255.255.255.0
 24.8561 +194.139.36.0/255.255.254.0
 24.8562 +194.139.40.0/255.255.252.0
 24.8563 +194.139.100.208/255.255.255.240
 24.8564 +194.139.101.0/255.255.255.128
 24.8565 +194.139.106.0/255.255.255.0
 24.8566 +194.139.235.0/255.255.255.0
 24.8567 +194.139.238.0/255.255.254.0
 24.8568 +194.139.250.0/255.255.255.0
 24.8569 +194.140.98.128/255.255.255.224
 24.8570 +194.140.111.0/255.255.255.0
 24.8571 +194.140.126.0/255.255.255.224
 24.8572 +194.141.51.0/255.255.255.0
 24.8573 +194.141.64.0/255.255.254.0
 24.8574 +194.143.45.0/255.255.255.0
 24.8575 +194.143.59.64/255.255.255.240
 24.8576 +194.143.196.0/255.255.255.0
 24.8577 +194.143.232.16/255.255.255.240
 24.8578 +194.144.242.192/255.255.255.192
 24.8579 +194.145.146.0/255.255.255.0
 24.8580 +194.146.62.0/255.255.255.0
 24.8581 +194.146.66.0/255.255.254.0
 24.8582 +194.146.100.0/255.255.255.0
 24.8583 +194.149.92.0/255.255.253.0
 24.8584 +194.151.57.192/255.255.255.240
 24.8585 +194.151.97.176/255.255.255.240
 24.8586 +194.151.115.0/255.255.255.0
 24.8587 +194.151.179.0/255.255.255.0
 24.8588 +194.151.195.192/255.255.255.224
 24.8589 +194.151.199.0/255.255.255.0
 24.8590 +194.151.210.0/255.255.255.0
 24.8591 +194.152.45.0/255.255.255.0
 24.8592 +194.152.91.184/255.255.255.248
 24.8593 +194.152.172.8/255.255.255.248
 24.8594 +194.153.32.0/255.255.216.0
 24.8595 +194.153.104.0/255.255.254.0
 24.8596 +194.153.110.0/255.255.255.0
 24.8597 +194.153.160.0/255.255.248.0
 24.8598 +194.154.134.152/255.255.255.248
 24.8599 +194.154.176.168/255.255.255.248
 24.8600 +194.156.4.0/255.255.253.0
 24.8601 +194.156.181.0/255.255.253.0
 24.8602 +194.156.187.0/255.255.255.0
 24.8603 +194.156.189.0/255.255.255.0
 24.8604 +194.156.216.0/255.255.248.0
 24.8605 +194.158.20.192/255.255.255.192
 24.8606 +194.158.21.64/255.255.255.192
 24.8607 +194.158.162.104/255.255.255.248
 24.8608 +194.161.70.0/255.255.255.0
 24.8609 +194.161.143.0/255.255.255.0
 24.8610 +194.161.150.0/255.255.255.0
 24.8611 +194.162.17.0/255.255.255.0
 24.8612 +194.162.29.0/255.255.255.192
 24.8613 +194.162.29.192/255.255.255.192
 24.8614 +194.162.32.192/255.255.255.248
 24.8615 +194.162.44.0/255.255.254.192
 24.8616 +194.162.65.32/255.255.255.240
 24.8617 +194.162.110.56/255.255.255.248
 24.8618 +194.162.131.0/255.255.255.192
 24.8619 +194.162.144.0/255.255.254.0
 24.8620 +194.162.174.152/255.255.255.248
 24.8621 +194.162.181.0/255.255.255.0
 24.8622 +194.162.188.0/255.255.255.0
 24.8623 +194.162.189.128/255.255.255.224
 24.8624 +194.162.189.192/255.255.255.240
 24.8625 +194.162.238.0/255.255.255.0
 24.8626 +194.162.243.0/255.255.255.248
 24.8627 +194.163.84.0/255.255.255.0
 24.8628 +194.163.134.48/255.255.255.240
 24.8629 +194.163.170.0/255.255.255.0
 24.8630 +194.163.213.0/255.255.255.0
 24.8631 +194.163.216.0/255.255.248.0
 24.8632 +194.163.228.0/255.255.255.0
 24.8633 +194.163.233.0/255.255.249.0
 24.8634 +194.165.136.0/255.255.255.0
 24.8635 +194.167.0.0/255.255.255.0
 24.8636 +194.167.56.0/255.255.255.0
 24.8637 +194.167.65.0/255.255.248.0
 24.8638 +194.167.73.0/255.255.252.0
 24.8639 +194.167.77.0/255.255.254.0
 24.8640 +194.167.92.0/255.255.255.0
 24.8641 +194.167.96.0/255.255.255.0
 24.8642 +194.167.202.0/255.255.254.0
 24.8643 +194.167.204.0/255.255.254.0
 24.8644 +194.167.244.0/255.255.254.0
 24.8645 +194.168.171.128/255.255.255.192
 24.8646 +194.170.206.0/255.255.255.0
 24.8647 +194.170.243.0/255.255.255.0
 24.8648 +194.172.1.144/255.255.255.240
 24.8649 +194.172.45.160/255.255.255.224
 24.8650 +194.172.69.0/255.255.254.0
 24.8651 +194.172.86.0/255.255.255.0
 24.8652 +194.172.101.0/255.255.255.0
 24.8653 +194.172.104.0/255.255.252.0
 24.8654 +194.172.118.0/255.255.254.0
 24.8655 +194.172.125.0/255.255.255.0
 24.8656 +194.172.127.0/255.255.255.0
 24.8657 +194.172.129.0/255.255.255.0
 24.8658 +194.172.144.0/255.255.255.0
 24.8659 +194.172.147.128/255.255.255.248
 24.8660 +194.172.147.160/255.255.255.224
 24.8661 +194.172.149.0/255.255.255.0
 24.8662 +194.172.155.0/255.255.255.0
 24.8663 +194.172.164.0/255.255.255.0
 24.8664 +194.172.188.0/255.255.255.0
 24.8665 +194.172.194.88/255.255.255.248
 24.8666 +194.172.195.0/255.255.255.0
 24.8667 +194.172.198.0/255.255.255.128
 24.8668 +194.172.199.64/255.255.255.192
 24.8669 +194.172.220.64/255.255.255.240
 24.8670 +194.172.220.112/255.255.255.240
 24.8671 +194.173.0.0/255.255.255.0
 24.8672 +194.173.18.0/255.255.253.0
 24.8673 +194.173.29.208/255.255.255.208
 24.8674 +194.173.42.192/255.255.255.240
 24.8675 +194.173.83.224/255.255.255.248
 24.8676 +194.173.84.0/255.255.255.0
 24.8677 +194.173.89.128/255.255.255.176
 24.8678 +194.173.107.0/255.255.255.0
 24.8679 +194.173.127.0/255.255.255.0
 24.8680 +194.173.136.0/255.255.252.0
 24.8681 +194.173.153.0/255.255.255.0
 24.8682 +194.173.160.0/255.255.255.0
 24.8683 +194.173.174.0/255.255.252.0
 24.8684 +194.173.186.64/255.255.255.240
 24.8685 +194.173.190.0/255.255.255.0
 24.8686 +194.173.192.0/255.255.248.0
 24.8687 +194.173.203.128/255.255.255.192
 24.8688 +194.173.230.0/255.255.255.0
 24.8689 +194.173.236.0/255.255.254.0
 24.8690 +194.173.240.0/255.255.248.0
 24.8691 +194.174.10.40/255.255.255.248
 24.8692 +194.174.12.0/255.255.255.0
 24.8693 +194.174.16.0/255.255.240.0
 24.8694 +194.174.39.128/255.255.255.192
 24.8695 +194.174.64.0/255.255.255.0
 24.8696 +194.174.83.128/255.255.255.248
 24.8697 +194.174.95.0/255.255.255.0
 24.8698 +194.174.200.0/255.255.255.0
 24.8699 +194.174.204.0/255.255.253.0
 24.8700 +194.174.230.0/255.255.255.0
 24.8701 +194.174.233.0/255.255.255.0
 24.8702 +194.174.242.128/255.255.255.192
 24.8703 +194.174.242.224/255.255.255.224
 24.8704 +194.174.252.0/255.255.255.0
 24.8705 +194.175.18.160/255.255.255.224
 24.8706 +194.175.19.0/255.255.255.0
 24.8707 +194.175.23.0/255.255.255.0
 24.8708 +194.175.27.64/255.255.255.128
 24.8709 +194.175.41.0/255.255.255.0
 24.8710 +194.175.50.0/255.255.255.0
 24.8711 +194.175.52.192/255.255.255.192
 24.8712 +194.175.68.96/255.255.255.224
 24.8713 +194.175.68.240/255.255.255.240
 24.8714 +194.175.70.16/255.255.255.240
 24.8715 +194.175.75.184/255.255.255.248
 24.8716 +194.175.80.64/255.255.255.240
 24.8717 +194.175.80.104/255.255.255.248
 24.8718 +194.175.85.32/255.255.255.240
 24.8719 +194.175.85.96/255.255.255.240
 24.8720 +194.175.85.160/255.255.255.240
 24.8721 +194.175.89.56/255.255.255.248
 24.8722 +194.175.89.240/255.255.255.248
 24.8723 +194.175.95.32/255.255.255.224
 24.8724 +194.175.98.0/255.255.255.192
 24.8725 +194.175.98.192/255.255.255.248
 24.8726 +194.175.108.192/255.255.255.224
 24.8727 +194.175.112.0/255.255.254.0
 24.8728 +194.175.118.0/255.255.254.0
 24.8729 +194.175.207.0/255.255.255.0
 24.8730 +194.175.221.0/255.255.255.0
 24.8731 +194.175.228.0/255.255.254.192
 24.8732 +194.175.243.96/255.255.255.224
 24.8733 +194.175.249.0/255.255.255.0
 24.8734 +194.176.154.168/255.255.255.248
 24.8735 +194.177.114.208/255.255.255.240
 24.8736 +194.178.27.0/255.255.254.0
 24.8737 +194.178.41.0/255.255.254.0
 24.8738 +194.178.44.0/255.255.255.0
 24.8739 +194.178.84.104/255.255.255.248
 24.8740 +194.178.138.0/255.255.255.0
 24.8741 +194.178.167.0/255.255.252.0
 24.8742 +194.179.107.0/255.255.255.64
 24.8743 +194.180.15.0/255.255.255.0
 24.8744 +194.180.44.0/255.255.251.0
 24.8745 +194.180.51.0/255.255.255.0
 24.8746 +194.180.55.0/255.255.255.0
 24.8747 +194.180.151.0/255.255.255.0
 24.8748 +194.180.175.0/255.255.255.0
 24.8749 +194.180.189.0/255.255.255.0
 24.8750 +194.180.208.16/255.255.255.240
 24.8751 +194.180.210.0/255.255.250.0
 24.8752 +194.180.226.0/255.255.255.224
 24.8753 +194.180.226.128/255.255.255.248
 24.8754 +194.180.226.224/255.255.255.224
 24.8755 +194.180.236.128/255.255.255.128
 24.8756 +194.180.238.0/255.255.255.0
 24.8757 +194.183.7.224/255.255.255.240
 24.8758 +194.183.8.160/255.255.255.224
 24.8759 +194.183.14.0/255.255.255.191
 24.8760 +194.183.14.136/255.255.255.248
 24.8761 +194.183.21.96/255.255.255.240
 24.8762 +194.183.21.176/255.255.255.240
 24.8763 +194.183.220.96/255.255.255.240
 24.8764 +194.183.226.144/255.255.255.248
 24.8765 +194.183.226.192/255.255.255.224
 24.8766 +194.184.14.0/255.255.255.0
 24.8767 +194.184.17.48/255.255.255.240
 24.8768 +194.184.17.128/255.255.255.128
 24.8769 +194.184.23.0/255.255.255.0
 24.8770 +194.184.34.200/255.255.255.248
 24.8771 +194.184.39.64/255.255.255.224
 24.8772 +194.184.53.128/255.255.255.192
 24.8773 +194.184.76.0/255.255.255.0
 24.8774 +194.184.94.0/255.255.255.0
 24.8775 +194.184.97.0/255.255.255.0
 24.8776 +194.184.130.0/255.255.255.0
 24.8777 +194.184.133.248/255.255.255.248
 24.8778 +194.184.156.224/255.255.255.224
 24.8779 +194.184.158.192/255.255.255.192
 24.8780 +194.184.168.128/255.255.255.128
 24.8781 +194.184.171.32/255.255.255.240
 24.8782 +194.184.171.96/255.255.255.224
 24.8783 +194.184.171.240/255.255.255.240
 24.8784 +194.185.96.0/255.255.255.224
 24.8785 +194.185.102.0/255.255.255.0
 24.8786 +194.185.119.32/255.255.255.224
 24.8787 +194.185.158.192/255.255.255.224
 24.8788 +194.185.196.0/255.255.255.192
 24.8789 +194.185.227.0/255.255.255.224
 24.8790 +194.185.231.0/255.255.255.224
 24.8791 +194.186.227.64/255.255.255.240
 24.8792 +194.186.233.0/255.255.254.0
 24.8793 +194.191.170.0/255.255.255.0
 24.8794 +194.192.189.0/255.255.255.0
 24.8795 +194.192.208.184/255.255.255.248
 24.8796 +194.192.241.64/255.255.255.240
 24.8797 +194.193.86.96/255.255.255.224
 24.8798 +194.193.109.0/255.255.255.224
 24.8799 +194.193.109.160/255.255.255.240
 24.8800 +194.193.194.128/255.255.255.240
 24.8801 +194.193.194.224/255.255.255.240
 24.8802 +194.194.52.0/255.255.255.0
 24.8803 +194.194.53.0/255.255.255.0
 24.8804 +194.194.84.144/255.255.255.248
 24.8805 +194.194.99.0/255.255.255.0
 24.8806 +194.194.145.0/255.255.255.0
 24.8807 +194.194.193.0/255.255.255.0
 24.8808 +194.194.240.0/255.255.255.0
 24.8809 +194.194.243.0/255.255.255.0
 24.8810 +194.195.94.0/255.255.255.0
 24.8811 +194.195.157.0/255.255.255.0
 24.8812 +194.195.159.0/255.255.255.0
 24.8813 +194.195.173.0/255.255.255.240
 24.8814 +194.195.180.96/255.255.255.240
 24.8815 +194.195.184.0/255.255.248.0
 24.8816 +194.195.196.0/255.255.254.0
 24.8817 +194.195.198.0/255.255.255.0
 24.8818 +194.195.228.16/255.255.255.240
 24.8819 +194.195.228.128/255.255.255.128
 24.8820 +194.195.244.0/255.255.255.224
 24.8821 +194.195.244.160/255.255.255.224
 24.8822 +194.195.247.0/255.255.255.0
 24.8823 +194.196.9.64/255.255.255.248
 24.8824 +194.196.11.96/255.255.255.248
 24.8825 +194.196.12.0/255.255.255.0
 24.8826 +194.196.13.0/255.255.255.0
 24.8827 +194.196.18.128/255.255.255.240
 24.8828 +194.196.18.192/255.255.255.224
 24.8829 +194.196.23.176/255.255.255.240
 24.8830 +194.196.50.96/255.255.255.224
 24.8831 +194.196.68.0/255.255.255.0
 24.8832 +194.196.72.64/255.255.255.224
 24.8833 +194.196.76.0/255.255.255.0
 24.8834 +194.196.90.0/255.255.255.0
 24.8835 +194.196.95.16/255.255.255.240
 24.8836 +194.196.152.0/255.255.255.0
 24.8837 +194.196.161.112/255.255.255.248
 24.8838 +194.196.182.0/255.255.255.240
 24.8839 +194.196.182.64/255.255.255.192
 24.8840 +194.196.182.160/255.255.255.192
 24.8841 +194.196.184.192/255.255.255.192
 24.8842 +194.196.187.64/255.255.255.192
 24.8843 +194.196.189.0/255.255.255.192
 24.8844 +194.196.189.128/255.255.255.128
 24.8845 +194.196.190.128/255.255.255.224
 24.8846 +194.196.190.224/255.255.255.224
 24.8847 +194.196.192.80/255.255.255.248
 24.8848 +194.196.220.0/255.255.255.192
 24.8849 +194.196.220.80/255.255.255.240
 24.8850 +194.196.232.160/255.255.255.224
 24.8851 +194.196.247.0/255.255.255.0
 24.8852 +194.197.21.0/255.255.255.0
 24.8853 +194.199.16.0/255.255.240.0
 24.8854 +194.199.41.0/255.255.251.0
 24.8855 +194.199.48.0/255.255.255.0
 24.8856 +194.199.78.0/255.255.255.0
 24.8857 +194.199.172.0/255.255.250.0
 24.8858 +194.199.243.0/255.255.251.0
 24.8859 +194.199.253.0/255.255.255.0
 24.8860 +194.200.31.0/255.255.255.224
 24.8861 +194.200.84.0/255.255.255.0
 24.8862 +194.200.180.0/255.255.252.0
 24.8863 +194.200.201.192/255.255.255.192
 24.8864 +194.201.32.16/255.255.255.240
 24.8865 +194.201.44.224/255.255.255.224
 24.8866 +194.201.99.0/255.255.255.240
 24.8867 +194.201.147.112/255.255.255.240
 24.8868 +194.201.166.192/255.255.255.192
 24.8869 +194.201.191.48/255.255.255.240
 24.8870 +194.201.196.96/255.255.255.224
 24.8871 +194.201.209.0/255.255.255.192
 24.8872 +194.201.219.8/255.255.255.248
 24.8873 +194.201.241.96/255.255.255.224
 24.8874 +194.202.136.0/255.255.255.0
 24.8875 +194.202.248.144/255.255.255.240
 24.8876 +194.203.32.192/255.255.255.192
 24.8877 +194.203.67.112/255.255.255.240
 24.8878 +194.203.72.128/255.255.255.224
 24.8879 +194.203.103.0/255.255.255.0
 24.8880 +194.204.184.0/255.255.255.0
 24.8881 +194.204.240.224/255.255.255.224
 24.8882 +194.204.245.64/255.255.255.224
 24.8883 +194.205.47.0/255.255.254.0
 24.8884 +194.205.68.32/255.255.255.236
 24.8885 +194.205.88.0/255.255.255.0
 24.8886 +194.205.123.0/255.255.255.0
 24.8887 +194.205.156.168/255.255.255.248
 24.8888 +194.205.172.232/255.255.255.248
 24.8889 +194.205.185.0/255.255.254.192
 24.8890 +194.205.217.0/255.255.255.240
 24.8891 +194.205.242.0/255.255.255.224
 24.8892 +194.206.39.120/255.255.255.248
 24.8893 +194.206.44.16/255.255.255.248
 24.8894 +194.206.48.192/255.255.255.192
 24.8895 +194.206.51.56/255.255.255.248
 24.8896 +194.206.67.0/255.255.255.128
 24.8897 +194.206.112.24/255.255.255.248
 24.8898 +194.206.209.12/255.255.255.248
 24.8899 +194.206.213.80/255.255.255.248
 24.8900 +194.206.227.16/255.255.255.240
 24.8901 +194.206.235.248/255.255.255.248
 24.8902 +194.206.236.128/255.255.255.128
 24.8903 +194.206.246.208/255.255.255.248
 24.8904 +194.207.134.0/255.255.255.0
 24.8905 +194.209.19.64/255.255.255.224
 24.8906 +194.209.124.112/255.255.255.240
 24.8907 +194.209.135.0/255.255.255.224
 24.8908 +194.209.135.96/255.255.255.224
 24.8909 +194.209.159.0/255.255.255.0
 24.8910 +194.209.250.0/255.255.255.0
 24.8911 +194.209.255.88/255.255.255.248
 24.8912 +194.211.120.0/255.255.255.0
 24.8913 +194.211.172.0/255.255.255.0
 24.8914 +194.212.79.0/255.255.255.0
 24.8915 +194.212.122.72/255.255.255.248
 24.8916 +194.212.228.112/255.255.255.248
 24.8917 +194.212.228.128/255.255.255.128
 24.8918 +194.213.50.224/255.255.255.240
 24.8919 +194.213.54.112/255.255.255.248
 24.8920 +194.213.210.0/255.255.255.0
 24.8921 +194.214.6.0/255.255.253.0
 24.8922 +194.214.9.0/255.255.240.0
 24.8923 +194.214.25.0/255.255.253.0
 24.8924 +194.214.28.0/255.255.254.0
 24.8925 +194.214.32.0/255.255.253.0
 24.8926 +194.214.53.0/255.255.254.0
 24.8927 +194.214.56.32/255.255.255.248
 24.8928 +194.214.56.40/255.255.255.248
 24.8929 +194.214.56.64/255.255.255.224
 24.8930 +194.214.56.120/255.255.255.248
 24.8931 +194.214.56.128/255.255.255.128
 24.8932 +194.214.82.0/255.255.255.0
 24.8933 +194.214.103.0/255.255.255.0
 24.8934 +194.214.141.0/255.255.253.0
 24.8935 +194.214.199.0/255.255.255.128
 24.8936 +194.214.199.128/255.255.255.128
 24.8937 +194.214.222.0/255.255.248.0
 24.8938 +194.214.230.0/255.255.255.0
 24.8939 +194.214.231.0/255.255.255.0
 24.8940 +194.216.47.32/255.255.255.240
 24.8941 +194.216.47.64/255.255.255.224
 24.8942 +194.216.148.0/255.255.255.0
 24.8943 +194.216.172.0/255.255.255.0
 24.8944 +194.216.237.0/255.255.255.192
 24.8945 +194.217.113.8/255.255.255.248
 24.8946 +194.218.101.0/255.255.255.0
 24.8947 +194.219.92.224/255.255.255.248
 24.8948 +194.219.175.16/255.255.255.248
 24.8949 +194.221.0.0/255.255.253.0
 24.8950 +194.221.10.0/255.255.255.0
 24.8951 +194.221.12.0/255.255.255.0
 24.8952 +194.221.20.112/255.255.255.240
 24.8953 +194.221.25.0/255.255.255.0
 24.8954 +194.221.40.0/255.255.255.0
 24.8955 +194.221.51.128/255.255.255.192
 24.8956 +194.221.52.0/255.255.255.0
 24.8957 +194.221.91.0/255.255.255.0
 24.8958 +194.221.117.128/255.255.255.192
 24.8959 +194.221.119.128/255.255.255.224
 24.8960 +194.221.119.192/255.255.255.192
 24.8961 +194.221.129.192/255.255.255.192
 24.8962 +194.221.130.192/255.255.255.224
 24.8963 +194.221.131.192/255.255.255.192
 24.8964 +194.221.139.0/255.255.255.0
 24.8965 +194.221.152.32/255.255.255.160
 24.8966 +194.221.161.0/255.255.255.0
 24.8967 +194.221.177.0/255.255.255.0
 24.8968 +194.221.181.160/255.255.255.192
 24.8969 +194.221.186.0/255.255.255.0
 24.8970 +194.221.193.0/255.255.255.128
 24.8971 +194.221.198.64/255.255.255.192
 24.8972 +194.221.198.240/255.255.255.240
 24.8973 +194.221.205.0/255.255.255.128
 24.8974 +194.221.208.0/255.255.255.0
 24.8975 +194.221.232.0/255.255.255.0
 24.8976 +194.221.240.0/255.255.255.0
 24.8977 +194.221.243.128/255.255.255.128
 24.8978 +194.223.152.192/255.255.255.192
 24.8979 +194.223.200.192/255.255.255.192
 24.8980 +194.223.231.192/255.255.255.224
 24.8981 +194.223.249.0/255.255.255.0
 24.8982 +194.228.94.0/255.255.255.0
 24.8983 +194.228.196.192/255.255.255.240
 24.8984 +194.229.116.0/255.255.255.0
 24.8985 +194.229.190.0/255.255.255.0
 24.8986 +194.229.241.128/255.255.255.248
 24.8987 +194.230.99.0/255.255.255.0
 24.8988 +194.230.110.0/255.255.255.0
 24.8989 +194.231.0.0/255.255.254.0
 24.8990 +194.231.10.0/255.255.255.0
 24.8991 +194.231.15.0/255.255.255.0
 24.8992 +194.231.17.0/255.255.255.0
 24.8993 +194.231.18.96/255.255.255.224
 24.8994 +194.231.36.0/255.255.255.192
 24.8995 +194.231.36.128/255.255.255.224
 24.8996 +194.231.38.8/255.255.255.248
 24.8997 +194.231.41.112/255.255.255.240
 24.8998 +194.231.67.96/255.255.255.224
 24.8999 +194.231.68.0/255.255.255.0
 24.9000 +194.231.72.0/255.255.255.0
 24.9001 +194.231.109.0/255.255.254.0
 24.9002 +194.231.145.248/255.255.255.248
 24.9003 +194.231.150.0/255.255.254.192
 24.9004 +194.231.152.0/255.255.255.248
 24.9005 +194.231.152.224/255.255.255.240
 24.9006 +194.231.152.248/255.255.255.248
 24.9007 +194.231.166.0/255.255.255.0
 24.9008 +194.231.174.0/255.255.255.0
 24.9009 +194.231.176.0/255.255.255.0
 24.9010 +194.231.184.0/255.255.255.0
 24.9011 +194.231.198.0/255.255.255.0
 24.9012 +194.231.201.16/255.255.255.240
 24.9013 +194.231.220.0/255.255.255.0
 24.9014 +194.231.242.96/255.255.255.240
 24.9015 +194.231.247.0/255.255.255.224
 24.9016 +194.231.254.224/255.255.255.224
 24.9017 +194.231.255.128/255.255.255.248
 24.9018 +194.233.100.0/255.255.255.0
 24.9019 +194.233.111.128/255.255.255.208
 24.9020 +194.233.115.0/255.255.255.0
 24.9021 +194.233.126.208/255.255.255.240
 24.9022 +194.233.134.0/255.255.253.0
 24.9023 +194.233.144.128/255.255.255.224
 24.9024 +194.233.155.88/255.255.255.248
 24.9025 +194.233.156.0/255.255.255.248
 24.9026 +194.233.156.192/255.255.255.240
 24.9027 +194.233.156.240/255.255.255.240
 24.9028 +194.233.167.0/255.255.255.0
 24.9029 +194.237.111.152/255.255.255.248
 24.9030 +194.237.235.208/255.255.255.248
 24.9031 +194.243.24.144/255.255.255.240
 24.9032 +194.243.36.0/255.255.255.0
 24.9033 +194.243.50.128/255.255.255.224
 24.9034 +194.243.52.224/255.255.255.224
 24.9035 +194.243.54.0/255.255.255.0
 24.9036 +194.243.58.128/255.255.255.240
 24.9037 +194.243.73.128/255.255.255.128
 24.9038 +194.243.104.160/255.255.255.224
 24.9039 +194.243.105.32/255.255.255.224
 24.9040 +194.243.110.64/255.255.255.192
 24.9041 +194.243.156.128/255.255.255.128
 24.9042 +194.243.196.0/255.255.254.0
 24.9043 +194.243.214.224/255.255.255.224
 24.9044 +194.243.229.0/255.255.255.0
 24.9045 +194.244.0.0/255.255.0.0
 24.9046 +194.246.128.0/255.255.128.0
 24.9047 +194.247.117.144/255.255.255.240
 24.9048 +194.247.119.32/255.255.255.248
 24.9049 +194.247.168.64/255.255.255.248
 24.9050 +194.248.30.0/255.255.255.0
 24.9051 +194.248.70.40/255.255.255.248
 24.9052 +194.248.192.240/255.255.255.240
 24.9053 +194.248.206.32/255.255.255.240
 24.9054 +194.248.234.32/255.255.255.248
 24.9055 +194.250.25.16/255.255.255.240
 24.9056 +194.250.46.232/255.255.255.248
 24.9057 +194.250.48.128/255.255.255.248
 24.9058 +194.250.112.0/255.255.255.192
 24.9059 +194.250.174.128/255.255.255.240
 24.9060 +194.250.228.0/255.255.255.0
 24.9061 +194.253.6.0/255.255.253.0
 24.9062 +194.253.62.80/255.255.255.240
 24.9063 +194.253.102.0/255.255.255.0
 24.9064 +194.253.123.0/255.255.255.0
 24.9065 +194.253.146.32/255.255.255.224
 24.9066 +194.253.146.112/255.255.255.240
 24.9067 +194.254.51.0/255.255.246.0
 24.9068 +194.254.61.0/255.255.255.96
 24.9069 +194.254.61.176/255.255.255.240
 24.9070 +194.254.69.0/255.255.254.0
 24.9071 +194.254.104.0/255.255.252.0
 24.9072 +194.254.111.0/255.255.251.0
 24.9073 +194.254.119.0/255.255.254.0
 24.9074 +194.254.121.0/255.255.253.0
 24.9075 +194.254.140.0/255.255.254.0
 24.9076 +194.254.143.0/255.255.255.0
 24.9077 +194.254.174.0/255.255.255.0
 24.9078 +194.254.175.0/255.255.255.0
 24.9079 +194.254.176.0/255.255.249.0
 24.9080 +194.254.199.0/255.255.255.0
 24.9081 +194.254.200.0/255.255.255.0
 24.9082 +194.254.209.0/255.255.255.0
 24.9083 +194.255.39.32/255.255.255.240
 24.9084 +194.255.107.192/255.255.255.192
 24.9085 +195.0.12.0/255.255.255.0
 24.9086 +195.0.13.0/255.255.255.0
 24.9087 +195.0.45.0/255.255.255.0
 24.9088 +195.0.84.0/255.255.253.0
 24.9089 +195.0.87.0/255.255.255.0
 24.9090 +195.0.89.0/255.255.255.0
 24.9091 +195.0.94.0/255.255.255.0
 24.9092 +195.0.114.0/255.255.255.0
 24.9093 +195.0.120.0/255.255.255.0
 24.9094 +195.1.166.192/255.255.255.224
 24.9095 +195.2.32.0/255.255.224.0
 24.9096 +195.2.187.96/255.255.255.240
 24.9097 +195.4.1.144/255.255.255.248
 24.9098 +195.4.240.0/255.255.255.248
 24.9099 +195.5.219.0/255.255.255.0
 24.9100 +195.6.78.64/255.255.255.192
 24.9101 +195.6.125.176/255.255.255.240
 24.9102 +195.6.126.128/255.255.255.224
 24.9103 +195.6.158.0/255.255.255.0
 24.9104 +195.6.175.160/255.255.255.240
 24.9105 +195.6.183.224/255.255.255.248
 24.9106 +195.6.191.192/255.255.255.240
 24.9107 +195.6.200.0/255.255.255.0
 24.9108 +195.6.224.240/255.255.255.248
 24.9109 +195.6.229.8/255.255.255.248
 24.9110 +195.6.229.96/255.255.255.224
 24.9111 +195.6.251.192/255.255.255.240
 24.9112 +195.7.50.0/255.255.255.224
 24.9113 +195.8.68.0/255.255.243.0
 24.9114 +195.8.182.0/255.255.255.116
 24.9115 +195.8.182.158/255.255.255.158
 24.9116 +195.8.187.16/255.255.255.248
 24.9117 +195.8.190.192/255.255.255.224
 24.9118 +195.10.9.128/255.255.255.224
 24.9119 +195.10.13.16/255.255.255.208
 24.9120 +195.10.60.0/255.255.255.0
 24.9121 +195.10.150.64/255.255.255.192
 24.9122 +195.10.194.192/255.255.255.248
 24.9123 +195.10.197.0/255.255.255.0
 24.9124 +195.12.18.160/255.255.255.240
 24.9125 +195.12.102.32/255.255.255.248
 24.9126 +195.13.197.136/255.255.255.248
 24.9127 +195.14.240.128/255.255.255.224
 24.9128 +195.14.248.64/255.255.255.248
 24.9129 +195.15.12.0/255.255.255.128
 24.9130 +195.18.113.0/255.255.255.0
 24.9131 +195.18.166.0/255.255.255.0
 24.9132 +195.18.195.0/255.255.255.0
 24.9133 +195.19.98.0/255.255.254.0
 24.9134 +195.20.126.0/255.255.254.0
 24.9135 +195.21.13.160/255.255.255.224
 24.9136 +195.21.39.80/255.255.255.240
 24.9137 +195.21.42.0/255.255.255.192
 24.9138 +195.21.54.32/255.255.255.240
 24.9139 +195.21.54.64/255.255.255.240
 24.9140 +195.21.143.128/255.255.255.240
 24.9141 +195.21.205.96/255.255.255.224
 24.9142 +195.22.144.0/255.255.254.0
 24.9143 +195.23.10.64/255.255.255.248
 24.9144 +195.23.241.64/255.255.255.224
 24.9145 +195.24.5.176/255.255.255.240
 24.9146 +195.24.96.200/255.255.255.248
 24.9147 +195.25.33.160/255.255.255.240
 24.9148 +195.25.52.32/255.255.255.224
 24.9149 +195.25.91.32/255.255.255.224
 24.9150 +195.25.121.0/255.255.255.0
 24.9151 +195.25.177.192/255.255.255.224
 24.9152 +195.25.177.224/255.255.255.224
 24.9153 +195.25.191.192/255.255.255.240
 24.9154 +195.25.208.128/255.255.255.192
 24.9155 +195.25.215.192/255.255.255.224
 24.9156 +195.25.217.8/255.255.255.248
 24.9157 +195.25.217.184/255.255.255.248
 24.9158 +195.25.218.200/255.255.255.248
 24.9159 +195.25.218.248/255.255.255.248
 24.9160 +195.25.219.32/255.255.255.248
 24.9161 +195.25.219.240/255.255.255.248
 24.9162 +195.25.223.8/255.255.255.248
 24.9163 +195.25.224.8/255.255.255.248
 24.9164 +195.25.226.240/255.255.255.248
 24.9165 +195.25.227.168/255.255.255.248
 24.9166 +195.25.233.248/255.255.255.248
 24.9167 +195.25.234.0/255.255.255.248
 24.9168 +195.25.235.240/255.255.255.248
 24.9169 +195.25.241.240/255.255.255.248
 24.9170 +195.25.245.16/255.255.255.240
 24.9171 +195.25.245.192/255.255.255.224
 24.9172 +195.25.245.240/255.255.255.248
 24.9173 +195.25.247.224/255.255.255.240
 24.9174 +195.25.249.128/255.255.255.192
 24.9175 +195.27.1.32/255.255.255.192
 24.9176 +195.27.8.0/255.255.255.224
 24.9177 +195.27.92.96/255.255.255.224
 24.9178 +195.27.92.192/255.255.255.240
 24.9179 +195.27.129.128/255.255.255.192
 24.9180 +195.28.71.0/255.255.254.240
 24.9181 +195.30.2.112/255.255.255.242
 24.9182 +195.30.64.16/255.255.255.248
 24.9183 +195.30.64.200/255.255.255.248
 24.9184 +195.30.154.0/255.255.255.0
 24.9185 +195.31.128.0/255.255.255.192
 24.9186 +195.31.128.128/255.255.255.192
 24.9187 +195.31.129.64/255.255.255.224
 24.9188 +195.31.141.128/255.255.255.224
 24.9189 +195.31.141.160/255.255.255.224
 24.9190 +195.31.141.192/255.255.255.224
 24.9191 +195.31.141.224/255.255.255.224
 24.9192 +195.31.167.0/255.255.255.192
 24.9193 +195.31.173.0/255.255.255.224
 24.9194 +195.31.176.64/255.255.255.224
 24.9195 +195.31.180.32/255.255.255.224
 24.9196 +195.31.189.32/255.255.255.224
 24.9197 +195.31.198.224/255.255.255.224
 24.9198 +195.31.240.128/255.255.255.224
 24.9199 +195.31.243.64/255.255.255.224
 24.9200 +195.31.250.192/255.255.255.192
 24.9201 +195.32.116.0/255.255.254.0
 24.9202 +195.33.97.32/255.255.255.240
 24.9203 +195.33.97.168/255.255.255.248
 24.9204 +195.33.99.128/255.255.255.224
 24.9205 +195.33.108.0/255.255.252.0
 24.9206 +195.33.129.0/255.255.255.240
 24.9207 +195.33.129.64/255.255.255.240
 24.9208 +195.33.132.0/255.255.252.0
 24.9209 +195.33.138.0/255.255.254.0
 24.9210 +195.34.138.128/255.255.255.224
 24.9211 +195.34.139.16/255.255.255.240
 24.9212 +195.37.41.0/255.255.255.0
 24.9213 +195.37.51.0/255.255.255.0
 24.9214 +195.37.104.0/255.255.251.0
 24.9215 +195.37.144.0/255.255.255.0
 24.9216 +195.37.181.0/255.255.255.192
 24.9217 +195.37.187.240/255.255.255.240
 24.9218 +195.37.191.32/255.255.255.240
 24.9219 +195.37.192.0/255.255.240.0
 24.9220 +195.37.234.32/255.255.255.240
 24.9221 +195.38.210.96/255.255.255.240
 24.9222 +195.38.210.120/255.255.255.248
 24.9223 +195.40.0.0/255.255.255.6
 24.9224 +195.40.0.251/255.255.255.1
 24.9225 +195.40.39.0/255.255.255.128
 24.9226 +195.40.166.128/255.255.255.192
 24.9227 +195.40.167.0/255.255.255.192
 24.9228 +195.40.188.192/255.255.255.224
 24.9229 +195.41.80.248/255.255.255.248
 24.9230 +195.41.228.32/255.255.255.248
 24.9231 +195.42.192.0/255.255.255.226
 24.9232 +195.42.192.31/255.255.255.31
 24.9233 +195.42.209.144/255.255.255.240
 24.9234 +195.43.2.96/255.255.255.240
 24.9235 +195.44.46.48/255.255.255.240
 24.9236 +195.44.46.80/255.255.255.240
 24.9237 +195.44.57.216/255.255.255.248
 24.9238 +195.44.57.232/255.255.255.248
 24.9239 +195.44.70.0/255.255.255.0
 24.9240 +195.44.71.0/255.255.255.0
 24.9241 +195.46.202.0/255.255.255.240
 24.9242 +195.46.214.144/255.255.255.240
 24.9243 +195.46.216.0/255.255.255.0
 24.9244 +195.47.58.64/255.255.255.248
 24.9245 +195.47.73.48/255.255.255.240
 24.9246 +195.47.89.64/255.255.255.192
 24.9247 +195.47.104.64/255.255.255.240
 24.9248 +195.49.110.144/255.255.255.248
 24.9249 +195.50.193.168/255.255.255.248
 24.9250 +195.51.51.0/255.255.255.0
 24.9251 +195.52.14.0/255.255.255.0
 24.9252 +195.52.68.96/255.255.255.224
 24.9253 +195.52.88.0/255.255.255.0
 24.9254 +195.53.49.144/255.255.255.248
 24.9255 +195.53.108.192/255.255.255.240
 24.9256 +195.54.64.224/255.255.255.240
 24.9257 +195.54.201.64/255.255.255.224
 24.9258 +195.55.201.64/255.255.255.192
 24.9259 +195.56.71.0/255.255.255.128
 24.9260 +195.56.245.32/255.255.255.248
 24.9261 +195.58.125.240/255.255.255.240
 24.9262 +195.59.110.128/255.255.255.192
 24.9263 +195.61.39.0/255.255.255.0
 24.9264 +195.61.203.0/255.255.255.0
 24.9265 +195.62.139.128/255.255.255.224
 24.9266 +195.62.197.48/255.255.255.240
 24.9267 +195.63.181.0/255.255.255.128
 24.9268 +195.64.29.0/255.255.255.224
 24.9269 +195.64.38.0/255.255.255.192
 24.9270 +195.64.59.80/255.255.255.240
 24.9271 +195.64.86.208/255.255.255.248
 24.9272 +195.65.60.0/255.255.255.0
 24.9273 +195.65.77.0/255.255.255.0
 24.9274 +195.65.130.0/255.255.255.0
 24.9275 +195.65.169.0/255.255.255.0
 24.9276 +195.65.216.112/255.255.255.248
 24.9277 +195.67.120.96/255.255.255.224
 24.9278 +195.68.2.192/255.255.255.192
 24.9279 +195.68.19.16/255.255.255.240
 24.9280 +195.68.25.144/255.255.255.240
 24.9281 +195.68.29.0/255.255.255.224
 24.9282 +195.68.31.40/255.255.255.248
 24.9283 +195.68.36.184/255.255.255.248
 24.9284 +195.68.38.192/255.255.255.240
 24.9285 +195.68.50.224/255.255.255.240
 24.9286 +195.68.59.0/255.255.255.248
 24.9287 +195.68.59.208/255.255.255.248
 24.9288 +195.68.61.96/255.255.255.224
 24.9289 +195.68.64.96/255.255.255.240
 24.9290 +195.68.64.128/255.255.255.240
 24.9291 +195.68.73.192/255.255.255.224
 24.9292 +195.68.76.144/255.255.255.240
 24.9293 +195.68.98.112/255.255.255.240
 24.9294 +195.68.100.112/255.255.255.248
 24.9295 +195.68.103.192/255.255.255.240
 24.9296 +195.68.103.208/255.255.255.240
 24.9297 +195.68.108.160/255.255.255.240
 24.9298 +195.68.120.112/255.255.255.248
 24.9299 +195.68.122.208/255.255.255.240
 24.9300 +195.68.153.32/255.255.255.240
 24.9301 +195.68.180.224/255.255.255.240
 24.9302 +195.68.236.0/255.255.254.0
 24.9303 +195.68.254.0/255.255.254.0
 24.9304 +195.70.46.144/255.255.255.240
 24.9305 +195.70.93.0/255.255.255.0
 24.9306 +195.70.228.48/255.255.255.240
 24.9307 +195.71.44.48/255.255.255.240
 24.9308 +195.71.94.64/255.255.255.192
 24.9309 +195.71.104.32/255.255.255.248
 24.9310 +195.71.104.48/255.255.255.248
 24.9311 +195.71.108.128/255.255.255.224
 24.9312 +195.71.110.32/255.255.255.224
 24.9313 +195.71.111.0/255.255.255.0
 24.9314 +195.71.125.16/255.255.255.248
 24.9315 +195.71.125.32/255.255.255.240
 24.9316 +195.71.125.64/255.255.255.224
 24.9317 +195.71.126.0/255.255.255.192
 24.9318 +195.71.127.64/255.255.255.192
 24.9319 +195.71.127.224/255.255.255.224
 24.9320 +195.71.137.0/255.255.255.240
 24.9321 +195.71.138.48/255.255.255.248
 24.9322 +195.71.138.224/255.255.255.224
 24.9323 +195.71.139.64/255.255.255.192
 24.9324 +195.71.139.200/255.255.255.232
 24.9325 +195.71.139.232/255.255.255.240
 24.9326 +195.71.140.0/255.255.255.248
 24.9327 +195.71.140.8/255.255.255.240
 24.9328 +195.71.140.32/255.255.255.232
 24.9329 +195.71.140.64/255.255.255.240
 24.9330 +195.71.140.120/255.255.255.248
 24.9331 +195.71.140.136/255.255.255.240
 24.9332 +195.71.140.160/255.255.255.240
 24.9333 +195.71.140.192/255.255.255.248
 24.9334 +195.71.140.208/255.255.255.240
 24.9335 +195.71.144.144/255.255.255.248
 24.9336 +195.71.145.8/255.255.255.248
 24.9337 +195.71.145.136/255.255.255.136
 24.9338 +195.71.146.48/255.255.255.248
 24.9339 +195.71.146.64/255.255.255.248
 24.9340 +195.71.146.80/255.255.255.128
 24.9341 +195.71.146.216/255.255.255.216
 24.9342 +195.71.152.0/255.255.255.248
 24.9343 +195.71.152.8/255.255.255.232
 24.9344 +195.71.152.128/255.255.255.192
 24.9345 +195.71.153.152/255.255.255.216
 24.9346 +195.71.153.224/255.255.255.248
 24.9347 +195.71.154.56/255.255.255.248
 24.9348 +195.71.155.0/255.255.255.128
 24.9349 +195.71.155.224/255.255.255.240
 24.9350 +195.71.157.224/255.255.255.248
 24.9351 +195.71.160.0/255.255.255.248
 24.9352 +195.71.160.8/255.255.255.248
 24.9353 +195.71.160.128/255.255.255.248
 24.9354 +195.71.163.128/255.255.255.128
 24.9355 +195.71.165.192/255.255.255.192
 24.9356 +195.71.167.88/255.255.255.248
 24.9357 +195.71.167.152/255.255.255.248
 24.9358 +195.71.167.240/255.255.255.248
 24.9359 +195.71.172.8/255.255.255.248
 24.9360 +195.71.175.136/255.255.255.248
 24.9361 +195.71.175.144/255.255.255.248
 24.9362 +195.71.177.32/255.255.255.248
 24.9363 +195.71.180.48/255.255.255.248
 24.9364 +195.71.191.120/255.255.255.248
 24.9365 +195.71.191.168/255.255.255.248
 24.9366 +195.71.192.200/255.255.255.248
 24.9367 +195.71.193.16/255.255.255.248
 24.9368 +195.71.199.248/255.255.255.248
 24.9369 +195.71.207.48/255.255.255.248
 24.9370 +195.71.207.112/255.255.255.248
 24.9371 +195.71.207.136/255.255.255.248
 24.9372 +195.71.207.208/255.255.255.248
 24.9373 +195.71.207.232/255.255.255.248
 24.9374 +195.71.207.240/255.255.255.248
 24.9375 +195.71.214.136/255.255.255.248
 24.9376 +195.71.214.184/255.255.255.248
 24.9377 +195.71.214.192/255.255.255.224
 24.9378 +195.71.214.224/255.255.255.248
 24.9379 +195.71.215.160/255.255.255.248
 24.9380 +195.71.215.168/255.255.255.248
 24.9381 +195.71.217.8/255.255.255.248
 24.9382 +195.71.223.208/255.255.255.248
 24.9383 +195.71.223.216/255.255.255.248
 24.9384 +195.72.64.0/255.255.224.0
 24.9385 +195.72.178.200/255.255.255.248
 24.9386 +195.72.190.112/255.255.255.240
 24.9387 +195.72.198.32/255.255.255.223
 24.9388 +195.75.10.192/255.255.255.192
 24.9389 +195.75.26.144/255.255.255.248
 24.9390 +195.75.27.128/255.255.255.128
 24.9391 +195.75.76.128/255.255.255.192
 24.9392 +195.75.90.0/255.255.255.224
 24.9393 +195.75.90.48/255.255.255.208
 24.9394 +195.75.97.160/255.255.255.224
 24.9395 +195.75.104.0/255.255.255.0
 24.9396 +195.75.106.128/255.255.255.224
 24.9397 +195.75.118.0/255.255.254.0
 24.9398 +195.75.151.0/255.255.255.0
 24.9399 +195.75.178.0/255.255.255.224
 24.9400 +195.75.178.184/255.255.255.248
 24.9401 +195.75.205.240/255.255.255.240
 24.9402 +195.75.240.224/255.255.255.224
 24.9403 +195.75.251.160/255.255.255.248
 24.9404 +195.75.253.192/255.255.255.192
 24.9405 +195.76.142.144/255.255.255.240
 24.9406 +195.76.172.0/255.255.255.0
 24.9407 +195.76.238.0/255.255.255.0
 24.9408 +195.77.71.0/255.255.255.0
 24.9409 +195.77.92.0/255.255.255.248
 24.9410 +195.77.169.0/255.255.255.0
 24.9411 +195.79.104.192/255.255.255.224
 24.9412 +195.80.213.72/255.255.255.248
 24.9413 +195.82.79.208/255.255.255.248
 24.9414 +195.82.84.16/255.255.255.248
 24.9415 +195.83.48.0/255.255.252.255
 24.9416 +195.83.53.0/255.255.254.255
 24.9417 +195.83.70.0/255.255.255.128
 24.9418 +195.83.84.0/255.255.254.0
 24.9419 +195.83.158.0/255.255.255.0
 24.9420 +195.84.9.64/255.255.255.192
 24.9421 +195.85.156.40/255.255.255.248
 24.9422 +195.85.156.144/255.255.255.240
 24.9423 +195.85.186.176/255.255.255.248
 24.9424 +195.85.202.0/255.255.255.0
 24.9425 +195.85.221.0/255.255.255.0
 24.9426 +195.85.223.0/255.255.255.0
 24.9427 +195.85.237.0/255.255.255.0
 24.9428 +195.86.6.208/255.255.255.248
 24.9429 +195.86.44.0/255.255.255.0
 24.9430 +195.86.126.224/255.255.255.240
 24.9431 +195.86.244.128/255.255.255.240
 24.9432 +195.86.246.176/255.255.255.248
 24.9433 +195.86.249.184/255.255.255.248
 24.9434 +195.91.51.16/255.255.255.240
 24.9435 +195.91.162.112/255.255.255.240
 24.9436 +195.92.32.128/255.255.255.192
 24.9437 +195.92.40.192/255.255.255.240
 24.9438 +195.92.44.240/255.255.255.240
 24.9439 +195.92.63.136/255.255.255.248
 24.9440 +195.94.54.160/255.255.255.224
 24.9441 +195.94.66.224/255.255.255.240
 24.9442 +195.94.136.0/255.255.255.0
 24.9443 +195.94.151.0/255.255.254.0
 24.9444 +195.94.176.0/255.255.255.0
 24.9445 +195.94.179.32/255.255.255.224
 24.9446 +195.94.180.0/255.255.255.0
 24.9447 +195.94.197.224/255.255.255.224
 24.9448 +195.95.38.32/255.255.255.224
 24.9449 +195.96.31.0/255.255.255.0
 24.9450 +195.97.73.192/255.255.255.240
 24.9451 +195.97.150.96/255.255.255.248
 24.9452 +195.97.198.32/255.255.255.248
 24.9453 +195.98.205.0/255.255.255.192
 24.9454 +195.98.240.0/255.255.253.0
 24.9455 +195.98.244.0/255.255.254.0
 24.9456 +195.99.170.0/255.255.255.0
 24.9457 +195.99.217.192/255.255.255.240
 24.9458 +195.99.219.224/255.255.255.224
 24.9459 +195.101.0.0/255.255.0.0
 24.9460 +195.102.60.40/255.255.255.245
 24.9461 +195.102.82.64/255.255.255.224
 24.9462 +195.102.85.32/255.255.255.224
 24.9463 +195.102.89.128/255.255.255.192
 24.9464 +195.103.22.192/255.255.255.192
 24.9465 +195.103.29.0/255.255.255.0
 24.9466 +195.103.41.192/255.255.255.224
 24.9467 +195.103.43.192/255.255.255.192
 24.9468 +195.103.47.192/255.255.255.192
 24.9469 +195.103.50.128/255.255.255.224
 24.9470 +195.103.57.0/255.255.255.128
 24.9471 +195.103.75.0/255.255.255.224
 24.9472 +195.103.92.0/255.255.254.0
 24.9473 +195.103.107.64/255.255.255.224
 24.9474 +195.103.131.32/255.255.255.224
 24.9475 +195.103.134.128/255.255.255.192
 24.9476 +195.103.134.192/255.255.255.192
 24.9477 +195.103.135.0/255.255.255.0
 24.9478 +195.103.153.168/255.255.255.248
 24.9479 +195.103.158.128/255.255.255.224
 24.9480 +195.103.178.128/255.255.255.128
 24.9481 +195.103.179.128/255.255.255.240
 24.9482 +195.103.182.0/255.255.254.0
 24.9483 +195.103.195.224/255.255.255.224
 24.9484 +195.103.202.0/255.255.255.0
 24.9485 +195.103.203.192/255.255.255.224
 24.9486 +195.103.204.0/255.255.255.128
 24.9487 +195.103.211.64/255.255.255.224
 24.9488 +195.103.225.64/255.255.255.192
 24.9489 +195.103.227.80/255.255.255.240
 24.9490 +195.103.232.0/255.255.255.0
 24.9491 +195.108.66.64/255.255.255.240
 24.9492 +195.108.131.0/255.255.255.0
 24.9493 +195.108.239.16/255.255.255.248
 24.9494 +195.109.87.0/255.255.255.0
 24.9495 +195.109.128.0/255.255.255.0
 24.9496 +195.109.172.88/255.255.255.248
 24.9497 +195.109.214.0/255.255.254.0
 24.9498 +195.109.225.96/255.255.255.224
 24.9499 +195.109.240.32/255.255.255.224
 24.9500 +195.109.246.136/255.255.255.248
 24.9501 +195.109.249.64/255.255.255.248
 24.9502 +195.110.4.32/255.255.255.192
 24.9503 +195.110.5.64/255.255.255.192
 24.9504 +195.110.95.88/255.255.255.248
 24.9505 +195.110.134.176/255.255.255.248
 24.9506 +195.110.139.16/255.255.255.240
 24.9507 +195.112.6.0/255.255.255.0
 24.9508 +195.112.82.216/255.255.255.248
 24.9509 +195.112.168.40/255.255.255.248
 24.9510 +195.112.176.48/255.255.255.248
 24.9511 +195.114.70.64/255.255.255.240
 24.9512 +195.114.72.208/255.255.255.248
 24.9513 +195.114.80.200/255.255.255.248
 24.9514 +195.114.85.128/255.255.255.128
 24.9515 +195.114.195.208/255.255.255.240
 24.9516 +195.114.200.240/255.255.255.240
 24.9517 +195.114.218.64/255.255.255.224
 24.9518 +195.115.33.8/255.255.255.248
 24.9519 +195.115.34.176/255.255.255.248
 24.9520 +195.115.36.128/255.255.255.224
 24.9521 +195.115.47.16/255.255.255.248
 24.9522 +195.115.47.152/255.255.255.248
 24.9523 +195.115.64.176/255.255.255.240
 24.9524 +195.115.85.208/255.255.255.248
 24.9525 +195.115.87.192/255.255.255.224
 24.9526 +195.115.97.192/255.255.255.224
 24.9527 +195.115.99.128/255.255.255.224
 24.9528 +195.115.99.192/255.255.255.224
 24.9529 +195.115.144.192/255.255.255.192
 24.9530 +195.115.162.0/255.255.255.240
 24.9531 +195.117.18.64/255.255.255.192
 24.9532 +195.117.155.176/255.255.255.240
 24.9533 +195.117.157.128/255.255.255.128
 24.9534 +195.118.100.64/255.255.255.64
 24.9535 +195.118.137.0/255.255.255.0
 24.9536 +195.120.8.128/255.255.255.192
 24.9537 +195.120.87.0/255.255.255.224
 24.9538 +195.120.87.64/255.255.255.224
 24.9539 +195.120.87.160/255.255.255.224
 24.9540 +195.120.106.0/255.255.254.0
 24.9541 +195.120.108.0/255.255.255.0
 24.9542 +195.120.113.160/255.255.255.224
 24.9543 +195.120.141.0/255.255.255.0
 24.9544 +195.120.153.0/255.255.255.0
 24.9545 +195.120.173.192/255.255.255.224
 24.9546 +195.120.173.224/255.255.255.240
 24.9547 +195.120.185.32/255.255.255.240
 24.9548 +195.120.198.0/255.255.255.224
 24.9549 +195.120.202.128/255.255.255.192
 24.9550 +195.120.221.128/255.255.255.224
 24.9551 +195.120.232.0/255.255.255.0
 24.9552 +195.120.252.0/255.255.255.192
 24.9553 +195.122.169.128/255.255.255.192
 24.9554 +195.122.170.0/255.255.255.192
 24.9555 +195.122.170.128/255.255.255.192
 24.9556 +195.122.175.240/255.255.255.240
 24.9557 +195.122.180.224/255.255.255.240
 24.9558 +195.122.187.160/255.255.255.224
 24.9559 +195.124.16.0/255.255.255.0
 24.9560 +195.124.32.0/255.255.255.0
 24.9561 +195.124.55.32/255.255.255.232
 24.9562 +195.124.84.0/255.255.254.0
 24.9563 +195.124.123.0/255.255.255.0
 24.9564 +195.124.128.0/255.255.255.0
 24.9565 +195.124.130.0/255.255.255.0
 24.9566 +195.124.138.0/255.255.255.0
 24.9567 +195.124.154.0/255.255.255.0
 24.9568 +195.124.159.160/255.255.255.224
 24.9569 +195.124.175.0/255.255.255.0
 24.9570 +195.124.183.0/255.255.255.0
 24.9571 +195.124.191.0/255.255.255.0
 24.9572 +195.124.198.160/255.255.255.224
 24.9573 +195.125.6.0/255.255.254.0
 24.9574 +195.125.11.32/255.255.255.240
 24.9575 +195.125.43.0/255.255.255.0
 24.9576 +195.125.163.0/255.255.255.0
 24.9577 +195.125.164.128/255.255.255.128
 24.9578 +195.125.190.0/255.255.254.128
 24.9579 +195.125.201.32/255.255.255.248
 24.9580 +195.125.201.40/255.255.255.248
 24.9581 +195.125.219.96/255.255.255.248
 24.9582 +195.125.241.64/255.255.255.224
 24.9583 +195.125.241.128/255.255.255.240
 24.9584 +195.125.253.168/255.255.255.248
 24.9585 +195.126.19.208/255.255.255.248
 24.9586 +195.126.69.40/255.255.255.248
 24.9587 +195.126.85.128/255.255.255.128
 24.9588 +195.126.100.24/255.255.255.248
 24.9589 +195.126.101.112/255.255.255.240
 24.9590 +195.126.102.0/255.255.255.192
 24.9591 +195.126.109.96/255.255.255.224
 24.9592 +195.126.172.96/255.255.255.224
 24.9593 +195.126.214.96/255.255.255.224
 24.9594 +195.126.223.200/255.255.255.248
 24.9595 +195.126.227.120/255.255.255.248
 24.9596 +195.126.249.104/255.255.255.248
 24.9597 +195.127.3.144/255.255.255.240
 24.9598 +195.127.19.16/255.255.255.240
 24.9599 +195.127.24.96/255.255.255.240
 24.9600 +195.127.25.96/255.255.255.224
 24.9601 +195.127.35.88/255.255.255.248
 24.9602 +195.127.40.96/255.255.255.240
 24.9603 +195.127.75.128/255.255.255.128
 24.9604 +195.127.107.40/255.255.255.248
 24.9605 +195.127.154.232/255.255.255.248
 24.9606 +195.127.154.240/255.255.255.224
 24.9607 +195.127.165.64/255.255.255.192
 24.9608 +195.127.182.16/255.255.255.240
 24.9609 +195.127.235.32/255.255.255.248
 24.9610 +195.127.235.40/255.255.255.248
 24.9611 +195.127.235.56/255.255.255.248
 24.9612 +195.127.235.160/255.255.255.248
 24.9613 +195.127.235.168/255.255.255.248
 24.9614 +195.127.235.192/255.255.255.240
 24.9615 +195.127.235.224/255.255.255.224
 24.9616 +195.127.238.64/255.255.255.224
 24.9617 +195.128.92.168/255.255.255.248
 24.9618 +195.128.95.152/255.255.255.248
 24.9619 +195.129.26.0/255.255.254.0
 24.9620 +195.130.74.0/255.255.254.0
 24.9621 +195.130.195.224/255.255.255.240
 24.9622 +195.130.196.176/255.255.255.240
 24.9623 +195.130.204.0/255.255.255.192
 24.9624 +195.131.63.24/255.255.255.248
 24.9625 +195.134.213.64/255.255.255.224
 24.9626 +195.135.74.24/255.255.255.248
 24.9627 +195.135.134.160/255.255.255.224
 24.9628 +195.135.159.32/255.255.255.224
 24.9629 +195.138.48.0/255.255.252.0
 24.9630 +195.141.3.80/255.255.255.248
 24.9631 +195.141.3.184/255.255.255.248
 24.9632 +195.141.72.192/255.255.255.224
 24.9633 +195.141.88.36/255.255.255.248
 24.9634 +195.141.102.32/255.255.255.240
 24.9635 +195.141.211.96/255.255.255.224
 24.9636 +195.142.192.0/255.255.255.0
 24.9637 +195.143.92.132/255.255.255.199
 24.9638 +195.143.116.192/255.255.255.248
 24.9639 +195.143.179.0/255.255.255.0
 24.9640 +195.143.194.16/255.255.255.248
 24.9641 +195.143.211.48/255.255.255.240
 24.9642 +195.143.236.248/255.255.255.248
 24.9643 +195.143.241.160/255.255.255.240
 24.9644 +195.143.242.96/255.255.255.248
 24.9645 +195.143.249.32/255.255.255.248
 24.9646 +195.143.249.64/255.255.255.240
 24.9647 +195.143.250.104/255.255.255.248
 24.9648 +195.144.39.120/255.255.255.248
 24.9649 +195.144.76.40/255.255.255.248
 24.9650 +195.144.77.72/255.255.255.248
 24.9651 +195.144.77.112/255.255.255.248
 24.9652 +195.144.128.0/255.255.255.248
 24.9653 +195.144.133.64/255.255.255.192
 24.9654 +195.144.226.96/255.255.255.240
 24.9655 +195.145.17.128/255.255.255.192
 24.9656 +195.145.18.32/255.255.255.224
 24.9657 +195.145.23.112/255.255.255.240
 24.9658 +195.145.29.16/255.255.255.240
 24.9659 +195.145.29.32/255.255.255.248
 24.9660 +195.145.30.176/255.255.255.248
 24.9661 +195.145.32.24/255.255.255.248
 24.9662 +195.145.34.96/255.255.255.240
 24.9663 +195.145.51.0/255.255.255.248
 24.9664 +195.145.57.128/255.255.255.248
 24.9665 +195.145.57.160/255.255.255.240
 24.9666 +195.145.89.240/255.255.255.248
 24.9667 +195.145.99.208/255.255.255.248
 24.9668 +195.145.102.0/255.255.255.248
 24.9669 +195.145.103.8/255.255.255.248
 24.9670 +195.145.109.0/255.255.255.0
 24.9671 +195.145.132.16/255.255.255.248
 24.9672 +195.145.209.240/255.255.255.248
 24.9673 +195.145.210.200/255.255.255.248
 24.9674 +195.145.214.112/255.255.255.248
 24.9675 +195.145.234.8/255.255.255.248
 24.9676 +195.145.235.240/255.255.255.248
 24.9677 +195.145.245.0/255.255.255.0
 24.9678 +195.147.25.32/255.255.255.248
 24.9679 +195.147.35.24/255.255.255.248
 24.9680 +195.147.39.0/255.255.255.248
 24.9681 +195.147.80.184/255.255.255.248
 24.9682 +195.147.85.56/255.255.255.248
 24.9683 +195.147.106.24/255.255.255.248
 24.9684 +195.147.109.8/255.255.255.248
 24.9685 +195.147.117.240/255.255.255.248
 24.9686 +195.147.119.72/255.255.255.248
 24.9687 +195.147.143.72/255.255.255.248
 24.9688 +195.147.143.232/255.255.255.248
 24.9689 +195.147.145.56/255.255.255.248
 24.9690 +195.147.149.176/255.255.255.248
 24.9691 +195.147.183.64/255.255.255.224
 24.9692 +195.147.188.96/255.255.255.248
 24.9693 +195.147.190.152/255.255.255.248
 24.9694 +195.148.240.0/255.255.252.0
 24.9695 +195.149.39.0/255.255.255.0
 24.9696 +195.149.128.64/255.255.255.192
 24.9697 +195.151.45.224/255.255.255.240
 24.9698 +195.152.233.208/255.255.255.240
 24.9699 +195.153.38.208/255.255.255.240
 24.9700 +195.153.45.248/255.255.255.248
 24.9701 +195.153.62.128/255.255.255.128
 24.9702 +195.153.101.160/255.255.255.224
 24.9703 +195.153.172.240/255.255.255.240
 24.9704 +195.153.203.32/255.255.255.224
 24.9705 +195.153.205.192/255.255.255.192
 24.9706 +195.154.72.0/255.255.255.0
 24.9707 +195.154.91.0/255.255.255.224
 24.9708 +195.154.103.168/255.255.255.248
 24.9709 +195.154.160.0/255.255.255.248
 24.9710 +195.154.183.96/255.255.255.248
 24.9711 +195.154.197.80/255.255.255.240
 24.9712 +195.154.199.224/255.255.255.240
 24.9713 +195.154.202.32/255.255.255.240
 24.9714 +195.154.204.128/255.255.255.224
 24.9715 +195.154.218.64/255.255.255.240
 24.9716 +195.154.233.192/255.255.255.192
 24.9717 +195.155.160.96/255.255.255.224
 24.9718 +195.157.58.144/255.255.255.240
 24.9719 +195.157.96.128/255.255.255.192
 24.9720 +195.157.98.16/255.255.255.248
 24.9721 +195.157.98.176/255.255.255.240
 24.9722 +195.157.129.32/255.255.255.240
 24.9723 +195.157.141.208/255.255.255.240
 24.9724 +195.157.145.128/255.255.255.128
 24.9725 +195.157.149.0/255.255.255.224
 24.9726 +195.157.150.56/255.255.255.248
 24.9727 +195.157.153.16/255.255.255.248
 24.9728 +195.157.153.72/255.255.255.248
 24.9729 +195.157.169.193/255.255.255.240
 24.9730 +195.157.179.72/255.255.255.240
 24.9731 +195.157.195.144/255.255.255.248
 24.9732 +195.157.200.184/255.255.255.248
 24.9733 +195.157.204.240/255.255.255.248
 24.9734 +195.157.217.120/255.255.255.248
 24.9735 +195.157.222.88/255.255.255.248
 24.9736 +195.157.223.80/255.255.255.248
 24.9737 +195.158.141.112/255.255.255.240
 24.9738 +195.158.157.64/255.255.255.192
 24.9739 +195.158.183.32/255.255.255.240
 24.9740 +195.158.184.96/255.255.255.240
 24.9741 +195.159.37.0/255.255.255.0
 24.9742 +195.159.73.192/255.255.255.192
 24.9743 +195.159.161.208/255.255.255.240
 24.9744 +195.159.209.128/255.255.255.128
 24.9745 +195.162.99.0/255.255.255.128
 24.9746 +195.162.194.128/255.255.255.248
 24.9747 +195.162.203.0/255.255.255.248
 24.9748 +195.167.64.224/255.255.255.224
 24.9749 +195.169.99.0/255.255.255.0
 24.9750 +195.170.130.0/255.255.255.224
 24.9751 +195.171.27.96/255.255.255.224
 24.9752 +195.171.73.96/255.255.255.224
 24.9753 +195.171.79.192/255.255.255.240
 24.9754 +195.171.114.160/255.255.255.224
 24.9755 +195.171.132.160/255.255.255.240
 24.9756 +195.171.143.0/255.255.255.128
 24.9757 +195.171.169.64/255.255.255.224
 24.9758 +195.171.189.0/255.255.255.128
 24.9759 +195.171.191.0/255.255.255.192
 24.9760 +195.172.63.24/255.255.255.248
 24.9761 +195.172.67.168/255.255.255.248
 24.9762 +195.172.92.224/255.255.255.248
 24.9763 +195.172.110.96/255.255.255.224
 24.9764 +195.172.131.216/255.255.255.248
 24.9765 +195.172.150.0/255.255.255.240
 24.9766 +195.172.154.56/255.255.255.248
 24.9767 +195.172.160.176/255.255.255.248
 24.9768 +195.172.213.200/255.255.255.248
 24.9769 +195.172.228.160/255.255.255.248
 24.9770 +195.172.247.88/255.255.255.248
 24.9771 +195.173.10.192/255.255.255.192
 24.9772 +195.173.172.0/255.255.255.240
 24.9773 +195.173.172.16/255.255.255.240
 24.9774 +195.176.204.0/255.255.252.0
 24.9775 +195.176.216.0/255.255.254.0
 24.9776 +195.176.225.0/255.255.254.0
 24.9777 +195.176.237.0/255.255.255.0
 24.9778 +195.178.223.0/255.255.255.0
 24.9779 +195.179.22.0/255.255.255.0
 24.9780 +195.182.72.240/255.255.255.248
 24.9781 +195.183.122.0/255.255.255.0
 24.9782 +195.183.160.224/255.255.255.224
 24.9783 +195.183.190.128/255.255.255.128
 24.9784 +195.184.115.64/255.255.255.192
 24.9785 +195.184.159.0/255.255.255.224
 24.9786 +195.187.80.0/255.255.255.0
 24.9787 +195.187.136.0/255.255.252.0
 24.9788 +195.188.16.160/255.255.255.224
 24.9789 +195.188.164.176/255.255.255.240
 24.9790 +195.188.195.224/255.255.255.240
 24.9791 +195.190.95.0/255.255.255.0
 24.9792 +195.191.38.24/255.255.255.248
 24.9793 +195.191.53.128/255.255.255.128
 24.9794 +195.191.142.0/255.255.255.224
 24.9795 +195.191.143.8/255.255.255.248
 24.9796 +195.193.35.0/255.255.255.248
 24.9797 +195.193.170.0/255.255.255.0
 24.9798 +195.193.172.0/255.255.255.0
 24.9799 +195.193.200.168/255.255.255.248
 24.9800 +195.193.215.248/255.255.255.248
 24.9801 +195.193.234.56/255.255.255.248
 24.9802 +195.197.189.128/255.255.255.248
 24.9803 +195.197.219.192/255.255.255.224
 24.9804 +195.199.20.32/255.255.255.240
 24.9805 +195.199.22.32/255.255.255.240
 24.9806 +195.199.33.160/255.255.255.240
 24.9807 +195.199.50.112/255.255.255.240
 24.9808 +195.199.60.240/255.255.255.240
 24.9809 +195.199.73.240/255.255.255.240
 24.9810 +195.202.65.96/255.255.255.224
 24.9811 +195.202.72.96/255.255.255.248
 24.9812 +195.204.47.0/255.255.255.224
 24.9813 +195.204.204.32/255.255.255.224
 24.9814 +195.205.46.0/255.255.255.128
 24.9815 +195.205.163.16/255.255.255.248
 24.9816 +195.205.248.128/255.255.255.128
 24.9817 +195.206.128.0/255.255.255.192
 24.9818 +195.207.71.8/255.255.255.248
 24.9819 +195.207.71.32/255.255.255.224
 24.9820 +195.207.71.64/255.255.255.192
 24.9821 +195.207.77.224/255.255.255.232
 24.9822 +195.207.93.40/255.255.255.248
 24.9823 +195.207.102.0/255.255.255.0
 24.9824 +195.207.153.64/255.255.255.192
 24.9825 +195.207.163.0/255.255.255.0
 24.9826 +195.210.129.0/255.255.255.0
 24.9827 +195.212.2.112/255.255.255.240
 24.9828 +195.212.4.0/255.255.255.0
 24.9829 +195.212.6.240/255.255.255.248
 24.9830 +195.212.10.16/255.255.255.240
 24.9831 +195.212.13.80/255.255.255.240
 24.9832 +195.212.15.0/255.255.255.0
 24.9833 +195.212.19.64/255.255.255.248
 24.9834 +195.212.23.104/255.255.255.248
 24.9835 +195.212.27.32/255.255.255.240
 24.9836 +195.212.32.128/255.255.255.224
 24.9837 +195.212.40.240/255.255.255.240
 24.9838 +195.212.45.32/255.255.255.224
 24.9839 +195.212.49.16/255.255.255.248
 24.9840 +195.212.61.192/255.255.255.192
 24.9841 +195.212.69.176/255.255.255.248
 24.9842 +195.212.88.0/255.255.255.224
 24.9843 +195.212.88.96/255.255.255.224
 24.9844 +195.212.89.32/255.255.255.224
 24.9845 +195.212.92.32/255.255.255.224
 24.9846 +195.212.105.0/255.255.255.0
 24.9847 +195.212.120.0/255.255.255.0
 24.9848 +195.212.154.160/255.255.255.240
 24.9849 +195.212.155.112/255.255.255.248
 24.9850 +195.212.169.64/255.255.255.224
 24.9851 +195.212.184.64/255.255.255.192
 24.9852 +195.212.185.0/255.255.255.0
 24.9853 +195.213.54.32/255.255.255.224
 24.9854 +195.213.55.240/255.255.255.240
 24.9855 +195.213.71.64/255.255.255.224
 24.9856 +195.213.93.64/255.255.255.224
 24.9857 +195.213.117.0/255.255.255.128
 24.9858 +195.213.119.0/255.255.255.0
 24.9859 +195.213.123.0/255.255.255.0
 24.9860 +195.213.180.0/255.255.255.0
 24.9861 +195.213.182.120/255.255.255.248
 24.9862 +195.213.218.128/255.255.255.128
 24.9863 +195.215.60.80/255.255.255.248
 24.9864 +195.216.69.0/255.255.255.224
 24.9865 +195.217.52.40/255.255.255.248
 24.9866 +195.217.130.128/255.255.255.128
 24.9867 +195.217.159.224/255.255.255.224
 24.9868 +195.217.212.176/255.255.255.240
 24.9869 +195.217.237.144/255.255.255.240
 24.9870 +195.220.63.0/255.255.255.0
 24.9871 +195.220.88.0/255.255.254.0
 24.9872 +195.220.90.0/255.255.255.0
 24.9873 +195.220.91.0/255.255.255.0
 24.9874 +195.220.95.0/255.255.255.0
 24.9875 +195.220.103.0/255.255.253.0
 24.9876 +195.220.107.0/255.255.255.0
 24.9877 +195.220.117.0/255.255.248.0
 24.9878 +195.220.170.0/255.255.248.0
 24.9879 +195.220.197.0/255.255.253.0
 24.9880 +195.220.209.0/255.255.248.0
 24.9881 +195.220.231.0/255.255.251.0
 24.9882 +195.221.14.0/255.255.253.0
 24.9883 +195.221.20.0/255.255.246.0
 24.9884 +195.221.30.0/255.255.255.0
 24.9885 +195.221.31.0/255.255.255.0
 24.9886 +195.221.32.0/255.255.255.0
 24.9887 +195.221.33.0/255.255.255.0
 24.9888 +195.221.34.0/255.255.255.0
 24.9889 +195.221.35.0/255.255.255.0
 24.9890 +195.221.36.0/255.255.255.0
 24.9891 +195.221.37.0/255.255.255.0
 24.9892 +195.221.84.216/255.255.255.248
 24.9893 +195.221.125.0/255.255.253.0
 24.9894 +195.221.138.0/255.255.254.128
 24.9895 +195.221.201.0/255.255.255.0
 24.9896 +195.221.232.0/255.255.255.0
 24.9897 +195.221.246.0/255.255.254.0
 24.9898 +195.222.252.0/255.255.255.128
 24.9899 +195.223.12.160/255.255.255.224
 24.9900 +195.223.22.128/255.255.255.224
 24.9901 +195.223.27.0/255.255.255.224
 24.9902 +195.223.27.64/255.255.255.224
 24.9903 +195.223.49.0/255.255.255.0
 24.9904 +195.223.64.0/255.255.255.240
 24.9905 +195.223.70.0/255.255.255.0
 24.9906 +195.223.91.96/255.255.255.248
 24.9907 +195.223.94.128/255.255.255.192
 24.9908 +195.223.109.200/255.255.255.248
 24.9909 +195.223.131.0/255.255.255.0
 24.9910 +195.223.135.0/255.255.252.0
 24.9911 +195.223.142.0/255.255.255.0
 24.9912 +195.223.154.0/255.255.255.0
 24.9913 +195.223.160.192/255.255.255.192
 24.9914 +195.223.168.0/255.255.255.0
 24.9915 +195.223.193.0/255.255.255.128
 24.9916 +195.223.203.128/255.255.255.192
 24.9917 +195.223.214.0/255.255.255.128
 24.9918 +195.223.220.0/255.255.255.0
 24.9919 +195.223.222.200/255.255.255.248
 24.9920 +195.223.222.224/255.255.255.224
 24.9921 +195.223.226.128/255.255.255.192
 24.9922 +195.223.239.64/255.255.255.240
 24.9923 +195.223.244.128/255.255.255.224
 24.9924 +195.223.245.64/255.255.255.224
 24.9925 +195.223.245.128/255.255.255.224
 24.9926 +195.223.249.128/255.255.255.192
 24.9927 +195.224.14.0/255.255.255.192
 24.9928 +195.224.34.0/255.255.255.0
 24.9929 +195.224.74.128/255.255.255.128
 24.9930 +195.224.106.160/255.255.255.248
 24.9931 +195.224.201.0/255.255.255.128
 24.9932 +195.224.206.0/255.255.255.0
 24.9933 +195.224.231.128/255.255.255.192
 24.9934 +195.224.238.64/255.255.255.192
 24.9935 +195.226.105.0/255.255.255.248
 24.9936 +195.226.114.192/255.255.255.192
 24.9937 +195.226.160.160/255.255.255.240
 24.9938 +195.226.168.224/255.255.255.224
 24.9939 +195.226.187.176/255.255.255.240
 24.9940 +195.226.188.0/255.255.255.0
 24.9941 +195.227.81.160/255.255.255.240
 24.9942 +195.227.89.120/255.255.255.248
 24.9943 +195.227.159.192/255.255.255.192
 24.9944 +195.228.48.0/255.255.255.0
 24.9945 +195.228.146.136/255.255.255.248
 24.9946 +195.229.35.88/255.255.255.248
 24.9947 +195.229.35.168/255.255.255.248
 24.9948 +195.229.101.0/255.255.255.128
 24.9949 +195.229.121.64/255.255.255.240
 24.9950 +195.229.123.0/255.255.255.192
 24.9951 +195.229.127.128/255.255.255.128
 24.9952 +195.229.153.16/255.255.255.240
 24.9953 +195.229.168.176/255.255.255.240
 24.9954 +195.229.225.80/255.255.255.240
 24.9955 +195.229.230.24/255.255.255.248
 24.9956 +195.229.231.208/255.255.255.240
 24.9957 +195.230.39.160/255.255.255.240
 24.9958 +195.230.58.104/255.255.255.248
 24.9959 +195.230.66.0/255.255.255.0
 24.9960 +195.230.75.192/255.255.255.224
 24.9961 +195.232.82.96/255.255.255.240
 24.9962 +195.233.64.0/255.255.255.240
 24.9963 +195.234.153.0/255.255.255.0
 24.9964 +195.238.238.240/255.255.255.240
 24.9965 +195.239.59.0/255.255.255.192
 24.9966 +195.239.137.96/255.255.255.240
 24.9967 +195.242.44.160/255.255.255.240
 24.9968 +195.242.53.88/255.255.255.248
 24.9969 +195.242.53.120/255.255.255.248
 24.9970 +195.242.54.176/255.255.255.240
 24.9971 +195.242.59.128/255.255.255.224
 24.9972 +195.242.162.208/255.255.255.240
 24.9973 +195.243.57.80/255.255.255.80
 24.9974 +195.243.74.40/255.255.255.248
 24.9975 +195.243.81.0/255.255.255.248
 24.9976 +195.243.131.104/255.255.255.248
 24.9977 +195.243.135.144/255.255.255.248
 24.9978 +195.243.139.144/255.255.255.248
 24.9979 +195.243.150.32/255.255.255.224
 24.9980 +195.243.162.0/255.255.255.0
 24.9981 +195.243.198.96/255.255.255.240
 24.9982 +195.243.199.208/255.255.255.240
 24.9983 +195.243.201.240/255.255.255.248
 24.9984 +195.243.216.192/255.255.255.192
 24.9985 +195.243.219.128/255.255.255.248
 24.9986 +195.243.238.192/255.255.255.240
 24.9987 +195.243.243.24/255.255.255.248
 24.9988 +195.243.248.64/255.255.255.224
 24.9989 +195.244.96.88/255.255.255.248
 24.9990 +195.244.107.224/255.255.255.224
 24.9991 +195.244.119.192/255.255.255.248
 24.9992 +195.244.127.232/255.255.255.248
 24.9993 +195.244.234.96/255.255.255.240
 24.9994 +195.247.58.0/255.255.255.0
 24.9995 +195.247.176.24/255.255.255.248
 24.9996 +195.248.7.96/255.255.255.240
 24.9997 +195.248.49.0/255.255.255.128
 24.9998 +195.249.67.200/255.255.255.248
 24.9999 +195.250.0.0/255.255.254.192
24.10000 +195.250.16.0/255.255.255.128
24.10001 +195.250.158.232/255.255.255.248
24.10002 +195.250.232.0/255.255.255.0
24.10003 +195.250.252.48/255.255.255.248
24.10004 +195.251.0.0/255.255.254.0
24.10005 +195.252.214.240/255.255.255.240
24.10006 +196.1.68.0/255.255.255.0
24.10007 +196.22.32.0/255.255.240.0
24.10008 +196.25.161.0/255.255.255.127
24.10009 +196.27.13.16/255.255.255.240
24.10010 +196.27.13.160/255.255.255.248
24.10011 +196.27.13.176/255.255.255.240
24.10012 +196.27.17.0/255.255.255.240
24.10013 +196.40.9.136/255.255.255.248
24.10014 +196.40.76.96/255.255.255.248
24.10015 +198.3.221.0/255.255.255.0
24.10016 +198.4.83.0/255.255.255.0
24.10017 +198.4.144.0/255.255.240.0
24.10018 +198.5.143.0/255.255.255.0
24.10019 +198.6.32.0/255.255.224.0
24.10020 +198.7.8.0/255.255.248.0
24.10021 +198.7.64.0/255.255.224.0
24.10022 +198.8.32.0/255.255.231.0
24.10023 +198.17.17.0/255.255.255.0
24.10024 +198.17.46.0/255.255.254.0
24.10025 +198.17.54.0/255.255.253.0
24.10026 +198.17.59.0/255.255.255.0
24.10027 +198.17.76.0/255.255.255.0
24.10028 +198.17.99.0/255.255.255.0
24.10029 +198.17.101.0/255.255.255.0
24.10030 +198.17.113.0/255.255.253.0
24.10031 +198.17.117.0/255.255.255.0
24.10032 +198.17.122.0/255.255.254.0
24.10033 +198.17.129.0/255.255.255.0
24.10034 +198.17.144.0/255.255.255.0
24.10035 +198.17.147.0/255.255.255.0
24.10036 +198.17.152.0/255.255.254.0
24.10037 +198.17.175.0/255.255.255.0
24.10038 +198.17.180.0/255.255.253.0
24.10039 +198.17.206.0/255.255.255.0
24.10040 +198.17.209.0/255.255.255.0
24.10041 +198.17.213.0/255.255.255.0
24.10042 +198.17.236.0/255.255.254.0
24.10043 +198.22.11.0/255.255.251.0
24.10044 +198.22.27.0/255.255.253.0
24.10045 +198.22.43.0/255.255.255.0
24.10046 +198.22.44.0/255.255.255.0
24.10047 +198.22.53.0/255.255.252.0
24.10048 +198.22.59.0/255.255.255.0
24.10049 +198.22.68.0/255.255.254.0
24.10050 +198.22.77.0/255.255.255.0
24.10051 +198.22.101.0/255.255.255.0
24.10052 +198.22.114.0/255.255.254.0
24.10053 +198.22.119.0/255.255.255.0
24.10054 +198.22.125.0/255.255.254.0
24.10055 +198.22.127.0/255.255.255.0
24.10056 +198.22.132.0/255.255.253.0
24.10057 +198.22.152.0/255.255.255.0
24.10058 +198.22.162.0/255.255.255.0
24.10059 +198.22.177.0/255.255.255.0
24.10060 +198.22.184.0/255.255.255.0
24.10061 +198.22.189.0/255.255.254.0
24.10062 +198.22.196.0/255.255.255.0
24.10063 +198.24.16.0/255.255.240.0
24.10064 +198.27.16.0/255.255.244.0
24.10065 +198.35.0.0/255.255.240.0
24.10066 +198.35.128.0/255.255.128.0
24.10067 +198.36.196.0/255.255.252.0
24.10068 +198.40.32.0/255.255.244.0
24.10069 +198.45.64.0/255.255.206.0
24.10070 +198.46.32.0/255.255.240.0
24.10071 +198.47.16.0/255.255.241.0
24.10072 +198.48.4.0/255.255.252.0
24.10073 +198.49.31.0/255.255.247.0
24.10074 +198.49.105.0/255.255.255.0
24.10075 +198.49.149.0/255.255.255.0
24.10076 +198.49.171.0/255.255.255.0
24.10077 +198.49.176.0/255.255.255.0
24.10078 +198.49.183.0/255.255.244.0
24.10079 +198.49.198.0/255.255.254.0
24.10080 +198.49.220.0/255.255.255.0
24.10081 +198.49.246.0/255.255.254.0
24.10082 +198.49.249.0/255.255.255.0
24.10083 +198.50.0.0/255.255.248.0
24.10084 +198.51.3.0/255.255.255.0
24.10085 +198.51.11.0/255.255.255.0
24.10086 +198.51.25.0/255.255.246.0
24.10087 +198.51.46.0/255.255.253.0
24.10088 +198.51.90.0/255.255.255.0
24.10089 +198.51.118.0/255.255.254.0
24.10090 +198.51.142.0/255.255.255.0
24.10091 +198.51.153.0/255.255.254.0
24.10092 +198.51.167.0/255.255.255.0
24.10093 +198.51.170.0/255.255.252.0
24.10094 +198.51.207.0/255.255.255.0
24.10095 +198.51.211.0/255.255.255.0
24.10096 +198.51.213.0/255.255.254.0
24.10097 +198.51.238.0/255.255.253.0
24.10098 +198.51.245.0/255.255.255.0
24.10099 +198.55.0.0/255.255.248.0
24.10100 +198.55.32.0/255.255.246.0
24.10101 +198.56.32.0/255.255.236.0
24.10102 +198.59.128.0/255.255.255.0
24.10103 +198.59.168.0/255.255.255.0
24.10104 +198.61.8.0/255.255.248.0
24.10105 +198.62.11.0/255.255.251.0
24.10106 +198.62.69.0/255.255.255.0
24.10107 +198.62.89.0/255.255.255.0
24.10108 +198.62.109.0/255.255.254.0
24.10109 +198.62.115.0/255.255.255.0
24.10110 +198.62.143.0/255.255.252.0
24.10111 +198.62.158.0/255.255.254.0
24.10112 +198.62.169.0/255.255.255.0
24.10113 +198.62.179.0/255.255.255.0
24.10114 +198.62.189.0/255.255.255.0
24.10115 +198.62.216.0/255.255.255.0
24.10116 +198.62.221.0/255.255.255.0
24.10117 +198.62.224.0/255.255.255.0
24.10118 +198.62.236.0/255.255.255.0
24.10119 +198.62.251.0/255.255.252.0
24.10120 +198.68.186.0/255.255.255.0
24.10121 +198.69.82.0/255.255.255.0
24.10122 +198.69.217.0/255.255.255.0
24.10123 +198.69.231.0/255.255.255.0
24.10124 +198.70.0.0/255.255.255.248
24.10125 +198.70.8.8/255.255.255.248
24.10126 +198.70.24.128/255.255.255.128
24.10127 +198.70.114.0/255.255.255.0
24.10128 +198.71.0.0/255.255.250.0
24.10129 +198.71.64.0/255.255.244.0
24.10130 +198.72.16.0/255.255.248.0
24.10131 +198.72.32.0/255.255.246.0
24.10132 +198.72.64.0/255.255.242.0
24.10133 +198.73.83.0/255.255.251.0
24.10134 +198.73.119.0/255.255.253.0
24.10135 +198.73.151.0/255.255.246.0
24.10136 +198.74.32.0/255.255.246.0
24.10137 +198.74.64.0/255.255.246.0
24.10138 +198.76.32.0/255.255.253.0
24.10139 +198.76.65.0/255.255.255.0
24.10140 +198.76.84.0/255.255.255.0
24.10141 +198.76.128.0/255.255.224.0
24.10142 +198.77.71.0/255.255.255.0
24.10143 +198.77.76.0/255.255.255.0
24.10144 +198.77.163.0/255.255.255.0
24.10145 +198.77.181.0/255.255.255.0
24.10146 +198.77.203.0/255.255.255.0
24.10147 +198.78.72.0/255.255.248.0
24.10148 +198.78.160.0/255.255.248.0
24.10149 +198.81.193.0/255.255.255.0
24.10150 +198.81.230.0/255.255.255.0
24.10151 +198.83.176.0/255.255.252.0
24.10152 +198.90.16.0/255.255.252.0
24.10153 +198.91.16.0/255.255.251.0
24.10154 +198.91.32.0/255.255.246.0
24.10155 +198.96.2.0/255.255.254.0
24.10156 +198.96.64.0/255.255.244.0
24.10157 +198.96.114.0/255.255.250.0
24.10158 +198.97.35.0/255.255.255.0
24.10159 +198.97.63.0/255.255.255.0
24.10160 +198.97.65.0/255.255.252.0
24.10161 +198.97.207.0/255.255.252.0
24.10162 +198.97.240.0/255.255.255.0
24.10163 +198.97.243.0/255.255.255.0
24.10164 +198.98.0.0/255.255.249.0
24.10165 +198.98.8.0/255.255.251.0
24.10166 +198.98.16.0/255.255.250.0
24.10167 +198.98.32.0/255.255.240.0
24.10168 +198.99.0.0/255.255.252.0
24.10169 +198.99.69.0/255.255.252.0
24.10170 +198.99.100.0/255.255.253.0
24.10171 +198.99.126.0/255.255.255.0
24.10172 +198.99.162.0/255.255.253.0
24.10173 +198.99.171.0/255.255.255.0
24.10174 +198.99.175.0/255.255.255.0
24.10175 +198.99.185.0/255.255.255.0
24.10176 +198.99.216.0/255.255.255.0
24.10177 +198.99.229.0/255.255.255.0
24.10178 +198.99.246.0/255.255.252.0
24.10179 +198.100.16.0/255.255.250.0
24.10180 +198.101.0.0/255.255.249.0
24.10181 +198.102.32.0/255.255.224.0
24.10182 +198.102.83.0/255.255.254.0
24.10183 +198.102.100.0/255.255.254.0
24.10184 +198.102.112.0/255.255.241.0
24.10185 +198.102.151.0/255.255.251.0
24.10186 +198.102.159.0/255.255.255.0
24.10187 +198.102.218.0/255.255.254.0
24.10188 +198.102.223.0/255.255.255.0
24.10189 +198.103.134.0/255.255.254.0
24.10190 +198.103.140.0/255.255.255.0
24.10191 +198.103.145.0/255.255.255.0
24.10192 +198.103.161.0/255.255.255.0
24.10193 +198.105.128.0/255.255.226.0
24.10194 +198.113.44.0/255.255.255.0
24.10195 +198.113.48.0/255.255.255.0
24.10196 +198.114.180.0/255.255.255.0
24.10197 +198.115.182.0/255.255.255.0
24.10198 +198.115.225.0/255.255.252.0
24.10199 +198.115.230.0/255.255.252.0
24.10200 +198.133.16.0/255.255.254.0
24.10201 +198.133.19.0/255.255.254.0
24.10202 +198.133.22.0/255.255.254.0
24.10203 +198.133.25.0/255.255.254.0
24.10204 +198.133.28.0/255.255.254.0
24.10205 +198.133.31.0/255.255.254.0
24.10206 +198.133.63.0/255.255.255.0
24.10207 +198.133.120.0/255.255.255.0
24.10208 +198.133.129.0/255.255.254.0
24.10209 +198.133.146.0/255.255.255.0
24.10210 +198.133.152.0/255.255.253.0
24.10211 +198.133.198.0/255.255.255.0
24.10212 +198.133.210.0/255.255.255.0
24.10213 +198.133.224.0/255.255.254.0
24.10214 +198.133.241.0/255.255.255.0
24.10215 +198.133.249.0/255.255.250.0
24.10216 +198.134.64.0/255.255.216.0
24.10217 +198.134.137.0/255.255.255.0
24.10218 +198.134.139.0/255.255.255.0
24.10219 +198.135.65.0/255.255.254.0
24.10220 +198.135.73.0/255.255.255.0
24.10221 +198.135.121.0/255.255.255.0
24.10222 +198.135.199.0/255.255.255.0
24.10223 +198.135.220.0/255.255.255.0
24.10224 +198.135.224.0/255.255.255.0
24.10225 +198.136.32.0/255.255.246.0
24.10226 +198.136.136.0/255.255.251.0
24.10227 +198.136.157.0/255.255.255.0
24.10228 +198.136.187.0/255.255.252.0
24.10229 +198.136.248.0/255.255.254.0
24.10230 +198.137.0.0/255.255.248.0
24.10231 +198.137.141.0/255.255.255.0
24.10232 +198.137.157.0/255.255.255.0
24.10233 +198.137.189.0/255.255.252.0
24.10234 +198.137.203.0/255.255.255.0
24.10235 +198.137.234.0/255.255.254.0
24.10236 +198.137.240.0/255.255.254.0
24.10237 +198.137.251.0/255.255.255.0
24.10238 +198.140.32.0/255.255.174.0
24.10239 +198.140.130.0/255.255.255.0
24.10240 +198.140.148.0/255.255.255.0
24.10241 +198.140.226.0/255.255.254.0
24.10242 +198.140.239.0/255.255.253.0
24.10243 +198.147.64.0/255.255.192.0
24.10244 +198.147.134.0/255.255.255.0
24.10245 +198.147.153.0/255.255.255.0
24.10246 +198.147.170.0/255.255.251.0
24.10247 +198.147.177.0/255.255.253.0
24.10248 +198.147.220.0/255.255.255.0
24.10249 +198.147.229.0/255.255.255.0
24.10250 +198.147.237.0/255.255.250.0
24.10251 +198.147.246.0/255.255.255.0
24.10252 +198.148.151.0/255.255.255.0
24.10253 +198.148.172.0/255.255.255.0
24.10254 +198.148.179.0/255.255.255.0
24.10255 +198.148.199.0/255.255.255.0
24.10256 +198.148.207.0/255.255.255.0
24.10257 +198.148.211.0/255.255.255.0
24.10258 +198.148.251.0/255.255.252.0
24.10259 +198.151.129.0/255.255.255.0
24.10260 +198.151.134.0/255.255.255.0
24.10261 +198.151.150.0/255.255.254.0
24.10262 +198.151.162.0/255.255.255.0
24.10263 +198.151.168.0/255.255.252.0
24.10264 +198.151.173.0/255.255.255.0
24.10265 +198.151.185.0/255.255.254.0
24.10266 +198.151.215.0/255.255.255.0
24.10267 +198.151.229.0/255.255.255.0
24.10268 +198.151.235.0/255.255.252.0
24.10269 +198.151.250.0/255.255.255.0
24.10270 +198.153.150.0/255.255.255.0
24.10271 +198.154.8.0/255.255.248.0
24.10272 +198.154.32.0/255.255.255.0
24.10273 +198.155.0.0/255.255.0.0
24.10274 +198.160.137.0/255.255.255.0
24.10275 +198.160.141.0/255.255.255.0
24.10276 +198.160.161.0/255.255.255.0
24.10277 +198.160.192.0/255.255.253.0
24.10278 +198.160.203.0/255.255.252.0
24.10279 +198.160.210.0/255.255.255.0
24.10280 +198.160.237.0/255.255.249.0
24.10281 +198.161.21.0/255.255.255.0
24.10282 +198.161.23.0/255.255.251.0
24.10283 +198.161.193.0/255.255.255.0
24.10284 +198.161.239.0/255.255.255.0
24.10285 +198.162.2.0/255.255.255.0
24.10286 +198.162.9.0/255.255.255.0
24.10287 +198.162.84.0/255.255.253.0
24.10288 +198.162.124.0/255.255.253.0
24.10289 +198.163.8.0/255.255.232.0
24.10290 +198.163.72.0/255.255.236.0
24.10291 +198.163.93.0/255.255.254.0
24.10292 +198.163.96.0/255.255.241.0
24.10293 +198.163.112.0/255.255.254.0
24.10294 +198.163.128.0/255.255.240.0
24.10295 +198.163.152.0/255.255.255.0
24.10296 +198.163.154.0/255.255.255.0
24.10297 +198.163.156.0/255.255.255.0
24.10298 +198.163.160.0/255.255.240.0
24.10299 +198.163.208.0/255.255.252.0
24.10300 +198.165.21.64/255.255.255.240
24.10301 +198.167.33.0/255.255.161.0
24.10302 +198.168.6.0/255.255.255.0
24.10303 +198.168.8.0/255.255.254.0
24.10304 +198.168.12.0/255.255.252.0
24.10305 +198.169.0.0/255.255.255.0
24.10306 +198.169.28.0/255.255.223.0
24.10307 +198.169.100.0/255.255.231.0
24.10308 +198.169.129.0/255.255.255.0
24.10309 +198.169.131.0/255.255.255.0
24.10310 +198.169.202.0/255.255.254.0
24.10311 +198.169.241.0/255.255.251.0
24.10312 +198.174.0.0/255.254.248.0
24.10313 +198.175.64.0/255.255.196.0
24.10314 +198.175.145.0/255.255.255.0
24.10315 +198.175.149.0/255.255.255.0
24.10316 +198.175.159.0/255.255.255.0
24.10317 +198.175.161.0/255.255.255.0
24.10318 +198.175.192.0/255.255.255.0
24.10319 +198.175.200.0/255.255.255.0
24.10320 +198.175.218.0/255.255.251.0
24.10321 +198.176.0.0/255.255.240.0
24.10322 +198.176.32.0/255.255.245.0
24.10323 +198.176.138.0/255.255.255.0
24.10324 +198.176.174.0/255.255.255.0
24.10325 +198.176.198.0/255.255.255.0
24.10326 +198.176.200.0/255.255.255.0
24.10327 +198.176.208.0/255.255.252.0
24.10328 +198.176.229.0/255.255.254.0
24.10329 +198.176.252.0/255.255.255.0
24.10330 +198.177.8.0/255.255.236.0
24.10331 +198.177.128.0/255.255.246.0
24.10332 +198.177.153.0/255.255.255.0
24.10333 +198.177.238.0/255.255.253.0
24.10334 +198.177.248.0/255.255.253.0
24.10335 +198.178.16.0/255.255.244.0
24.10336 +198.178.146.0/255.255.255.0
24.10337 +198.178.150.0/255.255.255.0
24.10338 +198.178.160.0/255.255.255.0
24.10339 +198.178.168.0/255.255.253.0
24.10340 +198.178.187.0/255.255.253.0
24.10341 +198.178.200.0/255.255.254.0
24.10342 +198.178.252.0/255.255.254.0
24.10343 +198.179.0.0/255.255.251.0
24.10344 +198.179.20.0/255.255.254.0
24.10345 +198.179.32.0/255.255.236.0
24.10346 +198.179.160.0/255.255.255.0
24.10347 +198.179.174.0/255.255.254.0
24.10348 +198.179.199.0/255.255.255.0
24.10349 +198.179.213.0/255.255.255.0
24.10350 +198.179.233.0/255.255.255.0
24.10351 +198.179.246.0/255.255.255.0
24.10352 +198.179.249.0/255.255.255.0
24.10353 +198.180.4.0/255.255.252.0
24.10354 +198.180.147.0/255.255.255.0
24.10355 +198.180.188.0/255.255.255.0
24.10356 +198.180.192.0/255.255.255.0
24.10357 +198.180.193.0/255.255.254.0
24.10358 +198.180.195.0/255.255.255.0
24.10359 +198.180.197.0/255.255.254.0
24.10360 +198.180.207.0/255.255.255.0
24.10361 +198.180.211.0/255.255.255.0
24.10362 +198.180.227.0/255.255.255.0
24.10363 +198.180.232.0/255.255.255.0
24.10364 +198.180.240.0/255.255.254.0
24.10365 +198.181.16.0/255.255.240.0
24.10366 +198.181.128.0/255.255.254.0
24.10367 +198.181.151.0/255.255.255.0
24.10368 +198.181.179.0/255.255.255.0
24.10369 +198.181.223.0/255.255.252.0
24.10370 +198.181.231.0/255.255.255.0
24.10371 +198.181.237.0/255.255.255.0
24.10372 +198.181.251.0/255.255.251.0
24.10373 +198.182.140.0/255.255.255.0
24.10374 +198.182.143.0/255.255.255.0
24.10375 +198.182.161.0/255.255.253.0
24.10376 +198.182.173.0/255.255.255.0
24.10377 +198.182.199.0/255.255.253.0
24.10378 +198.182.223.0/255.255.254.0
24.10379 +198.182.235.0/255.255.255.0
24.10380 +198.182.237.0/255.255.255.0
24.10381 +198.182.248.0/255.255.255.0
24.10382 +198.183.128.0/255.255.252.0
24.10383 +198.183.146.0/255.255.254.0
24.10384 +198.183.153.0/255.255.255.0
24.10385 +198.183.196.0/255.255.255.0
24.10386 +198.184.32.0/255.255.226.0
24.10387 +198.184.128.0/255.255.255.0
24.10388 +198.184.131.0/255.255.255.0
24.10389 +198.184.139.0/255.255.255.0
24.10390 +198.184.155.0/255.255.252.0
24.10391 +198.184.170.0/255.255.255.0
24.10392 +198.184.177.0/255.255.255.0
24.10393 +198.184.180.0/255.255.252.0
24.10394 +198.184.200.0/255.255.255.0
24.10395 +198.184.209.0/255.255.255.0
24.10396 +198.184.210.0/255.255.255.0
24.10397 +198.184.221.0/255.255.255.0
24.10398 +198.184.224.0/255.255.255.0
24.10399 +198.185.142.0/255.255.255.0
24.10400 +198.185.167.0/255.255.255.0
24.10401 +198.185.208.0/255.255.252.0
24.10402 +198.185.250.0/255.255.250.0
24.10403 +198.186.32.0/255.255.224.0
24.10404 +198.186.139.0/255.255.255.0
24.10405 +198.186.170.0/255.255.253.0
24.10406 +198.186.199.0/255.255.255.0
24.10407 +198.186.218.0/255.255.252.0
24.10408 +198.186.229.0/255.255.255.0
24.10409 +198.187.0.0/255.255.240.0
24.10410 +198.187.160.0/255.255.254.0
24.10411 +198.187.189.0/255.255.254.0
24.10412 +198.187.220.0/255.255.253.0
24.10413 +198.187.254.0/255.255.255.0
24.10414 +198.190.145.0/255.255.254.0
24.10415 +198.190.161.0/255.255.255.0
24.10416 +198.190.165.0/255.255.255.0
24.10417 +198.190.170.0/255.255.255.0
24.10418 +198.190.173.0/255.255.252.0
24.10419 +198.190.185.0/255.255.255.0
24.10420 +198.190.190.0/255.255.255.0
24.10421 +198.190.209.0/255.255.255.0
24.10422 +198.190.224.0/255.255.254.0
24.10423 +198.190.227.0/255.255.255.0
24.10424 +198.190.230.0/255.255.255.0
24.10425 +198.190.235.0/255.255.251.0
24.10426 +198.199.0.0/255.255.252.0
24.10427 +198.199.8.0/255.255.250.0
24.10428 +198.199.16.0/255.255.240.0
24.10429 +198.199.131.0/255.255.254.0
24.10430 +198.199.142.0/255.255.255.0
24.10431 +198.199.151.0/255.255.253.0
24.10432 +198.199.181.0/255.255.255.0
24.10433 +198.199.199.0/255.255.255.0
24.10434 +198.199.247.0/255.255.255.0
24.10435 +198.200.132.0/255.255.254.0
24.10436 +198.200.137.0/255.255.255.0
24.10437 +198.200.152.0/255.255.254.0
24.10438 +198.200.155.0/255.255.255.0
24.10439 +198.200.186.0/255.255.254.0
24.10440 +198.200.201.0/255.255.255.0
24.10441 +198.200.235.0/255.255.255.0
24.10442 +198.200.248.0/255.255.255.0
24.10443 +198.200.252.0/255.254.244.0
24.10444 +198.202.8.0/255.255.254.0
24.10445 +198.202.64.0/255.255.192.0
24.10446 +198.202.146.0/255.255.254.0
24.10447 +198.202.154.0/255.255.255.0
24.10448 +198.202.178.0/255.255.252.0
24.10449 +198.202.186.0/255.255.255.0
24.10450 +198.202.208.0/255.255.255.0
24.10451 +198.202.222.0/255.255.255.0
24.10452 +198.202.227.0/255.255.252.0
24.10453 +198.202.233.0/255.255.255.0
24.10454 +198.202.239.0/255.255.255.0
24.10455 +198.203.135.0/255.255.255.0
24.10456 +198.203.166.0/255.255.255.0
24.10457 +198.203.168.0/255.255.255.0
24.10458 +198.203.170.0/255.255.252.0
24.10459 +198.203.183.0/255.255.255.0
24.10460 +198.203.186.0/255.255.254.0
24.10461 +198.203.190.0/255.255.255.0
24.10462 +198.203.216.0/255.255.255.0
24.10463 +198.203.237.0/255.255.251.0
24.10464 +198.203.246.0/255.255.252.0
24.10465 +198.204.97.0/255.255.255.0
24.10466 +198.204.100.0/255.255.252.0
24.10467 +198.204.124.0/255.255.255.0
24.10468 +198.206.157.0/255.255.252.0
24.10469 +198.206.194.0/255.255.255.0
24.10470 +198.206.210.0/255.255.252.0
24.10471 +198.206.218.0/255.255.250.0
24.10472 +198.207.130.0/255.255.250.0
24.10473 +198.207.158.0/255.255.255.0
24.10474 +198.207.176.0/255.255.255.0
24.10475 +198.207.237.0/255.255.252.0
24.10476 +198.207.243.0/255.255.255.0
24.10477 +198.207.252.0/255.255.254.0
24.10478 +198.212.135.0/255.255.250.0
24.10479 +198.212.143.0/255.255.255.0
24.10480 +198.212.164.0/255.255.254.0
24.10481 +198.212.199.0/255.255.255.0
24.10482 +198.212.203.0/255.255.255.0
24.10483 +198.212.208.0/255.255.251.0
24.10484 +198.212.250.0/255.255.255.0
24.10485 +198.217.8.0/255.255.240.0
24.10486 +198.218.0.0/255.251.0.0
24.10487 +198.231.16.0/255.255.246.0
24.10488 +198.232.137.0/255.255.254.0
24.10489 +198.232.172.0/255.255.252.0
24.10490 +198.232.178.0/255.255.255.0
24.10491 +198.232.198.0/255.255.250.0
24.10492 +198.232.205.0/255.255.251.0
24.10493 +198.232.211.0/255.255.255.0
24.10494 +198.232.253.0/255.255.254.0
24.10495 +198.235.63.0/255.255.255.0
24.10496 +198.236.0.0/255.252.0.0
24.10497 +198.240.8.0/255.255.232.0
24.10498 +198.244.16.0/255.255.240.0
24.10499 +198.245.128.0/255.255.247.0
24.10500 +198.245.139.0/255.255.255.0
24.10501 +198.245.141.0/255.255.255.0
24.10502 +198.245.159.0/255.255.255.0
24.10503 +198.245.181.0/255.255.254.0
24.10504 +198.245.186.0/255.255.252.0
24.10505 +198.245.244.0/255.255.255.0
24.10506 +198.246.32.0/255.255.244.0
24.10507 +198.246.64.0/255.255.192.0
24.10508 +198.246.135.0/255.255.251.0
24.10509 +198.246.159.0/255.255.255.0
24.10510 +198.246.196.0/255.255.255.0
24.10511 +198.248.0.0/255.255.0.0
24.10512 +198.249.103.0/255.255.255.0
24.10513 +198.251.0.0/255.255.248.0
24.10514 +198.252.0.0/255.255.248.0
24.10515 +198.252.143.0/255.255.255.0
24.10516 +198.252.211.0/255.255.255.0
24.10517 +198.252.231.0/255.255.255.0
24.10518 +199.2.109.0/255.255.255.0
24.10519 +199.4.67.0/255.255.255.0
24.10520 +199.4.128.0/255.255.255.0
24.10521 +199.4.159.0/255.255.254.0
24.10522 +199.4.193.0/255.255.255.0
24.10523 +199.4.250.0/255.255.254.0
24.10524 +199.5.64.0/255.255.192.0
24.10525 +199.5.133.0/255.255.255.0
24.10526 +199.5.146.0/255.255.255.0
24.10527 +199.5.252.0/255.255.255.0
24.10528 +199.5.253.0/255.255.255.0
24.10529 +199.6.35.0/255.255.255.0
24.10530 +199.6.73.0/255.255.253.0
24.10531 +199.9.11.0/255.255.255.0
24.10532 +199.9.32.0/255.255.231.0
24.10533 +199.10.16.0/255.255.246.0
24.10534 +199.10.36.0/255.255.250.0
24.10535 +199.10.44.0/255.255.255.0
24.10536 +199.10.45.0/255.255.255.0
24.10537 +199.10.46.0/255.255.255.0
24.10538 +199.10.48.0/255.255.255.0
24.10539 +199.10.50.0/255.255.255.0
24.10540 +199.10.55.0/255.255.255.0
24.10541 +199.10.58.0/255.255.255.0
24.10542 +199.10.63.0/255.255.255.0
24.10543 +199.10.93.0/255.255.255.0
24.10544 +199.10.122.0/255.255.255.0
24.10545 +199.10.148.0/255.255.255.0
24.10546 +199.10.160.0/255.255.255.0
24.10547 +199.10.174.0/255.255.255.0
24.10548 +199.10.198.0/255.255.255.0
24.10549 +199.10.204.0/255.255.254.0
24.10550 +199.10.212.0/255.255.254.0
24.10551 +199.10.214.0/255.255.255.0
24.10552 +199.10.215.0/255.255.254.0
24.10553 +199.10.237.0/255.255.254.0
24.10554 +199.10.244.0/255.255.255.0
24.10555 +199.15.0.0/255.255.248.0
24.10556 +199.20.8.0/255.255.248.0
24.10557 +199.20.64.0/255.255.192.0
24.10558 +199.20.128.0/255.255.128.0
24.10559 +199.26.158.0/255.255.255.0
24.10560 +199.26.187.0/255.255.253.0
24.10561 +199.26.226.0/255.255.254.0
24.10562 +199.26.240.0/255.255.255.0
24.10563 +199.26.249.0/255.255.255.0
24.10564 +199.32.16.0/255.255.241.0
24.10565 +199.33.0.0/255.255.248.0
24.10566 +199.33.183.0/255.255.255.0
24.10567 +199.33.194.0/255.255.255.0
24.10568 +199.33.196.0/255.255.255.0
24.10569 +199.33.216.0/255.255.255.0
24.10570 +199.35.105.0/255.255.252.0
24.10571 +199.38.8.0/255.255.248.0
24.10572 +199.44.204.0/255.255.255.0
24.10573 +199.47.32.0/255.255.251.0
24.10574 +199.48.32.0/255.255.240.0
24.10575 +199.60.64.0/255.255.224.0
24.10576 +199.60.128.0/255.255.240.0
24.10577 +199.71.1.0/255.255.255.0
24.10578 +199.71.208.0/255.255.255.0
24.10579 +199.72.36.0/255.255.255.0
24.10580 +199.72.78.48/255.255.255.240
24.10581 +199.72.98.136/255.255.255.248
24.10582 +199.72.138.128/255.255.255.224
24.10583 +199.74.0.0/255.255.248.0
24.10584 +199.74.170.0/255.255.255.0
24.10585 +199.75.96.0/255.255.244.0
24.10586 +199.75.162.0/255.255.254.0
24.10587 +199.75.176.0/255.255.240.0
24.10588 +199.75.235.0/255.255.255.0
24.10589 +199.79.0.0/255.255.240.0
24.10590 +199.79.174.0/255.255.255.0
24.10591 +199.79.204.0/255.255.255.0
24.10592 +199.88.185.0/255.255.254.0
24.10593 +199.88.194.0/255.255.253.0
24.10594 +199.88.216.0/255.255.240.0
24.10595 +199.89.188.0/255.255.255.0
24.10596 +199.89.199.0/255.255.255.0
24.10597 +199.89.208.0/255.255.255.0
24.10598 +199.89.233.0/255.255.254.0
24.10599 +199.90.0.0/255.255.0.0
24.10600 +199.94.21.0/255.255.255.0
24.10601 +199.95.157.0/255.255.255.0
24.10602 +199.95.248.0/255.255.255.0
24.10603 +199.95.249.0/255.255.255.0
24.10604 +199.97.0.0/255.252.0.0
24.10605 +199.103.88.0/255.255.255.0
24.10606 +199.105.173.144/255.255.255.240
24.10607 +199.105.240.0/255.255.255.0
24.10608 +199.106.209.0/255.255.255.128
24.10609 +199.106.214.0/255.255.255.0
24.10610 +199.107.65.224/255.255.255.224
24.10611 +199.107.69.64/255.255.255.192
24.10612 +199.107.70.72/255.255.255.248
24.10613 +199.108.0.0/255.255.240.0
24.10614 +199.108.77.64/255.255.255.240
24.10615 +199.108.192.0/255.255.240.0
24.10616 +199.115.8.0/255.255.248.0
24.10617 +199.120.166.0/255.255.254.0
24.10618 +199.120.175.0/255.255.255.0
24.10619 +199.120.182.0/255.255.255.0
24.10620 +199.122.0.0/255.255.253.0
24.10621 +199.122.128.0/255.255.128.0
24.10622 +199.123.4.0/255.255.252.0
24.10623 +199.123.78.0/255.255.255.0
24.10624 +199.123.79.0/255.255.255.0
24.10625 +199.123.80.0/255.255.255.0
24.10626 +199.123.84.0/255.255.255.0
24.10627 +199.124.4.0/255.255.254.0
24.10628 +199.124.8.0/255.255.248.0
24.10629 +199.124.16.0/255.255.247.0
24.10630 +199.125.76.0/255.255.255.0
24.10631 +199.128.0.0/255.224.0.0
24.10632 +199.164.0.0/255.255.248.0
24.10633 +199.164.141.0/255.255.254.0
24.10634 +199.164.176.0/255.255.253.0
24.10635 +199.165.143.0/255.255.255.0
24.10636 +199.165.243.0/255.255.255.0
24.10637 +199.166.200.0/255.255.252.0
24.10638 +199.166.208.0/255.255.255.0
24.10639 +199.169.0.0/255.255.0.0
24.10640 +199.171.55.0/255.255.255.0
24.10641 +199.173.152.0/255.255.255.0
24.10642 +199.173.154.0/255.255.254.0
24.10643 +199.173.224.0/255.255.248.0
24.10644 +199.174.60.152/255.255.255.248
24.10645 +199.174.62.248/255.255.255.248
24.10646 +199.174.70.16/255.255.255.248
24.10647 +199.174.71.168/255.255.255.248
24.10648 +199.174.74.208/255.255.255.248
24.10649 +199.174.74.248/255.255.255.248
24.10650 +199.174.84.168/255.255.255.248
24.10651 +199.174.89.0/255.255.255.248
24.10652 +199.174.129.200/255.255.255.248
24.10653 +199.174.152.80/255.255.255.248
24.10654 +199.174.155.48/255.255.255.248
24.10655 +199.174.155.144/255.255.255.248
24.10656 +199.174.155.224/255.255.255.248
24.10657 +199.174.181.0/255.255.255.248
24.10658 +199.174.188.88/255.255.255.248
24.10659 +199.174.195.192/255.255.255.248
24.10660 +199.181.129.0/255.255.249.0
24.10661 +199.181.219.0/255.255.255.0
24.10662 +199.184.108.0/255.255.255.0
24.10663 +199.188.0.0/255.255.251.0
24.10664 +199.190.128.0/255.255.254.0
24.10665 +199.192.0.0/255.255.244.0
24.10666 +199.196.16.0/255.255.240.0
24.10667 +199.201.190.0/255.255.255.0
24.10668 +199.201.204.0/255.255.255.0
24.10669 +199.201.214.0/255.255.255.0
24.10670 +199.201.219.0/255.255.255.0
24.10671 +199.201.236.0/255.255.254.0
24.10672 +199.202.44.0/255.255.252.0
24.10673 +199.203.176.80/255.255.255.240
24.10674 +199.212.16.0/255.255.250.0
24.10675 +199.212.48.0/255.255.252.0
24.10676 +199.212.148.0/255.255.252.0
24.10677 +199.212.192.0/255.255.231.0
24.10678 +199.221.14.0/255.255.255.0
24.10679 +199.222.58.0/255.255.254.0
24.10680 +199.227.159.64/255.255.255.224
24.10681 +199.227.223.240/255.255.255.248
24.10682 +199.232.0.0/255.255.0.0
24.10683 +199.233.16.0/255.255.246.0
24.10684 +199.233.64.0/255.255.255.0
24.10685 +199.233.109.0/255.255.255.0
24.10686 +199.233.128.0/255.255.255.0
24.10687 +199.233.205.0/255.255.255.0
24.10688 +199.233.217.0/255.255.255.0
24.10689 +199.242.64.0/255.255.192.0
24.10690 +199.242.141.0/255.255.255.0
24.10691 +199.242.182.0/255.255.246.0
24.10692 +199.242.211.0/255.255.255.0
24.10693 +199.242.240.0/255.255.254.0
24.10694 +199.243.105.128/255.255.255.248
24.10695 +199.243.130.104/255.255.255.248
24.10696 +199.243.142.224/255.255.255.248
24.10697 +199.243.201.136/255.255.255.248
24.10698 +199.243.255.88/255.255.255.248
24.10699 +199.244.131.0/255.255.255.0
24.10700 +199.244.155.0/255.255.255.0
24.10701 +199.244.156.0/255.255.255.0
24.10702 +199.244.238.0/255.255.254.0
24.10703 +199.245.181.0/255.255.255.0
24.10704 +199.245.250.0/255.255.255.0
24.10705 +199.246.118.0/255.255.254.0
24.10706 +199.247.16.0/255.255.240.0
24.10707 +199.247.60.0/255.255.252.0
24.10708 +199.247.96.0/255.255.240.0
24.10709 +199.248.147.0/255.255.255.0
24.10710 +199.248.181.0/255.255.255.0
24.10711 +199.248.197.0/255.255.255.0
24.10712 +199.248.238.0/255.255.255.0
24.10713 +199.250.0.0/255.255.248.0
24.10714 +199.250.16.0/255.255.240.0
24.10715 +199.254.173.0/255.255.255.0
24.10716 +199.254.202.0/255.255.255.0
24.10717 +199.254.244.0/255.255.255.0
24.10718 +200.1.116.0/255.255.255.0
24.10719 +200.10.160.0/255.255.255.0
24.10720 +200.26.110.0/255.255.255.128
24.10721 +200.32.64.16/255.255.255.240
24.10722 +200.32.69.32/255.255.255.224
24.10723 +200.32.84.128/255.255.255.192
24.10724 +200.32.86.112/255.255.255.248
24.10725 +200.41.39.56/255.255.255.248
24.10726 +200.41.39.128/255.255.255.248
24.10727 +200.41.39.224/255.255.255.232
24.10728 +200.50.69.0/255.255.255.224
24.10729 +200.58.21.32/255.255.255.224
24.10730 +200.58.21.128/255.255.255.192
24.10731 +200.58.50.160/255.255.255.240
24.10732 +200.254.142.0/255.255.255.191
24.10733 +202.0.98.0/255.255.255.0
24.10734 +202.0.108.0/255.255.254.0
24.10735 +202.0.156.0/255.255.252.0
24.10736 +202.1.195.16/255.255.255.241
24.10737 +202.2.133.0/255.255.255.0
24.10738 +202.2.176.128/255.255.255.224
24.10739 +202.3.162.96/255.255.255.240
24.10740 +202.3.162.112/255.255.255.240
24.10741 +202.5.12.0/255.255.252.0
24.10742 +202.6.8.0/255.255.248.0
24.10743 +202.6.82.0/255.255.255.0
24.10744 +202.6.83.0/255.255.255.0
24.10745 +202.6.91.0/255.255.255.0
24.10746 +202.7.16.48/255.255.255.248
24.10747 +202.7.82.56/255.255.255.248
24.10748 +202.7.82.112/255.255.255.248
24.10749 +202.7.90.48/255.255.255.248
24.10750 +202.7.90.184/255.255.255.248
24.10751 +202.8.32.0/255.255.248.0
24.10752 +202.9.0.0/255.255.240.0
24.10753 +202.10.3.0/255.255.255.224
24.10754 +202.12.69.0/255.255.255.0
24.10755 +202.12.120.0/255.255.255.0
24.10756 +202.12.121.0/255.255.255.0
24.10757 +202.14.0.0/255.255.252.0
24.10758 +202.14.4.0/255.255.252.0
24.10759 +202.14.130.0/255.255.254.0
24.10760 +202.14.133.0/255.255.255.0
24.10761 +202.14.138.0/255.255.254.0
24.10762 +202.14.186.0/255.255.255.0
24.10763 +202.15.48.0/255.255.240.0
24.10764 +202.15.254.0/255.255.255.0
24.10765 +202.17.192.0/255.255.248.0
24.10766 +202.21.149.0/255.255.255.0
24.10767 +202.24.66.0/255.255.250.0
24.10768 +202.28.16.0/255.255.255.0
24.10769 +202.28.84.0/255.255.252.0
24.10770 +202.32.0.128/255.255.255.128
24.10771 +202.32.5.144/255.255.255.248
24.10772 +202.32.14.96/255.255.255.240
24.10773 +202.32.45.144/255.255.255.248
24.10774 +202.32.93.128/255.255.255.240
24.10775 +202.32.93.224/255.255.255.240
24.10776 +202.32.103.112/255.255.255.240
24.10777 +202.32.143.32/255.255.255.240
24.10778 +202.32.161.0/255.255.255.0
24.10779 +202.32.194.96/255.255.255.240
24.10780 +202.32.215.112/255.255.255.240
24.10781 +202.32.242.0/255.255.255.0
24.10782 +202.32.245.160/255.255.255.248
24.10783 +202.32.249.208/255.255.255.248
24.10784 +202.33.8.64/255.255.255.248
24.10785 +202.33.16.64/255.255.255.192
24.10786 +202.33.115.64/255.255.255.224
24.10787 +202.33.132.240/255.255.255.240
24.10788 +202.33.141.176/255.255.255.240
24.10789 +202.33.153.0/255.255.255.0
24.10790 +202.33.177.160/255.255.255.224
24.10791 +202.36.47.0/255.255.255.0
24.10792 +202.37.22.0/255.255.255.0
24.10793 +202.37.100.0/255.255.255.0
24.10794 +202.37.252.0/255.255.255.0
24.10795 +202.39.48.0/255.255.255.0
24.10796 +202.39.246.0/255.255.255.0
24.10797 +202.40.7.0/255.255.255.0
24.10798 +202.40.155.0/255.255.255.0
24.10799 +202.42.34.16/255.255.255.240
24.10800 +202.42.34.32/255.255.255.240
24.10801 +202.42.39.80/255.255.255.248
24.10802 +202.42.65.64/255.255.255.192
24.10803 +202.42.133.72/255.255.255.248
24.10804 +202.42.154.0/255.255.255.0
24.10805 +202.42.179.8/255.255.255.248
24.10806 +202.42.179.24/255.255.255.248
24.10807 +202.42.179.32/255.255.255.248
24.10808 +202.42.179.120/255.255.255.248
24.10809 +202.42.180.48/255.255.255.248
24.10810 +202.42.184.56/255.255.255.248
24.10811 +202.42.185.192/255.255.255.248
24.10812 +202.42.188.56/255.255.255.248
24.10813 +202.42.189.32/255.255.255.248
24.10814 +202.42.189.64/255.255.255.248
24.10815 +202.42.189.136/255.255.255.248
24.10816 +202.42.189.144/255.255.255.248
24.10817 +202.42.189.152/255.255.255.248
24.10818 +202.42.228.96/255.255.255.240
24.10819 +202.42.234.160/255.255.255.222
24.10820 +202.43.71.224/255.255.255.248
24.10821 +202.43.116.64/255.255.255.248
24.10822 +202.44.16.0/255.255.240.0
24.10823 +202.44.72.0/255.255.254.0
24.10824 +202.44.132.0/255.255.254.0
24.10825 +202.44.164.176/255.255.255.240
24.10826 +202.45.30.0/255.255.254.0
24.10827 +202.46.10.0/255.255.255.0
24.10828 +202.47.125.0/255.255.255.0
24.10829 +202.47.140.0/255.255.254.0
24.10830 +202.51.150.144/255.255.255.248
24.10831 +202.52.99.0/255.255.255.224
24.10832 +202.52.103.0/255.255.255.192
24.10833 +202.53.52.0/255.255.255.0
24.10834 +202.53.59.8/255.255.255.248
24.10835 +202.54.26.0/255.255.255.224
24.10836 +202.54.38.192/255.255.255.240
24.10837 +202.54.83.128/255.255.255.192
24.10838 +202.54.101.112/255.255.255.240
24.10839 +202.56.140.56/255.255.255.248
24.10840 +202.56.245.80/255.255.255.240
24.10841 +202.56.247.160/255.255.255.248
24.10842 +202.57.75.184/255.255.255.248
24.10843 +202.57.76.56/255.255.255.248
24.10844 +202.57.78.0/255.255.255.0
24.10845 +202.57.85.248/255.255.255.248
24.10846 +202.57.92.64/255.255.255.248
24.10847 +202.58.98.64/255.255.255.192
24.10848 +202.62.112.0/255.255.252.0
24.10849 +202.64.48.0/255.255.255.128
24.10850 +202.64.51.192/255.255.255.240
24.10851 +202.64.56.16/255.255.255.248
24.10852 +202.64.64.128/255.255.255.224
24.10853 +202.64.130.200/255.255.255.248
24.10854 +202.64.137.24/255.255.255.248
24.10855 +202.64.155.32/255.255.255.240
24.10856 +202.64.157.224/255.255.255.224
24.10857 +202.64.161.192/255.255.255.208
24.10858 +202.64.170.192/255.255.255.192
24.10859 +202.64.171.0/255.255.255.0
24.10860 +202.64.182.128/255.255.255.240
24.10861 +202.64.210.104/255.255.255.248
24.10862 +202.65.192.128/255.255.255.128
24.10863 +202.67.247.160/255.255.255.224
24.10864 +202.67.249.64/255.255.255.192
24.10865 +202.69.163.0/255.255.255.0
24.10866 +202.73.170.128/255.255.255.240
24.10867 +202.73.176.8/255.255.255.248
24.10868 +202.74.99.64/255.255.255.240
24.10869 +202.76.49.0/255.255.255.0
24.10870 +202.78.71.0/255.255.255.240
24.10871 +202.79.104.16/255.255.255.240
24.10872 +202.79.205.0/255.255.255.192
24.10873 +202.79.223.192/255.255.255.192
24.10874 +202.82.21.72/255.255.255.248
24.10875 +202.82.124.32/255.255.255.248
24.10876 +202.82.141.0/255.255.255.0
24.10877 +202.82.146.176/255.255.255.248
24.10878 +202.83.94.144/255.255.255.248
24.10879 +202.83.201.128/255.255.255.192
24.10880 +202.83.202.32/255.255.255.240
24.10881 +202.85.23.128/255.255.255.128
24.10882 +202.85.26.0/255.255.255.0
24.10883 +202.85.40.224/255.255.255.224
24.10884 +202.85.42.192/255.255.255.240
24.10885 +202.85.78.0/255.255.255.0
24.10886 +202.85.104.0/255.255.255.224
24.10887 +202.85.109.0/255.255.255.0
24.10888 +202.85.121.64/255.255.255.224
24.10889 +202.85.255.128/255.255.255.128
24.10890 +202.88.118.192/255.255.255.192
24.10891 +202.88.125.64/255.255.255.192
24.10892 +202.89.96.0/255.255.224.0
24.10893 +202.90.128.0/255.255.224.0
24.10894 +202.92.68.12/255.255.255.248
24.10895 +202.92.73.168/255.255.255.248
24.10896 +202.92.120.248/255.255.255.248
24.10897 +202.94.128.0/255.255.224.0
24.10898 +202.95.84.128/255.255.255.240
24.10899 +202.95.88.96/255.255.255.224
24.10900 +202.95.127.48/255.255.255.248
24.10901 +202.95.159.208/255.255.255.240
24.10902 +202.96.19.48/255.255.255.240
24.10903 +202.96.46.0/255.255.255.0
24.10904 +202.96.65.64/255.255.255.248
24.10905 +202.96.66.224/255.255.255.248
24.10906 +202.96.104.144/255.255.255.240
24.10907 +202.96.123.128/255.255.255.248
24.10908 +202.96.150.128/255.255.255.240
24.10909 +202.96.167.0/255.255.255.240
24.10910 +202.96.211.16/255.255.255.240
24.10911 +202.96.224.224/255.255.255.240
24.10912 +202.96.225.208/255.255.255.240
24.10913 +202.96.226.40/255.255.255.248
24.10914 +202.96.227.32/255.255.255.240
24.10915 +202.96.233.64/255.255.255.240
24.10916 +202.96.240.0/255.255.255.224
24.10917 +202.97.163.220/255.255.255.248
24.10918 +202.97.168.144/255.255.255.240
24.10919 +202.97.169.64/255.255.255.240
24.10920 +202.97.169.192/255.255.255.240
24.10921 +202.97.170.96/255.255.255.248
24.10922 +202.97.170.224/255.255.255.248
24.10923 +202.97.172.144/255.255.255.240
24.10924 +202.97.173.96/255.255.255.240
24.10925 +202.97.173.112/255.255.255.240
24.10926 +202.97.195.208/255.255.255.240
24.10927 +202.97.227.224/255.255.255.224
24.10928 +202.97.236.184/255.255.255.248
24.10929 +202.98.12.64/255.255.255.248
24.10930 +202.98.47.48/255.255.255.248
24.10931 +202.98.125.32/255.255.255.240
24.10932 +202.98.150.192/255.255.255.192
24.10933 +202.98.185.64/255.255.255.240
24.10934 +202.98.185.192/255.255.255.192
24.10935 +202.98.187.112/255.255.255.240
24.10936 +202.99.4.192/255.255.255.192
24.10937 +202.99.27.0/255.255.255.192
24.10938 +202.99.30.96/255.255.255.240
24.10939 +202.99.60.224/255.255.255.240
24.10940 +202.99.99.224/255.255.255.240
24.10941 +202.99.190.64/255.255.255.224
24.10942 +202.99.190.128/255.255.255.192
24.10943 +202.99.228.176/255.255.255.240
24.10944 +202.100.14.128/255.255.255.240
24.10945 +202.100.202.112/255.255.255.240
24.10946 +202.100.230.112/255.255.255.240
24.10947 +202.101.8.192/255.255.255.192
24.10948 +202.101.9.144/255.255.255.240
24.10949 +202.101.97.108/255.255.255.220
24.10950 +202.101.111.208/255.255.255.240
24.10951 +202.101.113.240/255.255.255.240
24.10952 +202.101.115.16/255.255.255.248
24.10953 +202.101.126.48/255.255.255.248
24.10954 +202.101.141.32/255.255.255.192
24.10955 +202.101.142.48/255.255.255.248
24.10956 +202.101.149.136/255.255.255.248
24.10957 +202.101.165.192/255.255.255.192
24.10958 +202.102.157.112/255.255.255.248
24.10959 +202.102.187.160/255.255.255.240
24.10960 +202.102.195.176/255.255.255.240
24.10961 +202.102.238.80/255.255.255.240
24.10962 +202.102.239.216/255.255.255.248
24.10963 +202.102.242.240/255.255.255.248
24.10964 +202.103.31.0/255.255.255.224
24.10965 +202.103.38.224/255.255.255.240
24.10966 +202.103.49.32/255.255.255.240
24.10967 +202.103.49.160/255.255.255.240
24.10968 +202.103.179.32/255.255.255.240
24.10969 +202.103.208.200/255.255.255.248
24.10970 +202.104.81.32/255.255.255.224
24.10971 +202.104.199.192/255.255.255.248
24.10972 +202.104.254.0/255.255.255.248
24.10973 +202.104.254.96/255.255.255.240
24.10974 +202.105.10.80/255.255.255.240
24.10975 +202.105.16.136/255.255.255.248
24.10976 +202.105.191.176/255.255.255.240
24.10977 +202.105.207.32/255.255.255.224
24.10978 +202.106.142.0/255.255.255.0
24.10979 +202.107.74.0/255.255.255.248
24.10980 +202.107.78.168/255.255.255.248
24.10981 +202.107.222.40/255.255.255.248
24.10982 +202.107.229.8/255.255.255.248
24.10983 +202.108.83.64/255.255.255.224
24.10984 +202.108.87.0/255.255.255.192
24.10985 +202.108.93.96/255.255.255.240
24.10986 +202.108.225.32/255.255.255.224
24.10987 +202.109.76.192/255.255.255.224
24.10988 +202.109.101.224/255.255.255.224
24.10989 +202.109.103.64/255.255.255.240
24.10990 +202.109.131.128/255.255.255.128
24.10991 +202.109.213.32/255.255.255.224
24.10992 +202.109.217.0/255.255.255.184
24.10993 +202.109.229.200/255.255.255.248
24.10994 +202.109.230.24/255.255.254.248
24.10995 +202.110.49.88/255.255.255.248
24.10996 +202.110.54.0/255.255.255.248
24.10997 +202.110.54.136/255.255.255.248
24.10998 +202.110.234.192/255.255.255.248
24.10999 +202.111.152.216/255.255.255.248
24.11000 +202.111.155.64/255.255.255.240
24.11001 +202.111.165.112/255.255.255.240
24.11002 +202.111.169.224/255.255.255.224
24.11003 +202.111.177.64/255.255.255.224
24.11004 +202.111.184.96/255.255.255.224
24.11005 +202.111.186.128/255.255.255.224
24.11006 +202.111.188.192/255.255.255.248
24.11007 +202.123.30.64/255.255.255.248
24.11008 +202.124.133.0/255.255.255.128
24.11009 +202.125.0.0/255.255.240.0
24.11010 +202.126.137.112/255.255.255.240
24.11011 +202.126.138.0/255.255.255.224
24.11012 +202.126.138.128/255.255.255.224
24.11013 +202.129.255.64/255.255.255.192
24.11014 +202.130.190.96/255.255.255.240
24.11015 +202.130.191.80/255.255.255.248
24.11016 +202.134.99.240/255.255.255.248
24.11017 +202.134.103.176/255.255.255.240
24.11018 +202.134.108.160/255.255.255.240
24.11019 +202.134.115.64/255.255.255.248
24.11020 +202.134.122.128/255.255.255.192
24.11021 +202.135.18.160/255.255.255.240
24.11022 +202.135.136.48/255.255.255.240
24.11023 +202.135.136.224/255.255.255.224
24.11024 +202.135.169.0/255.255.255.128
24.11025 +202.139.187.0/255.255.255.224
24.11026 +202.139.187.128/255.255.255.192
24.11027 +202.139.224.0/255.255.247.185
24.11028 +202.139.232.72/255.255.232.72
24.11029 +202.140.134.8/255.255.255.248
24.11030 +202.140.134.208/255.255.255.248
24.11031 +202.140.143.80/255.255.255.248
24.11032 +202.140.143.240/255.255.255.248
24.11033 +202.142.64.0/255.255.192.0
24.11034 +202.144.43.0/255.255.255.248
24.11035 +202.144.43.192/255.255.255.248
24.11036 +202.145.114.64/255.255.255.224
24.11037 +202.145.118.0/255.255.255.128
24.11038 +202.147.20.176/255.255.255.240
24.11039 +202.147.27.80/255.255.255.240
24.11040 +202.147.27.96/255.255.255.240
24.11041 +202.147.37.64/255.255.255.240
24.11042 +202.147.43.80/255.255.255.240
24.11043 +202.154.31.160/255.255.255.224
24.11044 +202.155.33.144/255.255.255.240
24.11045 +202.155.131.64/255.255.255.240
24.11046 +202.158.21.240/255.255.255.240
24.11047 +202.158.36.16/255.255.255.240
24.11048 +202.158.88.48/255.255.255.240
24.11049 +202.159.192.0/255.255.192.0
24.11050 +202.160.83.64/255.255.255.192
24.11051 +202.160.225.56/255.255.255.248
24.11052 +202.160.225.144/255.255.255.248
24.11053 +202.160.225.224/255.255.255.248
24.11054 +202.161.117.128/255.255.255.248
24.11055 +202.163.175.32/255.255.255.240
24.11056 +202.163.175.48/255.255.255.240
24.11057 +202.163.175.128/255.255.255.240
24.11058 +202.163.175.192/255.255.255.192
24.11059 +202.163.201.248/255.255.255.248
24.11060 +202.163.203.80/255.255.255.248
24.11061 +202.163.223.32/255.255.255.248
24.11062 +202.163.228.248/255.255.255.248
24.11063 +202.163.248.72/255.255.255.248
24.11064 +202.165.140.16/255.255.255.248
24.11065 +202.165.141.80/255.255.255.240
24.11066 +202.166.227.64/255.255.255.224
24.11067 +202.167.74.128/255.255.255.240
24.11068 +202.167.111.56/255.255.255.248
24.11069 +202.168.29.136/255.255.255.248
24.11070 +202.171.13.32/255.255.255.240
24.11071 +202.172.255.0/255.255.255.0
24.11072 +202.175.123.56/255.255.255.248
24.11073 +202.180.175.152/255.255.255.248
24.11074 +202.181.41.64/255.255.255.240
24.11075 +202.181.41.136/255.255.255.248
24.11076 +202.182.224.0/255.255.254.0
24.11077 +202.184.249.128/255.255.255.224
24.11078 +202.186.11.0/255.255.255.248
24.11079 +202.186.14.0/255.255.255.224
24.11080 +202.186.42.0/255.255.255.224
24.11081 +202.186.149.96/255.255.255.240
24.11082 +202.186.177.8/255.255.255.248
24.11083 +202.187.27.128/255.255.255.192
24.11084 +202.188.20.96/255.255.255.240
24.11085 +202.188.137.112/255.255.255.240
24.11086 +202.189.8.0/255.255.255.224
24.11087 +202.190.68.128/255.255.255.224
24.11088 +202.192.176.0/255.255.252.0
24.11089 +202.209.107.0/255.255.255.0
24.11090 +202.211.200.80/255.255.255.248
24.11091 +202.211.204.128/255.255.255.192
24.11092 +202.211.205.0/255.255.255.128
24.11093 +202.211.207.160/255.255.255.224
24.11094 +202.211.208.8/255.255.255.248
24.11095 +202.212.240.208/255.255.255.240
24.11096 +202.213.192.0/255.255.192.0
24.11097 +202.214.0.0/255.255.255.192
24.11098 +202.214.0.64/255.255.255.192
24.11099 +202.214.107.16/255.255.255.248
24.11100 +202.214.241.240/255.255.255.240
24.11101 +202.214.254.16/255.255.255.248
24.11102 +202.216.31.0/255.255.255.240
24.11103 +202.216.242.96/255.255.255.240
24.11104 +202.218.6.128/255.255.255.128
24.11105 +202.219.90.96/255.255.255.224
24.11106 +202.221.30.224/255.255.255.240
24.11107 +202.221.139.48/255.255.255.240
24.11108 +202.221.178.240/255.255.255.248
24.11109 +202.221.233.112/255.255.255.240
24.11110 +202.221.244.0/255.255.255.128
24.11111 +202.221.244.160/255.255.255.224
24.11112 +202.222.142.176/255.255.255.240
24.11113 +202.222.144.0/255.255.255.0
24.11114 +202.224.97.64/255.255.255.248
24.11115 +202.224.196.216/255.255.255.248
24.11116 +202.224.202.0/255.255.255.248
24.11117 +202.224.209.144/255.255.255.248
24.11118 +202.224.224.240/255.255.255.248
24.11119 +202.224.235.216/255.255.255.248
24.11120 +202.226.131.72/255.255.255.248
24.11121 +202.226.224.96/255.255.255.248
24.11122 +202.226.225.128/255.255.255.248
24.11123 +202.229.47.144/255.255.255.240
24.11124 +202.229.47.192/255.255.255.240
24.11125 +202.232.97.128/255.255.255.248
24.11126 +202.232.97.168/255.255.255.248
24.11127 +202.232.131.16/255.255.255.240
24.11128 +202.232.164.32/255.255.255.248
24.11129 +202.232.232.0/255.255.255.0
24.11130 +202.238.76.0/255.255.254.0
24.11131 +202.247.3.0/255.255.255.0
24.11132 +203.0.88.0/255.255.255.0
24.11133 +203.0.100.0/255.255.255.0
24.11134 +203.0.101.0/255.255.255.0
24.11135 +203.0.142.0/255.255.255.0
24.11136 +203.1.72.0/255.255.252.0
24.11137 +203.2.136.0/255.255.252.0
24.11138 +203.2.149.0/255.255.255.0
24.11139 +203.2.181.0/255.255.255.0
24.11140 +203.2.208.0/255.255.255.0
24.11141 +203.2.236.0/255.255.255.0
24.11142 +203.3.137.0/255.255.255.0
24.11143 +203.3.176.0/255.255.240.0
24.11144 +203.3.192.0/255.255.192.0
24.11145 +203.4.229.0/255.255.255.0
24.11146 +203.5.10.0/255.255.255.0
24.11147 +203.5.23.0/255.255.255.0
24.11148 +203.5.104.0/255.255.247.0
24.11149 +203.5.114.0/255.255.255.0
24.11150 +203.5.121.0/255.255.254.0
24.11151 +203.6.135.0/255.255.255.0
24.11152 +203.6.160.0/255.255.224.0
24.11153 +203.6.254.0/255.255.254.0
24.11154 +203.7.128.0/255.255.255.0
24.11155 +203.7.153.0/255.255.255.0
24.11156 +203.7.170.0/255.255.255.0
24.11157 +203.8.174.0/255.255.255.0
24.11158 +203.8.196.0/255.255.255.0
24.11159 +203.9.144.0/255.255.252.0
24.11160 +203.9.158.0/255.255.255.0
24.11161 +203.9.192.0/255.255.224.0
24.11162 +203.10.16.0/255.255.248.0
24.11163 +203.10.32.0/255.255.255.0
24.11164 +203.10.112.0/255.255.247.0
24.11165 +203.11.118.0/255.255.254.0
24.11166 +203.11.142.0/255.255.254.0
24.11167 +203.12.20.0/255.255.254.0
24.11168 +203.12.40.0/255.255.254.0
24.11169 +203.12.192.0/255.255.240.0
24.11170 +203.13.0.0/255.255.240.0
24.11171 +203.13.26.0/255.255.254.0
24.11172 +203.14.35.0/255.255.253.0
24.11173 +203.14.59.0/255.255.255.0
24.11174 +203.14.184.0/255.255.248.0
24.11175 +203.15.20.0/255.255.255.0
24.11176 +203.15.71.0/255.255.251.0
24.11177 +203.15.78.0/255.255.250.0
24.11178 +203.15.86.0/255.255.255.0
24.11179 +203.16.196.0/255.255.255.0
24.11180 +203.16.216.0/255.255.248.0
24.11181 +203.17.11.0/255.255.255.0
24.11182 +203.17.67.0/255.255.255.0
24.11183 +203.17.120.0/255.255.255.0
24.11184 +203.17.255.0/255.255.255.0
24.11185 +203.18.12.0/255.255.254.0
24.11186 +203.18.55.0/255.255.255.0
24.11187 +203.18.60.0/255.255.254.0
24.11188 +203.18.110.0/255.255.254.0
24.11189 +203.18.184.0/255.255.254.0
24.11190 +203.19.26.0/255.255.255.0
24.11191 +203.19.57.0/255.255.255.0
24.11192 +203.19.133.0/255.255.255.0
24.11193 +203.19.142.0/255.255.254.0
24.11194 +203.20.123.0/255.255.255.0
24.11195 +203.21.87.0/255.255.255.0
24.11196 +203.21.224.0/255.255.206.0
24.11197 +203.22.194.0/255.255.255.0
24.11198 +203.22.196.0/255.255.255.0
24.11199 +203.22.207.0/255.255.255.0
24.11200 +203.23.4.0/255.255.255.0
24.11201 +203.23.18.0/255.255.255.0
24.11202 +203.23.19.0/255.255.255.0
24.11203 +203.23.85.0/255.255.255.0
24.11204 +203.23.174.0/255.255.255.0
24.11205 +203.23.224.0/255.255.255.0
24.11206 +203.25.0.0/255.255.240.0
24.11207 +203.25.92.0/255.255.252.0
24.11208 +203.25.230.0/255.255.254.0
24.11209 +203.26.119.0/255.255.255.0
24.11210 +203.26.120.0/255.255.252.0
24.11211 +203.26.132.0/255.255.254.0
24.11212 +203.28.36.0/255.255.255.0
24.11213 +203.28.198.0/255.255.255.0
24.11214 +203.28.199.0/255.255.255.0
24.11215 +203.28.237.0/255.255.255.0
24.11216 +203.28.239.0/255.255.255.0
24.11217 +203.29.89.0/255.255.255.0
24.11218 +203.30.156.0/255.255.255.0
24.11219 +203.30.186.0/255.255.255.0
24.11220 +203.31.219.0/255.255.255.0
24.11221 +203.32.218.0/255.255.255.0
24.11222 +203.33.39.0/255.255.255.0
24.11223 +203.34.4.0/255.255.255.0
24.11224 +203.34.85.0/255.255.255.0
24.11225 +203.35.155.240/255.255.255.248
24.11226 +203.35.255.248/255.255.255.248
24.11227 +203.41.22.160/255.255.255.224
24.11228 +203.41.127.160/255.255.255.224
24.11229 +203.41.195.128/255.255.255.128
24.11230 +203.43.68.80/255.255.255.240
24.11231 +203.55.139.0/255.255.255.0
24.11232 +203.55.182.0/255.255.254.0
24.11233 +203.55.239.0/255.255.255.0
24.11234 +203.56.6.0/255.255.255.0
24.11235 +203.56.118.0/255.255.254.0
24.11236 +203.57.202.0/255.255.255.0
24.11237 +203.61.24.0/255.255.255.0
24.11238 +203.65.169.0/255.255.255.0
24.11239 +203.76.6.0/255.255.255.224
24.11240 +203.77.15.128/255.255.255.192
24.11241 +203.77.51.128/255.255.255.192
24.11242 +203.80.94.240/255.255.255.240
24.11243 +203.80.118.32/255.255.255.248
24.11244 +203.80.247.8/255.255.255.248
24.11245 +203.85.188.0/255.255.255.0
24.11246 +203.86.132.144/255.255.255.248
24.11247 +203.87.138.96/255.255.255.248
24.11248 +203.87.150.160/255.255.255.248
24.11249 +203.87.152.136/255.255.255.248
24.11250 +203.87.154.152/255.255.255.248
24.11251 +203.87.155.24/255.255.255.248
24.11252 +203.89.192.224/255.255.255.240
24.11253 +203.89.193.192/255.255.255.224
24.11254 +203.89.230.80/255.255.255.240
24.11255 +203.89.255.96/255.255.255.224
24.11256 +203.89.255.240/255.255.255.240
24.11257 +203.90.88.176/255.255.255.248
24.11258 +203.90.110.64/255.255.255.248
24.11259 +203.92.233.0/255.255.255.0
24.11260 +203.93.88.128/255.255.255.128
24.11261 +203.93.106.0/255.255.255.0
24.11262 +203.94.67.168/255.255.255.248
24.11263 +203.94.73.80/255.255.255.248
24.11264 +203.94.78.128/255.255.255.248
24.11265 +203.94.130.200/255.255.255.248
24.11266 +203.94.172.64/255.255.255.192
24.11267 +203.97.62.160/255.255.255.240
24.11268 +203.97.237.136/255.255.255.248
24.11269 +203.99.128.0/255.255.192.0
24.11270 +203.101.119.224/255.255.255.224
24.11271 +203.101.159.192/255.255.255.248
24.11272 +203.102.38.112/255.255.255.248
24.11273 +203.102.38.192/255.255.255.224
24.11274 +203.102.77.128/255.255.255.248
24.11275 +203.102.85.120/255.255.255.248
24.11276 +203.102.85.248/255.255.255.248
24.11277 +203.102.102.64/255.255.255.192
24.11278 +203.102.138.104/255.255.255.248
24.11279 +203.102.144.16/255.255.255.248
24.11280 +203.102.146.96/255.255.255.224
24.11281 +203.102.153.192/255.255.255.224
24.11282 +203.103.46.32/255.255.255.248
24.11283 +203.103.92.136/255.255.255.248
24.11284 +203.103.139.56/255.255.255.248
24.11285 +203.103.145.160/255.255.255.224
24.11286 +203.103.174.192/255.255.255.248
24.11287 +203.103.180.32/255.255.255.224
24.11288 +203.103.183.0/255.255.255.0
24.11289 +203.103.231.128/255.255.255.128
24.11290 +203.103.233.0/255.255.255.0
24.11291 +203.103.234.32/255.255.255.224
24.11292 +203.103.234.248/255.255.255.248
24.11293 +203.103.235.0/255.255.255.0
24.11294 +203.103.237.192/255.255.255.224
24.11295 +203.106.232.208/255.255.255.240
24.11296 +203.107.191.32/255.255.255.224
24.11297 +203.107.247.48/255.255.255.248
24.11298 +203.108.88.232/255.255.255.248
24.11299 +203.108.131.96/255.255.255.239
24.11300 +203.108.134.8/255.255.255.248
24.11301 +203.108.178.32/255.255.255.248
24.11302 +203.108.178.56/255.255.255.248
24.11303 +203.108.184.224/255.255.255.224
24.11304 +203.108.211.200/255.255.255.248
24.11305 +203.108.241.176/255.255.255.240
24.11306 +203.108.242.88/255.255.255.248
24.11307 +203.108.243.16/255.255.255.247
24.11308 +203.108.243.224/255.255.255.240
24.11309 +203.108.244.144/255.255.255.240
24.11310 +203.108.246.160/255.255.255.223
24.11311 +203.108.246.224/255.255.255.224
24.11312 +203.108.249.224/255.255.255.240
24.11313 +203.110.129.64/255.255.255.225
24.11314 +203.110.129.136/255.255.255.249
24.11315 +203.110.141.96/255.255.255.249
24.11316 +203.110.144.32/255.255.255.249
24.11317 +203.112.23.232/255.255.255.248
24.11318 +203.113.130.128/255.255.255.248
24.11319 +203.115.23.240/255.255.255.248
24.11320 +203.115.24.224/255.255.255.248
24.11321 +203.115.195.240/255.255.255.248
24.11322 +203.116.11.144/255.255.255.248
24.11323 +203.116.46.112/255.255.255.240
24.11324 +203.116.47.0/255.255.255.0
24.11325 +203.116.75.0/255.255.255.240
24.11326 +203.117.14.64/255.255.255.192
24.11327 +203.117.18.64/255.255.255.192
24.11328 +203.117.101.0/255.255.255.240
24.11329 +203.117.129.0/255.255.255.0
24.11330 +203.117.135.0/255.255.255.0
24.11331 +203.120.5.0/255.255.255.224
24.11332 +203.120.148.0/255.255.255.0
24.11333 +203.120.218.16/255.255.255.240
24.11334 +203.122.11.128/255.255.255.192
24.11335 +203.122.14.0/255.255.255.240
24.11336 +203.124.157.136/255.255.255.248
24.11337 +203.125.94.64/255.255.255.224
24.11338 +203.125.104.160/255.255.255.224
24.11339 +203.125.111.144/255.255.255.240
24.11340 +203.125.121.224/255.255.255.224
24.11341 +203.125.137.168/255.255.255.248
24.11342 +203.125.140.128/255.255.255.248
24.11343 +203.125.153.128/255.255.255.248
24.11344 +203.125.153.152/255.255.255.248
24.11345 +203.125.176.32/255.255.255.224
24.11346 +203.125.180.160/255.255.255.224
24.11347 +203.125.200.0/255.255.255.192
24.11348 +203.125.202.240/255.255.255.240
24.11349 +203.125.209.208/255.255.255.248
24.11350 +203.125.234.208/255.255.255.248
24.11351 +203.125.249.24/255.255.255.248
24.11352 +203.126.17.0/255.255.255.128
24.11353 +203.126.22.64/255.255.255.224
24.11354 +203.126.33.208/255.255.255.240
24.11355 +203.126.34.224/255.255.255.224
24.11356 +203.126.49.192/255.255.255.224
24.11357 +203.126.50.64/255.255.255.224
24.11358 +203.126.58.0/255.255.255.240
24.11359 +203.126.79.64/255.255.255.224
24.11360 +203.126.87.224/255.255.255.240
24.11361 +203.126.96.96/255.255.255.224
24.11362 +203.126.100.32/255.255.255.224
24.11363 +203.126.107.160/255.255.255.224
24.11364 +203.126.114.192/255.255.255.240
24.11365 +203.126.118.128/255.255.255.240
24.11366 +203.126.165.48/255.255.255.240
24.11367 +203.126.176.40/255.255.255.248
24.11368 +203.126.176.216/255.255.255.248
24.11369 +203.126.183.0/255.255.255.224
24.11370 +203.126.213.1/255.255.255.1
24.11371 +203.126.216.0/255.255.255.240
24.11372 +203.126.218.128/255.255.255.224
24.11373 +203.126.226.0/255.255.255.240
24.11374 +203.126.239.72/255.255.255.248
24.11375 +203.127.5.224/255.255.255.224
24.11376 +203.127.7.48/255.255.255.240
24.11377 +203.127.9.64/255.255.255.240
24.11378 +203.127.9.80/255.255.255.240
24.11379 +203.127.119.176/255.255.255.240
24.11380 +203.127.120.0/255.255.255.224
24.11381 +203.127.153.0/255.255.255.192
24.11382 +203.127.229.128/255.255.255.224
24.11383 +203.130.142.0/255.255.255.0
24.11384 +203.131.69.160/255.255.255.248
24.11385 +203.131.80.16/255.255.255.248
24.11386 +203.131.84.8/255.255.255.248
24.11387 +203.131.84.176/255.255.255.248
24.11388 +203.131.97.40/255.255.255.248
24.11389 +203.131.98.160/255.255.255.248
24.11390 +203.131.100.72/255.255.255.248
24.11391 +203.131.104.48/255.255.255.248
24.11392 +203.131.113.200/255.255.255.248
24.11393 +203.131.125.192/255.255.255.248
24.11394 +203.131.127.160/255.255.255.248
24.11395 +203.131.127.216/255.255.255.248
24.11396 +203.134.128.112/255.255.255.248
24.11397 +203.143.237.200/255.255.255.248
24.11398 +203.144.37.192/255.255.255.248
24.11399 +203.144.136.0/255.255.255.0
24.11400 +203.144.151.96/255.255.255.248
24.11401 +203.144.227.136/255.255.255.248
24.11402 +203.144.227.144/255.255.255.240
24.11403 +203.144.233.0/255.255.255.192
24.11404 +203.144.236.224/255.255.255.240
24.11405 +203.146.11.96/255.255.255.224
24.11406 +203.146.50.128/255.255.255.192
24.11407 +203.146.78.64/255.255.255.192
24.11408 +203.146.80.64/255.255.255.192
24.11409 +203.146.80.216/255.255.255.248
24.11410 +203.146.100.224/255.255.255.240
24.11411 +203.146.112.48/255.255.255.240
24.11412 +203.146.129.0/255.255.255.0
24.11413 +203.146.146.128/255.255.255.240
24.11414 +203.146.186.16/255.255.255.240
24.11415 +203.146.217.96/255.255.255.240
24.11416 +203.147.5.0/255.255.255.192
24.11417 +203.147.38.8/255.255.255.248
24.11418 +203.147.43.64/255.255.255.192
24.11419 +203.147.51.0/255.255.255.192
24.11420 +203.147.144.0/255.255.240.0
24.11421 +203.147.160.0/255.255.224.0
24.11422 +203.147.224.0/255.255.224.0
24.11423 +203.148.253.32/255.255.255.224
24.11424 +203.149.13.168/255.255.255.248
24.11425 +203.149.248.128/255.255.255.192
24.11426 +203.154.23.0/255.255.255.0
24.11427 +203.154.25.0/255.255.255.0
24.11428 +203.154.26.0/255.255.255.0
24.11429 +203.154.74.128/255.255.255.128
24.11430 +203.154.151.128/255.255.255.240
24.11431 +203.155.5.192/255.255.255.192
24.11432 +203.155.6.32/255.255.255.224
24.11433 +203.155.137.224/255.255.255.224
24.11434 +203.155.198.96/255.255.255.224
24.11435 +203.162.41.40/255.255.255.248
24.11436 +203.162.48.128/255.255.255.248
24.11437 +203.162.91.48/255.255.255.240
24.11438 +203.162.105.168/255.255.255.248
24.11439 +203.162.203.80/255.255.255.248
24.11440 +203.162.247.192/255.255.255.248
24.11441 +203.163.61.16/255.255.255.240
24.11442 +203.163.68.160/255.255.255.224
24.11443 +203.163.96.208/255.255.255.240
24.11444 +203.163.117.56/255.255.255.240
24.11445 +203.167.80.128/255.255.255.248
24.11446 +203.167.116.192/255.255.255.192
24.11447 +203.167.211.192/255.255.255.224
24.11448 +203.167.247.144/255.255.255.240
24.11449 +203.169.122.24/255.255.255.248
24.11450 +203.169.142.224/255.255.255.240
24.11451 +203.171.128.176/255.255.255.240
24.11452 +203.171.146.0/255.255.254.0
24.11453 +203.172.7.128/255.255.255.224
24.11454 +203.172.24.112/255.255.255.240
24.11455 +203.176.22.64/255.255.255.224
24.11456 +203.176.128.0/255.255.192.0
24.11457 +203.176.192.0/255.255.192.0
24.11458 +203.177.33.200/255.255.255.248
24.11459 +203.177.41.88/255.255.255.248
24.11460 +203.177.64.176/255.255.255.248
24.11461 +203.177.103.1/255.255.255.1
24.11462 +203.179.80.0/255.255.240.0
24.11463 +203.184.184.0/255.255.255.192
24.11464 +203.184.255.64/255.255.255.240
24.11465 +203.185.28.160/255.255.255.224
24.11466 +203.185.151.0/255.255.255.0
24.11467 +203.186.72.136/255.255.255.248
24.11468 +203.186.112.128/255.255.255.248
24.11469 +203.192.148.192/255.255.255.192
24.11470 +203.193.55.48/255.255.255.240
24.11471 +203.193.122.96/255.255.255.240
24.11472 +203.194.25.144/255.255.255.248
24.11473 +203.194.25.248/255.255.255.248
24.11474 +203.194.77.96/255.255.255.224
24.11475 +203.194.145.195/255.255.255.248
24.11476 +203.194.152.16/255.255.255.240
24.11477 +203.194.202.33/255.255.255.248
24.11478 +203.194.244.0/255.255.255.0
24.11479 +203.196.144.136/255.255.255.248
24.11480 +203.196.144.168/255.255.255.248
24.11481 +203.196.148.64/255.255.255.240
24.11482 +203.196.155.32/255.255.255.240
24.11483 +203.196.178.8/255.255.255.248
24.11484 +203.197.22.96/255.255.255.240
24.11485 +203.197.254.128/255.255.255.224
24.11486 +203.198.42.248/255.255.255.248
24.11487 +203.198.59.104/255.255.255.248
24.11488 +203.198.59.120/255.255.255.248
24.11489 +203.198.65.64/255.255.255.248
24.11490 +203.198.65.96/255.255.255.248
24.11491 +203.198.67.80/255.255.255.248
24.11492 +203.198.76.248/255.255.255.248
24.11493 +203.198.159.184/255.255.255.248
24.11494 +203.198.192.160/255.255.255.248
24.11495 +203.198.200.200/255.255.255.248
24.11496 +203.198.201.112/255.255.255.240
24.11497 +203.198.210.0/255.255.255.240
24.11498 +203.198.217.32/255.255.255.224
24.11499 +203.198.219.200/255.255.255.248
24.11500 +203.199.40.32/255.255.255.240
24.11501 +203.199.48.176/255.255.255.240
24.11502 +203.199.66.160/255.255.255.224
24.11503 +203.199.72.0/255.255.255.192
24.11504 +203.200.20.160/255.255.255.224
24.11505 +203.200.33.64/255.255.255.224
24.11506 +203.200.38.224/255.255.255.224
24.11507 +203.200.103.224/255.255.255.224
24.11508 +203.200.197.0/255.255.255.0
24.11509 +203.200.199.128/255.255.255.192
24.11510 +203.201.213.80/255.255.255.236
24.11511 +203.201.213.104/255.255.255.248
24.11512 +203.201.214.64/255.255.255.192
24.11513 +203.208.136.128/255.255.255.128
24.11514 +203.208.225.96/255.255.255.240
24.11515 +203.208.225.192/255.255.255.248
24.11516 +203.208.226.128/255.255.255.192
24.11517 +203.208.227.0/255.255.255.240
24.11518 +203.208.236.64/255.255.255.240
24.11519 +203.208.240.192/255.255.255.192
24.11520 +203.208.251.128/255.255.255.224
24.11521 +203.217.192.0/255.255.192.0
24.11522 +203.220.37.96/255.255.255.240
24.11523 +203.220.76.232/255.255.255.248
24.11524 +203.221.51.224/255.255.255.248
24.11525 +203.221.61.232/255.255.255.248
24.11526 +203.221.61.240/255.255.255.248
24.11527 +203.221.61.248/255.255.255.248
24.11528 +203.221.148.104/255.255.255.248
24.11529 +203.221.148.120/255.255.255.248
24.11530 +203.221.148.208/255.255.255.248
24.11531 +203.221.206.16/255.255.255.248
24.11532 +203.221.217.80/255.255.255.248
24.11533 +203.221.223.144/255.255.255.248
24.11534 +203.221.237.8/255.255.255.248
24.11535 +203.222.44.64/255.255.255.232
24.11536 +203.222.52.80/255.255.255.248
24.11537 +203.222.54.0/255.255.255.200
24.11538 +203.222.63.176/255.255.255.248
24.11539 +203.222.172.0/255.255.255.248
24.11540 +203.222.172.128/255.255.255.240
24.11541 +203.233.86.0/255.255.255.0
24.11542 +203.242.167.0/255.255.255.0
24.11543 +203.242.169.0/255.255.252.0
24.11544 +203.242.174.0/255.255.255.0
24.11545 +204.4.27.0/255.255.255.0
24.11546 +204.9.116.0/255.255.252.0
24.11547 +204.17.116.216/255.255.255.248
24.11548 +204.17.164.0/255.255.255.0
24.11549 +204.17.221.0/255.255.255.0
24.11550 +204.17.228.0/255.255.255.0
24.11551 +204.27.137.0/255.255.255.0
24.11552 +204.27.152.0/255.255.255.0
24.11553 +204.27.241.0/255.255.255.0
24.11554 +204.29.131.0/255.255.255.0
24.11555 +204.29.192.0/255.255.255.0
24.11556 +204.40.0.0/255.254.0.0
24.11557 +204.44.64.0/255.255.192.0
24.11558 +204.44.128.0/255.255.246.0
24.11559 +204.46.0.0/255.254.0.0
24.11560 +204.50.86.0/255.255.255.0
24.11561 +204.50.135.0/255.255.255.0
24.11562 +204.50.147.112/255.255.255.240
24.11563 +204.50.150.32/255.255.255.240
24.11564 +204.50.161.0/255.255.255.0
24.11565 +204.52.200.0/255.255.255.0
24.11566 +204.52.255.0/255.255.255.0
24.11567 +204.57.78.176/255.255.255.240
24.11568 +204.57.101.128/255.255.255.192
24.11569 +204.57.116.0/255.255.255.240
24.11570 +204.58.32.0/255.255.226.0
24.11571 +204.58.240.0/255.255.252.0
24.11572 +204.61.16.0/255.255.242.0
24.11573 +204.62.16.0/255.255.244.0
24.11574 +204.62.213.0/255.255.255.0
24.11575 +204.64.0.0/255.252.0.0
24.11576 +204.68.149.0/255.255.255.0
24.11577 +204.68.176.0/255.255.255.0
24.11578 +204.68.209.0/255.255.255.0
24.11579 +204.68.243.0/255.255.253.0
24.11580 +204.69.135.0/255.255.255.0
24.11581 +204.69.150.0/255.255.255.0
24.11582 +204.69.237.0/255.255.254.0
24.11583 +204.69.249.0/255.255.252.0
24.11584 +204.71.154.0/255.255.255.0
24.11585 +204.73.176.0/255.255.255.0
24.11586 +204.75.167.0/255.255.255.0
24.11587 +204.75.213.0/255.255.255.0
24.11588 +204.75.215.0/255.255.255.0
24.11589 +204.75.243.0/255.255.254.0
24.11590 +204.75.246.0/255.255.255.0
24.11591 +204.76.206.0/255.255.251.0
24.11592 +204.77.32.0/255.255.224.0
24.11593 +204.79.190.0/255.255.255.0
24.11594 +204.80.32.0/255.255.224.0
24.11595 +204.80.134.0/255.255.255.0
24.11596 +204.80.195.0/255.255.255.0
24.11597 +204.80.231.0/255.255.255.0
24.11598 +204.80.250.0/255.255.250.0
24.11599 +204.83.37.0/255.255.255.0
24.11600 +204.87.0.0/255.255.224.0
24.11601 +204.87.64.0/255.255.192.0
24.11602 +204.87.129.0/255.255.255.0
24.11603 +204.87.172.0/255.255.255.0
24.11604 +204.87.179.0/255.255.255.0
24.11605 +204.87.208.0/255.255.255.0
24.11606 +204.88.96.0/255.255.224.0
24.11607 +204.89.64.0/255.255.192.0
24.11608 +204.89.170.0/255.255.255.0
24.11609 +204.89.230.0/255.255.255.0
24.11610 +204.90.16.0/255.255.240.0
24.11611 +204.90.94.0/255.255.255.0
24.11612 +204.90.116.0/255.255.255.0
24.11613 +204.91.138.0/255.255.255.0
24.11614 +204.92.3.24/255.255.255.248
24.11615 +204.92.40.72/255.255.255.248
24.11616 +204.92.70.0/255.255.255.0
24.11617 +204.92.95.64/255.255.255.224
24.11618 +204.92.95.192/255.255.255.224
24.11619 +204.92.244.0/255.255.255.0
24.11620 +204.94.0.0/255.255.224.0
24.11621 +204.94.162.176/255.255.255.248
24.11622 +204.96.7.128/255.255.255.128
24.11623 +204.97.104.0/255.255.255.0
24.11624 +204.97.246.0/255.255.255.0
24.11625 +204.97.248.0/255.255.255.0
24.11626 +204.101.45.0/255.255.255.0
24.11627 +204.101.59.104/255.255.255.248
24.11628 +204.101.119.128/255.255.255.248
24.11629 +204.101.222.96/255.255.255.247
24.11630 +204.102.78.0/255.255.255.0
24.11631 +204.107.100.0/255.255.254.0
24.11632 +204.107.111.0/255.255.255.0
24.11633 +204.107.158.0/255.255.255.0
24.11634 +204.107.159.0/255.255.255.0
24.11635 +204.107.160.0/255.255.255.0
24.11636 +204.107.161.0/255.255.255.0
24.11637 +204.107.203.0/255.255.255.0
24.11638 +204.108.0.0/255.255.245.0
24.11639 +204.110.112.0/255.255.240.0
24.11640 +204.114.0.0/255.255.247.0
24.11641 +204.115.32.0/255.255.226.0
24.11642 +204.115.184.0/255.255.250.0
24.11643 +204.115.232.0/255.255.248.0
24.11644 +204.117.119.0/255.255.255.0
24.11645 +204.117.182.32/255.255.255.224
24.11646 +204.117.215.0/255.255.255.128
24.11647 +204.119.179.0/255.255.255.0
24.11648 +204.121.0.0/255.255.0.0
24.11649 +204.123.0.0/255.255.0.0
24.11650 +204.124.24.0/255.255.252.0
24.11651 +204.124.92.0/255.255.253.0
24.11652 +204.124.120.0/255.255.252.0
24.11653 +204.124.200.0/255.255.253.0
24.11654 +204.124.228.0/255.255.252.0
24.11655 +204.126.126.0/255.255.254.0
24.11656 +204.126.138.0/255.255.254.0
24.11657 +204.126.144.0/255.255.254.0
24.11658 +204.126.152.0/255.255.254.0
24.11659 +204.126.162.0/255.255.254.0
24.11660 +204.126.184.0/255.255.254.0
24.11661 +204.126.206.0/255.255.250.0
24.11662 +204.126.216.0/255.255.254.0
24.11663 +204.128.141.0/255.255.255.0
24.11664 +204.128.162.0/255.255.255.0
24.11665 +204.128.192.0/255.255.255.0
24.11666 +204.128.193.0/255.255.255.0
24.11667 +204.128.216.0/255.255.255.0
24.11668 +204.128.230.0/255.255.255.0
24.11669 +204.128.245.0/255.255.255.0
24.11670 +204.130.0.0/255.255.248.0
24.11671 +204.130.128.0/255.255.255.0
24.11672 +204.130.253.0/255.255.255.0
24.11673 +204.131.0.0/255.252.0.0
24.11674 +204.136.64.0/255.255.192.0
24.11675 +204.138.80.0/255.255.248.0
24.11676 +204.138.114.0/255.255.255.0
24.11677 +204.139.0.0/255.255.248.0
24.11678 +204.140.0.0/255.255.240.0
24.11679 +204.140.128.0/255.255.128.0
24.11680 +204.144.66.0/255.255.255.0
24.11681 +204.144.67.0/255.255.255.0
24.11682 +204.144.70.0/255.255.255.0
24.11683 +204.144.89.0/255.255.255.0
24.11684 +204.144.94.0/255.255.255.0
24.11685 +204.144.102.0/255.255.255.0
24.11686 +204.144.103.0/255.255.255.0
24.11687 +204.144.110.0/255.255.255.0
24.11688 +204.144.114.0/255.255.255.0
24.11689 +204.144.184.80/255.255.255.240
24.11690 +204.144.247.0/255.255.255.0
24.11691 +204.145.16.0/255.255.240.0
24.11692 +204.145.169.0/255.255.255.0
24.11693 +204.145.172.0/255.255.255.0
24.11694 +204.145.179.0/255.255.254.0
24.11695 +204.145.182.0/255.255.255.0
24.11696 +204.145.183.0/255.255.255.0
24.11697 +204.145.186.0/255.255.255.0
24.11698 +204.146.0.0/255.255.237.0
24.11699 +204.146.49.0/255.255.255.0
24.11700 +204.147.177.0/255.255.255.0
24.11701 +204.148.57.0/255.255.251.0
24.11702 +204.149.48.0/255.255.252.0
24.11703 +204.149.176.0/255.255.240.0
24.11704 +204.151.32.0/255.255.255.0
24.11705 +204.151.111.0/255.255.255.0
24.11706 +204.151.168.96/255.255.255.240
24.11707 +204.151.179.0/255.255.251.0
24.11708 +204.152.2.0/255.255.254.0
24.11709 +204.152.16.0/255.255.254.0
24.11710 +204.152.26.0/255.255.254.0
24.11711 +204.152.40.0/255.255.254.0
24.11712 +204.152.44.0/255.255.254.0
24.11713 +204.152.46.0/255.255.254.0
24.11714 +204.152.56.0/255.255.254.0
24.11715 +204.152.58.0/255.255.254.0
24.11716 +204.152.106.0/255.255.254.0
24.11717 +204.152.116.0/255.255.254.0
24.11718 +204.152.184.0/255.255.248.0
24.11719 +204.153.60.0/255.255.252.0
24.11720 +204.153.120.0/255.255.253.0
24.11721 +204.153.132.0/255.255.254.0
24.11722 +204.153.134.0/255.255.255.0
24.11723 +204.153.148.0/255.255.252.0
24.11724 +204.153.188.0/255.255.252.0
24.11725 +204.153.228.0/255.255.252.0
24.11726 +204.153.240.0/255.255.252.0
24.11727 +204.154.160.0/255.255.248.0
24.11728 +204.155.0.0/255.255.240.0
24.11729 +204.155.64.0/255.255.240.0
24.11730 +204.155.148.0/255.255.255.0
24.11731 +204.156.224.0/255.255.224.0
24.11732 +204.162.129.0/255.255.255.0
24.11733 +204.168.16.0/255.255.240.0
24.11734 +204.168.248.0/255.255.248.0
24.11735 +204.176.52.0/255.255.240.0
24.11736 +204.176.165.0/255.255.255.0
24.11737 +204.176.175.0/255.255.255.0
24.11738 +204.178.59.0/255.255.255.0
24.11739 +204.178.109.0/255.255.255.0
24.11740 +204.178.110.224/255.255.255.224
24.11741 +204.181.64.144/255.255.255.240
24.11742 +204.187.70.0/255.255.250.0
24.11743 +204.187.92.0/255.255.255.0
24.11744 +204.188.74.128/255.255.255.128
24.11745 +204.188.142.160/255.255.255.224
24.11746 +204.188.160.96/255.255.255.224
24.11747 +204.188.185.128/255.255.255.192
24.11748 +204.188.192.0/255.255.192.0
24.11749 +204.189.33.0/255.255.255.128
24.11750 +204.189.48.56/255.255.255.248
24.11751 +204.193.139.128/255.255.255.128
24.11752 +204.193.140.104/255.255.255.248
24.11753 +204.193.140.112/255.255.255.240
24.11754 +204.193.160.0/255.255.224.0
24.11755 +204.193.224.0/255.255.224.0
24.11756 +204.194.72.0/255.255.248.0
24.11757 +204.196.0.0/255.255.0.0
24.11758 +204.209.28.0/255.255.254.0
24.11759 +204.211.0.0/255.255.0.0
24.11760 +204.213.60.0/255.255.255.0
24.11761 +204.215.134.224/255.255.255.248
24.11762 +204.220.0.0/255.255.254.0
24.11763 +204.225.65.0/255.255.250.0
24.11764 +204.225.100.0/255.255.254.0
24.11765 +204.225.142.0/255.255.255.0
24.11766 +204.225.254.0/255.255.255.0
24.11767 +204.227.96.0/255.255.224.0
24.11768 +204.234.0.0/255.255.0.0
24.11769 +204.235.48.0/255.255.244.0
24.11770 +204.235.112.0/255.255.246.0
24.11771 +204.238.19.0/255.255.255.0
24.11772 +204.238.28.0/255.255.254.0
24.11773 +204.238.46.0/255.255.255.0
24.11774 +204.238.146.0/255.255.255.0
24.11775 +204.238.173.0/255.255.255.0
24.11776 +204.238.201.0/255.255.255.0
24.11777 +204.238.204.0/255.255.255.0
24.11778 +204.238.207.0/255.255.255.0
24.11779 +204.238.220.0/255.255.255.0
24.11780 +204.238.242.0/255.255.255.0
24.11781 +204.239.142.0/255.255.255.0
24.11782 +204.239.147.0/255.255.255.0
24.11783 +204.239.240.0/255.255.255.0
24.11784 +204.239.242.0/255.255.255.0
24.11785 +204.244.50.0/255.255.255.192
24.11786 +204.244.50.128/255.255.255.192
24.11787 +204.245.88.0/255.255.251.0
24.11788 +204.246.130.0/255.255.252.0
24.11789 +204.250.57.0/255.255.255.0
24.11790 +204.250.118.192/255.255.255.224
24.11791 +204.251.75.0/255.255.255.0
24.11792 +204.253.88.0/255.255.248.0
24.11793 +204.253.110.0/255.255.255.0
24.11794 +204.253.132.0/255.255.254.0
24.11795 +204.254.112.0/255.255.254.0
24.11796 +204.254.235.0/255.255.255.0
24.11797 +204.255.125.32/255.255.255.224
24.11798 +204.255.176.0/255.255.240.0
24.11799 +204.255.234.64/255.255.255.192
24.11800 +205.128.0.32/255.255.255.248
24.11801 +205.128.5.224/255.255.255.248
24.11802 +205.128.24.64/255.255.255.192
24.11803 +205.128.215.0/255.255.255.0
24.11804 +205.130.224.0/255.255.240.0
24.11805 +205.132.120.0/255.255.248.0
24.11806 +205.132.200.0/255.255.248.0
24.11807 +205.137.16.0/255.255.240.0
24.11808 +205.138.12.0/255.255.88.0
24.11809 +205.138.200.32/255.255.255.224
24.11810 +205.138.201.48/255.255.255.224
24.11811 +205.139.9.240/255.255.255.248
24.11812 +205.140.18.0/255.255.255.0
24.11813 +205.140.20.160/255.255.255.240
24.11814 +205.140.23.0/255.255.255.224
24.11815 +205.140.190.64/255.255.255.224
24.11816 +205.142.100.0/255.255.252.0
24.11817 +205.142.128.0/255.255.252.0
24.11818 +205.142.168.0/255.255.252.0
24.11819 +205.142.220.0/255.255.252.0
24.11820 +205.143.64.0/255.255.248.0
24.11821 +205.143.88.0/255.255.248.0
24.11822 +205.143.224.0/255.255.248.0
24.11823 +205.143.240.0/255.255.248.0
24.11824 +205.147.28.64/255.255.255.224
24.11825 +205.147.60.0/255.255.255.0
24.11826 +205.150.75.0/255.255.255.0
24.11827 +205.150.125.128/255.255.255.128
24.11828 +205.150.169.224/255.255.255.248
24.11829 +205.150.214.224/255.255.255.248
24.11830 +205.151.188.0/255.255.255.0
24.11831 +205.151.201.0/255.255.255.0
24.11832 +205.153.24.0/255.255.252.0
24.11833 +205.153.144.0/255.255.252.0
24.11834 +205.153.148.0/255.255.252.0
24.11835 +205.156.0.0/255.255.192.0
24.11836 +205.159.0.0/255.255.255.0
24.11837 +205.159.34.0/255.255.255.0
24.11838 +205.159.50.0/255.255.254.0
24.11839 +205.159.75.0/255.255.255.0
24.11840 +205.159.108.0/255.255.255.0
24.11841 +205.159.115.0/255.255.255.0
24.11842 +205.159.118.0/255.255.255.0
24.11843 +205.159.188.0/255.255.255.0
24.11844 +205.160.80.0/255.255.252.0
24.11845 +205.160.88.0/255.255.255.0
24.11846 +205.160.199.0/255.255.255.0
24.11847 +205.166.16.0/255.255.255.0
24.11848 +205.166.17.0/255.255.255.0
24.11849 +205.166.76.0/255.255.255.0
24.11850 +205.166.105.0/255.255.255.0
24.11851 +205.166.139.0/255.255.255.0
24.11852 +205.166.180.0/255.255.255.0
24.11853 +205.166.228.0/255.255.255.0
24.11854 +205.167.24.0/255.255.254.0
24.11855 +205.167.32.0/255.255.254.0
24.11856 +205.167.64.0/255.255.254.0
24.11857 +205.167.192.0/255.255.254.0
24.11858 +205.167.204.0/255.255.254.0
24.11859 +205.167.244.0/255.255.254.0
24.11860 +205.168.77.0/255.255.246.0
24.11861 +205.168.226.0/255.255.255.0
24.11862 +205.170.26.0/255.255.255.0
24.11863 +205.172.12.0/255.255.252.0
24.11864 +205.172.19.160/255.255.255.248
24.11865 +205.172.72.0/255.255.220.0
24.11866 +205.172.172.0/255.255.252.0
24.11867 +205.173.0.0/255.255.248.0
24.11868 +205.173.8.0/255.255.248.0
24.11869 +205.173.48.0/255.255.248.0
24.11870 +205.173.136.0/255.255.248.0
24.11871 +205.173.200.0/255.255.248.0
24.11872 +205.176.0.0/255.255.0.0
24.11873 +205.180.98.0/255.255.255.0
24.11874 +205.180.190.0/255.255.255.0
24.11875 +205.180.243.0/255.255.255.0
24.11876 +205.181.164.0/255.255.254.0
24.11877 +205.183.31.0/255.255.255.0
24.11878 +205.185.23.0/255.255.255.0
24.11879 +205.189.124.0/255.255.255.0
24.11880 +205.190.22.0/255.255.255.0
24.11881 +205.190.69.0/255.255.255.0
24.11882 +205.200.157.0/255.255.255.0
24.11883 +205.202.0.0/255.255.0.0
24.11884 +205.204.128.0/255.255.128.0
24.11885 +205.205.204.192/255.255.255.240
24.11886 +205.205.217.128/255.255.255.192
24.11887 +205.207.70.0/255.255.255.0
24.11888 +205.207.205.0/255.255.255.0
24.11889 +205.208.140.0/255.255.255.0
24.11890 +205.210.58.0/255.255.255.0
24.11891 +205.210.60.0/255.255.255.0
24.11892 +205.210.188.0/255.255.252.0
24.11893 +205.213.0.0/255.255.0.0
24.11894 +205.219.50.0/255.255.255.240
24.11895 +205.219.69.144/255.255.255.248
24.11896 +205.219.70.48/255.255.255.240
24.11897 +205.219.79.48/255.255.255.224
24.11898 +205.219.87.32/255.255.255.224
24.11899 +205.219.92.16/255.255.255.240
24.11900 +205.219.198.0/255.255.254.0
24.11901 +205.219.211.0/255.255.255.0
24.11902 +205.223.16.0/255.255.240.0
24.11903 +205.225.128.0/255.255.128.0
24.11904 +205.229.233.0/255.255.255.0
24.11905 +205.231.187.0/255.255.255.0
24.11906 +205.232.158.0/255.255.254.0
24.11907 +205.233.116.0/255.255.255.0
24.11908 +205.233.144.0/255.255.255.0
24.11909 +205.235.192.0/255.255.240.0
24.11910 +205.236.130.0/255.255.255.0
24.11911 +205.237.23.0/255.255.255.0
24.11912 +205.240.80.0/255.255.252.0
24.11913 +205.242.119.0/255.255.255.192
24.11914 +205.242.218.56/255.255.255.248
24.11915 +205.243.76.0/255.255.255.0
24.11916 +205.247.47.0/255.255.255.128
24.11917 +205.253.218.192/255.255.255.224
24.11918 +205.254.128.0/255.255.224.0
24.11919 +206.7.81.0/255.255.255.0
24.11920 +206.10.224.0/255.255.252.0
24.11921 +206.13.62.0/255.255.255.0
24.11922 +206.13.64.0/255.255.240.0
24.11923 +206.13.84.128/255.255.255.224
24.11924 +206.13.84.176/255.255.255.248
24.11925 +206.15.96.0/255.255.224.0
24.11926 +206.15.224.0/255.255.224.0
24.11927 +206.16.196.112/255.255.255.224
24.11928 +206.16.196.176/255.255.255.176
24.11929 +206.16.198.32/255.255.255.224
24.11930 +206.16.198.144/255.255.255.248
24.11931 +206.16.198.168/255.255.255.248
24.11932 +206.16.199.0/255.255.255.224
24.11933 +206.16.199.32/255.255.255.224
24.11934 +206.16.199.80/255.255.255.248
24.11935 +206.16.199.88/255.255.255.248
24.11936 +206.17.72.0/255.255.255.0
24.11937 +206.17.74.160/255.255.255.240
24.11938 +206.17.227.0/255.255.251.0
24.11939 +206.17.233.0/255.255.255.0
24.11940 +206.18.203.128/255.255.255.240
24.11941 +206.18.212.16/255.255.255.240
24.11942 +206.18.215.192/255.255.255.192
24.11943 +206.19.110.0/255.255.255.0
24.11944 +206.20.170.0/255.255.255.0
24.11945 +206.22.255.0/255.255.255.0
24.11946 +206.25.196.208/255.255.255.240
24.11947 +206.25.198.224/255.255.255.240
24.11948 +206.27.66.0/255.255.254.0
24.11949 +206.28.64.32/255.255.255.224
24.11950 +206.28.64.224/255.255.255.224
24.11951 +206.28.146.0/255.255.254.0
24.11952 +206.29.48.0/255.255.254.0
24.11953 +206.29.145.192/255.255.255.240
24.11954 +206.31.10.0/255.255.254.0
24.11955 +206.31.216.0/255.255.253.0
24.11956 +206.34.123.0/255.255.255.0
24.11957 +206.40.133.0/255.255.255.0
24.11958 +206.47.20.0/255.255.254.0
24.11959 +206.47.124.224/255.255.255.224
24.11960 +206.51.26.0/255.255.255.0
24.11961 +206.55.131.0/255.255.255.0
24.11962 +206.57.128.0/255.255.128.0
24.11963 +206.63.158.0/255.255.255.0
24.11964 +206.65.173.192/255.255.255.192
24.11965 +206.66.66.0/255.255.255.0
24.11966 +206.71.32.0/255.255.240.0
24.11967 +206.73.59.16/255.255.255.240
24.11968 +206.73.194.192/255.255.255.224
24.11969 +206.74.128.0/255.255.224.0
24.11970 +206.78.0.0/255.255.0.0
24.11971 +206.80.189.0/255.255.255.0
24.11972 +206.81.17.0/255.255.251.0
24.11973 +206.81.28.0/255.255.255.0
24.11974 +206.93.244.0/255.255.255.0
24.11975 +206.96.168.0/255.255.255.0
24.11976 +206.96.191.32/255.255.255.224
24.11977 +206.98.219.0/255.255.255.0
24.11978 +206.99.122.80/255.255.255.240
24.11979 +206.99.238.0/255.255.255.0
24.11980 +206.99.250.0/255.255.254.0
24.11981 +206.100.92.0/255.255.255.0
24.11982 +206.100.168.0/255.255.254.0
24.11983 +206.103.228.128/255.255.255.224
24.11984 +206.105.114.0/255.255.255.0
24.11985 +206.105.221.0/255.255.255.0
24.11986 +206.105.222.0/255.255.255.0
24.11987 +206.112.128.0/255.255.224.0
24.11988 +206.114.201.32/255.255.255.224
24.11989 +206.118.0.0/255.255.0.0
24.11990 +206.129.0.0/255.255.254.0
24.11991 +206.129.112.0/255.255.255.0
24.11992 +206.130.8.0/255.255.255.0
24.11993 +206.130.86.0/255.255.255.0
24.11994 +206.130.180.0/255.255.255.0
24.11995 +206.130.241.0/255.255.255.0
24.11996 +206.131.224.0/255.255.224.0
24.11997 +206.132.30.192/255.255.255.224
24.11998 +206.135.0.0/255.255.167.0
24.11999 +206.135.90.0/255.255.135.176
24.12000 +206.135.210.83/255.255.210.83
24.12001 +206.136.96.200/255.255.255.248
24.12002 +206.136.101.0/255.255.255.128
24.12003 +206.139.27.0/255.255.255.0
24.12004 +206.142.206.0/255.255.254.0
24.12005 +206.143.128.0/255.255.128.0
24.12006 +206.144.56.0/255.255.248.0
24.12007 +206.144.96.0/255.255.224.0
24.12008 +206.150.144.160/255.255.255.224
24.12009 +206.151.48.208/255.255.255.240
24.12010 +206.151.52.80/255.255.255.240
24.12011 +206.151.55.16/255.255.255.240
24.12012 +206.151.86.0/255.255.255.0
24.12013 +206.152.17.0/255.255.255.0
24.12014 +206.152.116.128/255.255.255.128
24.12015 +206.154.88.0/255.255.255.240
24.12016 +206.154.108.0/255.255.255.0
24.12017 +206.154.171.0/255.255.255.0
24.12018 +206.154.231.16/255.255.255.240
24.12019 +206.154.231.64/255.255.255.192
24.12020 +206.155.31.8/255.255.255.248
24.12021 +206.156.1.0/255.255.255.0
24.12022 +206.156.48.0/255.255.255.0
24.12023 +206.156.96.176/255.255.255.240
24.12024 +206.156.254.0/255.255.255.0
24.12025 +206.161.193.0/255.255.255.0
24.12026 +206.166.254.0/255.255.255.0
24.12027 +206.167.148.0/255.255.255.0
24.12028 +206.168.114.32/255.255.255.248
24.12029 +206.169.132.88/255.255.255.248
24.12030 +206.170.104.0/255.255.248.0
24.12031 +206.171.73.88/255.255.255.248
24.12032 +206.171.95.112/255.255.255.240
24.12033 +206.171.192.0/255.255.240.0
24.12034 +206.172.31.160/255.255.255.224
24.12035 +206.175.71.152/255.255.255.248
24.12036 +206.176.0.0/255.255.128.0
24.12037 +206.177.0.0/255.254.0.0
24.12038 +206.181.98.0/255.255.254.0
24.12039 +206.181.220.0/255.255.252.0
24.12040 +206.183.1.0/255.255.255.0
24.12041 +206.183.2.0/255.255.255.0
24.12042 +206.189.29.0/255.255.255.0
24.12043 +206.189.62.0/255.255.254.0
24.12044 +206.189.80.0/255.255.240.0
24.12045 +206.191.0.0/255.255.192.0
24.12046 +206.194.192.0/255.255.192.0
24.12047 +206.195.96.0/255.255.224.0
24.12048 +206.196.137.0/255.255.255.0
24.12049 +206.197.82.0/255.255.255.0
24.12050 +206.197.85.0/255.255.255.0
24.12051 +206.197.89.0/255.255.255.0
24.12052 +206.197.113.0/255.255.255.0
24.12053 +206.197.145.0/255.255.255.0
24.12054 +206.197.160.0/255.255.255.0
24.12055 +206.197.198.0/255.255.255.0
24.12056 +206.197.206.0/255.255.255.0
24.12057 +206.197.213.0/255.255.255.0
24.12058 +206.197.238.0/255.255.255.0
24.12059 +206.197.242.0/255.255.255.0
24.12060 +206.197.246.0/255.255.255.0
24.12061 +206.204.10.192/255.255.255.224
24.12062 +206.205.30.0/255.255.255.0
24.12063 +206.208.64.0/255.255.248.0
24.12064 +206.208.176.0/255.255.240.0
24.12065 +206.212.128.0/255.255.160.0
24.12066 +206.213.128.0/255.255.192.0
24.12067 +206.217.227.0/255.255.255.0
24.12068 +206.220.40.0/255.255.252.0
24.12069 +206.220.52.0/255.255.252.0
24.12070 +206.222.217.0/255.255.255.0
24.12071 +206.223.11.0/255.255.255.0
24.12072 +206.224.0.0/255.255.224.0
24.12073 +206.224.32.0/255.255.224.0
24.12074 +206.228.8.0/255.255.252.0
24.12075 +206.229.18.128/255.255.255.240
24.12076 +206.241.30.0/255.255.254.0
24.12077 +206.245.64.0/255.255.191.0
24.12078 +206.245.161.96/255.255.255.248
24.12079 +206.246.73.64/255.255.255.192
24.12080 +206.253.11.128/255.255.255.192
24.12081 +206.253.14.64/255.255.255.224
24.12082 +206.254.96.0/255.255.248.0
24.12083 +207.1.18.48/255.255.255.240
24.12084 +207.1.60.0/255.255.252.0
24.12085 +207.2.57.0/255.255.255.0
24.12086 +207.2.249.0/255.255.255.192
24.12087 +207.4.0.0/255.255.0.0
24.12088 +207.8.74.200/255.255.255.248
24.12089 +207.10.33.96/255.255.255.224
24.12090 +207.10.58.0/255.255.254.0
24.12091 +207.13.123.64/255.255.255.240
24.12092 +207.14.96.0/255.255.240.0
24.12093 +207.16.34.136/255.255.255.248
24.12094 +207.16.139.0/255.255.255.0
24.12095 +207.18.239.0/255.255.255.0
24.12096 +207.19.252.0/255.255.255.0
24.12097 +207.21.192.0/255.255.192.0
24.12098 +207.24.85.0/255.255.255.0
24.12099 +207.25.71.0/255.255.255.0
24.12100 +207.25.79.0/255.255.255.0
24.12101 +207.28.234.0/255.255.252.0
24.12102 +207.29.0.0/255.255.64.0
24.12103 +207.29.200.16/255.255.255.248
24.12104 +207.29.200.128/255.255.255.224
24.12105 +207.29.202.112/255.255.255.248
24.12106 +207.29.207.64/255.255.255.248
24.12107 +207.29.207.80/255.255.255.248
24.12108 +207.30.114.0/255.255.255.128
24.12109 +207.31.0.0/255.255.192.0
24.12110 +207.31.128.0/255.255.192.0
24.12111 +207.35.148.128/255.255.255.224
24.12112 +207.35.164.192/255.255.255.192
24.12113 +207.35.217.216/255.255.255.248
24.12114 +207.35.253.192/255.255.255.224
24.12115 +207.38.0.0/255.255.254.0
24.12116 +207.38.39.128/255.255.255.248
24.12117 +207.38.119.224/255.255.255.224
24.12118 +207.38.125.80/255.255.255.240
24.12119 +207.41.14.0/255.255.250.0
24.12120 +207.42.6.64/255.255.255.192
24.12121 +207.42.136.0/255.255.248.0
24.12122 +207.43.0.32/255.255.255.240
24.12123 +207.43.55.0/255.255.255.0
24.12124 +207.50.8.0/255.255.255.240
24.12125 +207.50.133.128/255.255.255.240
24.12126 +207.50.216.0/255.255.255.240
24.12127 +207.50.228.224/255.255.255.248
24.12128 +207.52.54.0/255.255.255.192
24.12129 +207.52.96.192/255.255.255.192
24.12130 +207.52.180.64/255.255.255.192
24.12131 +207.54.137.0/255.255.255.0
24.12132 +207.59.26.224/255.255.255.240
24.12133 +207.59.61.104/255.255.255.248
24.12134 +207.59.130.64/255.255.255.224
24.12135 +207.60.0.0/255.255.0.0
24.12136 +207.61.10.176/255.255.255.240
24.12137 +207.61.17.192/255.255.255.224
24.12138 +207.61.34.88/255.255.255.248
24.12139 +207.61.38.104/255.255.255.248
24.12140 +207.61.39.80/255.255.255.248
24.12141 +207.61.40.128/255.255.255.224
24.12142 +207.61.76.48/255.255.255.248
24.12143 +207.61.111.48/255.255.255.248
24.12144 +207.61.145.128/255.255.255.128
24.12145 +207.64.0.0/255.255.0.0
24.12146 +207.66.0.0/255.255.255.0
24.12147 +207.66.155.192/255.255.255.240
24.12148 +207.66.231.0/255.255.255.0
24.12149 +207.67.99.0/255.255.255.0
24.12150 +207.68.36.16/255.255.255.240
24.12151 +207.68.36.208/255.255.255.240
24.12152 +207.70.0.0/255.255.253.0
24.12153 +207.70.16.0/255.255.255.0
24.12154 +207.76.218.0/255.255.255.0
24.12155 +207.77.57.32/255.255.255.240
24.12156 +207.77.76.0/255.255.255.0
24.12157 +207.78.30.0/255.255.255.0
24.12158 +207.78.98.0/255.255.255.0
24.12159 +207.78.113.0/255.255.255.0
24.12160 +207.79.65.0/255.255.255.0
24.12161 +207.83.96.128/255.255.255.128
24.12162 +207.86.66.192/255.255.255.224
24.12163 +207.93.119.0/255.255.255.0
24.12164 +207.95.32.0/255.255.240.0
24.12165 +207.96.50.34/255.255.255.193
24.12166 +207.96.101.160/255.255.255.240
24.12167 +207.96.196.192/255.255.255.224
24.12168 +207.98.204.104/255.255.255.248
24.12169 +207.98.244.192/255.255.255.248
24.12170 +207.99.128.0/255.255.128.0
24.12171 +207.103.208.0/255.255.255.192
24.12172 +207.104.92.0/255.255.255.0
24.12173 +207.104.96.128/255.255.255.192
24.12174 +207.105.150.80/255.255.255.248
24.12175 +207.105.150.128/255.255.255.128
24.12176 +207.105.222.0/255.255.255.0
24.12177 +207.107.10.16/255.255.255.240
24.12178 +207.107.11.0/255.255.255.0
24.12179 +207.108.136.0/255.255.255.0
24.12180 +207.108.252.48/255.255.255.240
24.12181 +207.109.59.0/255.255.255.0
24.12182 +207.113.57.0/255.255.255.0
24.12183 +207.114.172.56/255.255.255.240
24.12184 +207.115.234.0/255.255.255.0
24.12185 +207.117.9.0/255.255.253.0
24.12186 +207.117.52.0/255.255.255.0
24.12187 +207.120.185.0/255.255.255.0
24.12188 +207.121.112.0/255.255.255.0
24.12189 +207.121.115.0/255.255.255.0
24.12190 +207.122.110.0/255.255.254.0
24.12191 +207.122.189.0/255.255.255.0
24.12192 +207.123.128.0/255.255.248.0
24.12193 +207.123.147.0/255.255.254.0
24.12194 +207.123.193.0/255.255.255.0
24.12195 +207.125.0.0/255.255.0.0
24.12196 +207.134.99.96/255.255.255.248
24.12197 +207.136.78.160/255.255.255.224
24.12198 +207.138.102.128/255.255.255.192
24.12199 +207.139.2.24/255.255.255.248
24.12200 +207.139.69.0/255.255.255.0
24.12201 +207.139.96.192/255.255.255.224
24.12202 +207.139.98.112/255.255.255.240
24.12203 +207.139.108.192/255.255.255.224
24.12204 +207.148.76.0/255.255.248.0
24.12205 +207.149.188.0/255.255.255.224
24.12206 +207.150.224.0/255.255.240.0
24.12207 +207.151.0.0/255.255.0.0
24.12208 +207.152.54.0/255.255.255.0
24.12209 +207.153.3.96/255.255.255.248
24.12210 +207.153.9.128/255.255.255.248
24.12211 +207.154.0.0/255.255.192.0
24.12212 +207.156.8.0/255.255.254.0
24.12213 +207.158.19.96/255.255.255.240
24.12214 +207.158.21.224/255.255.255.224
24.12215 +207.158.101.0/255.255.255.128
24.12216 +207.159.94.192/255.255.255.192
24.12217 +207.164.17.96/255.255.255.224
24.12218 +207.164.57.224/255.255.255.224
24.12219 +207.164.85.104/255.255.255.248
24.12220 +207.164.122.0/255.255.255.0
24.12221 +207.164.131.88/255.255.255.240
24.12222 +207.166.0.0/255.255.192.0
24.12223 +207.168.9.0/255.255.255.0
24.12224 +207.168.29.128/255.255.255.248
24.12225 +207.168.46.0/255.255.255.192
24.12226 +207.168.171.0/255.255.255.0
24.12227 +207.168.187.64/255.255.255.240
24.12228 +207.168.250.0/255.255.255.0
24.12229 +207.171.34.0/255.255.255.0
24.12230 +207.171.64.0/255.255.192.0
24.12231 +207.173.80.0/255.255.255.0
24.12232 +207.173.220.64/255.255.255.192
24.12233 +207.178.134.203/255.255.225.248
24.12234 +207.178.171.0/255.255.255.192
24.12235 +207.182.246.192/255.255.255.224
24.12236 +207.188.0.0/255.255.224.0
24.12237 +207.191.85.240/255.255.255.248
24.12238 +207.191.119.232/255.255.255.248
24.12239 +207.192.0.0/255.255.192.0
24.12240 +207.193.59.0/255.255.255.192
24.12241 +207.194.153.0/255.255.255.224
24.12242 +207.195.51.0/255.255.255.0
24.12243 +207.198.109.134/255.255.255.245
24.12244 +207.200.14.32/255.255.255.224
24.12245 +207.200.30.0/255.255.255.0
24.12246 +207.200.41.64/255.255.255.224
24.12247 +207.201.64.0/255.255.192.0
24.12248 +207.202.100.0/255.255.255.224
24.12249 +207.202.145.32/255.255.255.248
24.12250 +207.202.213.0/255.255.255.0
24.12251 +207.209.0.0/255.255.253.0
24.12252 +207.209.124.128/255.255.255.128
24.12253 +207.211.207.64/255.255.255.192
24.12254 +207.212.106.0/255.255.255.0
24.12255 +207.212.129.64/255.255.255.224
24.12256 +207.212.235.0/255.255.255.128
24.12257 +207.213.45.32/255.255.255.224
24.12258 +207.213.110.224/255.255.255.240
24.12259 +207.213.111.128/255.255.255.248
24.12260 +207.214.50.208/255.255.255.248
24.12261 +207.214.85.8/255.255.255.248
24.12262 +207.214.247.128/255.255.255.224
24.12263 +207.215.9.88/255.255.255.248
24.12264 +207.215.250.176/255.255.255.248
24.12265 +207.217.18.0/255.255.255.0
24.12266 +207.217.37.48/255.255.255.248
24.12267 +207.217.232.0/255.255.255.128
24.12268 +207.219.18.0/255.255.255.0
24.12269 +207.219.88.192/255.255.255.224
24.12270 +207.219.159.64/255.255.255.192
24.12271 +207.220.121.0/255.255.253.0
24.12272 +207.224.222.96/255.255.255.248
24.12273 +207.225.25.0/255.255.255.0
24.12274 +207.225.162.0/255.255.255.0
24.12275 +207.229.11.192/255.255.255.192
24.12276 +207.229.176.144/255.255.255.240
24.12277 +207.232.3.0/255.255.255.240
24.12278 +207.232.12.0/255.255.255.0
24.12279 +207.232.128.0/255.255.128.0
24.12280 +207.234.37.64/255.255.255.240
24.12281 +207.234.106.192/255.255.255.240
24.12282 +207.234.185.0/255.255.255.0
24.12283 +207.234.187.0/255.255.255.0
24.12284 +207.236.164.32/255.255.255.224
24.12285 +207.236.193.128/255.255.255.224
24.12286 +207.236.203.64/255.255.255.224
24.12287 +207.236.203.128/255.255.255.224
24.12288 +207.237.166.96/255.255.255.224
24.12289 +207.237.166.128/255.255.255.192
24.12290 +207.239.240.184/255.255.255.248
24.12291 +207.240.0.0/255.255.248.0
24.12292 +207.240.17.0/255.255.251.0
24.12293 +207.240.39.0/255.255.255.0
24.12294 +207.242.54.0/255.255.255.0
24.12295 +207.242.126.0/255.255.255.0
24.12296 +207.243.213.0/255.255.255.0
24.12297 +207.244.75.48/255.255.255.248
24.12298 +207.244.77.0/255.255.255.0
24.12299 +207.244.92.24/255.255.255.248
24.12300 +207.245.28.40/255.255.255.248
24.12301 +207.245.160.0/255.255.224.0
24.12302 +207.246.158.17/255.255.255.205
24.12303 +207.252.135.0/255.255.255.0
24.12304 +207.252.218.240/255.255.255.240
24.12305 +208.1.59.64/255.255.255.192
24.12306 +208.2.159.144/255.255.255.240
24.12307 +208.2.162.0/255.255.254.0
24.12308 +208.2.250.0/255.255.254.0
24.12309 +208.3.255.0/255.255.255.0
24.12310 +208.9.198.24/255.255.255.248
24.12311 +208.11.127.160/255.255.255.240
24.12312 +208.11.145.128/255.255.255.192
24.12313 +208.11.244.0/255.255.252.0
24.12314 +208.18.125.80/255.255.255.240
24.12315 +208.24.195.80/255.255.255.240
24.12316 +208.25.208.0/255.255.255.0
24.12317 +208.28.122.0/255.255.253.0
24.12318 +208.28.133.0/255.255.255.0
24.12319 +208.30.188.0/255.255.255.0
24.12320 +208.31.171.0/255.255.255.0
24.12321 +208.32.12.0/255.255.255.0
24.12322 +208.32.217.64/255.255.255.240
24.12323 +208.33.250.64/255.255.255.224
24.12324 +208.34.184.0/255.255.255.0
24.12325 +208.35.62.64/255.255.255.192
24.12326 +208.35.198.176/255.255.255.240
24.12327 +208.35.212.0/255.255.255.0
24.12328 +208.38.13.128/255.255.255.192
24.12329 +208.39.46.0/255.255.255.241
24.12330 +208.39.46.25/255.255.255.25
24.12331 +208.39.151.240/255.255.255.240
24.12332 +208.39.154.192/255.255.255.224
24.12333 +208.39.197.152/255.255.255.248
24.12334 +208.41.38.32/255.255.255.224
24.12335 +208.41.67.0/255.255.255.224
24.12336 +208.41.79.96/255.255.255.224
24.12337 +208.41.110.80/255.255.255.248
24.12338 +208.41.121.32/255.255.255.224
24.12339 +208.41.127.192/255.255.255.224
24.12340 +208.41.144.192/255.255.255.224
24.12341 +208.41.154.40/255.255.255.248
24.12342 +208.41.155.224/255.255.255.224
24.12343 +208.41.189.0/255.255.255.224
24.12344 +208.41.230.0/255.255.255.0
24.12345 +208.42.117.192/255.255.255.248
24.12346 +208.44.17.0/255.255.255.0
24.12347 +208.44.129.192/255.255.255.224
24.12348 +208.44.181.64/255.255.255.224
24.12349 +208.44.236.64/255.255.255.224
24.12350 +208.45.2.232/255.255.255.248
24.12351 +208.45.106.0/255.255.255.240
24.12352 +208.45.140.224/255.255.255.224
24.12353 +208.45.143.0/255.255.255.128
24.12354 +208.45.156.160/255.255.255.224
24.12355 +208.46.138.0/255.255.255.224
24.12356 +208.46.243.0/255.255.255.224
24.12357 +208.46.255.16/255.255.255.248
24.12358 +208.47.160.96/255.255.255.224
24.12359 +208.47.212.16/255.255.255.248
24.12360 +208.47.255.184/255.255.255.248
24.12361 +208.48.64.0/255.255.255.0
24.12362 +208.49.164.0/255.255.255.0
24.12363 +208.50.66.224/255.255.255.224
24.12364 +208.57.14.240/255.255.255.248
24.12365 +208.57.57.96/255.255.255.240
24.12366 +208.57.69.88/255.255.255.248
24.12367 +208.57.238.16/255.255.255.248
24.12368 +208.58.161.48/255.255.255.240
24.12369 +208.58.186.0/255.255.255.240
24.12370 +208.59.2.64/255.255.255.224
24.12371 +208.59.15.48/255.255.255.240
24.12372 +208.59.41.216/255.255.255.248
24.12373 +208.128.168.80/255.255.255.240
24.12374 +208.129.137.255/255.255.253.255
24.12375 +208.129.201.0/255.255.255.0
24.12376 +208.130.57.0/255.255.255.0
24.12377 +208.131.50.0/255.255.255.0
24.12378 +208.131.68.0/255.255.255.0
24.12379 +208.132.37.0/255.255.255.0
24.12380 +208.132.168.96/255.255.255.224
24.12381 +208.132.238.0/255.255.255.0
24.12382 +208.132.250.0/255.255.255.0
24.12383 +208.134.115.0/255.255.255.0
24.12384 +208.134.193.0/255.255.255.0
24.12385 +208.135.192.96/255.255.255.224
24.12386 +208.136.50.0/255.255.255.0
24.12387 +208.136.102.0/255.255.255.0
24.12388 +208.137.135.0/255.255.255.0
24.12389 +208.138.34.80/255.255.255.248
24.12390 +208.138.161.0/255.255.255.240
24.12391 +208.138.169.240/255.255.255.240
24.12392 +208.138.170.176/255.255.255.248
24.12393 +208.139.27.0/255.255.255.0
24.12394 +208.139.37.0/255.255.255.0
24.12395 +208.139.64.224/255.255.255.240
24.12396 +208.140.8.96/255.255.255.224
24.12397 +208.140.16.32/255.255.255.224
24.12398 +208.140.92.0/255.255.255.0
24.12399 +208.141.5.64/255.255.255.192
24.12400 +208.141.47.192/255.255.255.224
24.12401 +208.141.82.0/255.255.255.0
24.12402 +208.142.3.128/255.255.255.224
24.12403 +208.142.84.64/255.255.255.224
24.12404 +208.142.154.64/255.255.255.192
24.12405 +208.143.7.64/255.255.255.192
24.12406 +208.143.193.0/255.255.255.0
24.12407 +208.143.210.192/255.255.255.192
24.12408 +208.144.34.160/255.255.255.240
24.12409 +208.144.232.0/255.255.255.240
24.12410 +208.145.129.0/255.255.255.0
24.12411 +208.145.149.0/255.255.255.0
24.12412 +208.146.103.32/255.255.255.224
24.12413 +208.146.241.192/255.255.253.192
24.12414 +208.147.8.0/255.255.255.0
24.12415 +208.147.40.0/255.255.255.208
24.12416 +208.147.53.128/255.255.255.224
24.12417 +208.147.53.224/255.255.255.224
24.12418 +208.147.65.0/255.255.255.0
24.12419 +208.147.88.0/255.255.248.0
24.12420 +208.153.117.0/255.255.255.0
24.12421 +208.155.8.16/255.255.255.240
24.12422 +208.155.82.48/255.255.255.240
24.12423 +208.155.144.0/255.255.248.0
24.12424 +208.155.183.0/255.255.255.0
24.12425 +208.155.188.0/255.255.255.0
24.12426 +208.156.96.176/255.255.255.240
24.12427 +208.156.118.0/255.255.255.240
24.12428 +208.156.118.240/255.255.255.240
24.12429 +208.157.76.0/255.255.254.0
24.12430 +208.157.217.128/255.255.255.128
24.12431 +208.158.117.16/255.255.255.240
24.12432 +208.158.117.240/255.255.255.240
24.12433 +208.158.122.0/255.255.255.0
24.12434 +208.160.46.176/255.255.255.240
24.12435 +208.160.46.208/255.255.255.240
24.12436 +208.161.5.128/255.255.255.224
24.12437 +208.162.170.0/255.255.255.0
24.12438 +208.162.171.160/255.255.255.240
24.12439 +208.162.216.0/255.255.252.0
24.12440 +208.162.223.0/255.255.255.0
24.12441 +208.164.6.144/255.255.255.240
24.12442 +208.164.25.0/255.255.255.0
24.12443 +208.165.227.32/255.255.255.240
24.12444 +208.165.251.0/255.255.255.0
24.12445 +208.166.224.128/255.255.255.128
24.12446 +208.167.116.80/255.255.255.240
24.12447 +208.167.203.80/255.255.255.240
24.12448 +208.168.72.0/255.255.254.0
24.12449 +208.168.208.0/255.255.254.0
24.12450 +208.171.163.32/255.255.255.224
24.12451 +208.179.2.192/255.255.255.248
24.12452 +208.179.2.208/255.255.255.240
24.12453 +208.181.129.200/255.255.255.248
24.12454 +208.181.224.0/255.255.255.0
24.12455 +208.182.0.0/255.254.0.0
24.12456 +208.184.183.192/255.255.255.240
24.12457 +208.185.139.208/255.255.255.240
24.12458 +208.185.166.0/255.255.255.192
24.12459 +208.185.182.240/255.255.255.240
24.12460 +208.185.254.64/255.255.255.224
24.12461 +208.186.152.0/255.255.255.0
24.12462 +208.187.191.136/255.255.255.248
24.12463 +208.188.60.176/255.255.255.248
24.12464 +208.188.81.64/255.255.255.224
24.12465 +208.188.135.176/255.255.255.248
24.12466 +208.188.198.40/255.255.255.248
24.12467 +208.189.2.192/255.255.255.192
24.12468 +208.189.11.80/255.255.255.240
24.12469 +208.189.82.56/255.255.255.248
24.12470 +208.189.88.64/255.255.255.248
24.12471 +208.189.96.24/255.255.255.248
24.12472 +208.189.96.160/255.255.255.224
24.12473 +208.189.96.224/255.255.255.248
24.12474 +208.189.136.104/255.255.255.248
24.12475 +208.189.179.176/255.255.255.248
24.12476 +208.189.196.160/255.255.255.240
24.12477 +208.190.93.32/255.255.255.240
24.12478 +208.190.96.144/255.255.255.248
24.12479 +208.191.41.56/255.255.255.248
24.12480 +208.192.0.0/255.255.0.0
24.12481 +208.193.167.128/255.255.255.192
24.12482 +208.194.116.0/255.255.255.0
24.12483 +208.194.152.0/255.255.255.0
24.12484 +208.194.184.0/255.255.255.0
24.12485 +208.195.253.16/255.255.255.248
24.12486 +208.196.3.32/255.255.255.248
24.12487 +208.196.166.0/255.255.255.0
24.12488 +208.197.9.64/255.255.255.240
24.12489 +208.197.34.0/255.255.255.128
24.12490 +208.198.198.0/255.255.255.0
24.12491 +208.199.134.0/255.255.255.0
24.12492 +208.200.56.0/255.255.248.0
24.12493 +208.200.104.0/255.255.255.0
24.12494 +208.200.124.0/255.255.255.0
24.12495 +208.203.14.0/255.255.255.0
24.12496 +208.204.246.16/255.255.255.240
24.12497 +208.205.18.16/255.255.255.248
24.12498 +208.205.21.0/255.255.255.0
24.12499 +208.205.186.128/255.255.255.192
24.12500 +208.206.212.16/255.255.255.248
24.12501 +208.206.234.0/255.255.255.0
24.12502 +208.207.43.0/255.255.255.0
24.12503 +208.208.221.0/255.255.255.192
24.12504 +208.209.205.0/255.255.255.0
24.12505 +208.210.54.0/255.255.255.0
24.12506 +208.211.42.64/255.255.255.224
24.12507 +208.211.140.8/255.255.255.248
24.12508 +208.212.7.0/255.255.255.0
24.12509 +208.213.119.0/255.255.255.0
24.12510 +208.213.242.0/255.255.255.0
24.12511 +208.214.154.0/255.255.255.0
24.12512 +208.215.160.64/255.255.255.192
24.12513 +208.215.208.0/255.255.254.0
24.12514 +208.216.52.0/255.255.255.0
24.12515 +208.216.53.0/255.255.255.0
24.12516 +208.216.54.0/255.255.255.0
24.12517 +208.216.55.0/255.255.255.0
24.12518 +208.216.85.192/255.255.255.224
24.12519 +208.216.90.0/255.255.255.0
24.12520 +208.217.63.0/255.255.255.0
24.12521 +208.218.4.0/255.255.255.0
24.12522 +208.218.80.0/255.255.255.0
24.12523 +208.219.64.0/255.255.255.0
24.12524 +208.219.81.0/255.255.255.0
24.12525 +208.219.167.0/255.255.255.0
24.12526 +208.219.174.0/255.255.255.0
24.12527 +208.219.187.0/255.255.255.0
24.12528 +208.220.77.0/255.255.255.0
24.12529 +208.221.241.0/255.255.255.0
24.12530 +208.222.110.0/255.255.255.0
24.12531 +208.223.102.0/255.255.255.0
24.12532 +208.223.167.0/255.255.255.0
24.12533 +208.224.75.96/255.255.255.224
24.12534 +208.225.90.0/255.255.255.0
24.12535 +208.225.180.0/255.255.255.0
24.12536 +208.225.218.240/255.255.255.240
24.12537 +208.226.184.160/255.255.255.224
24.12538 +208.226.208.0/255.255.248.0
24.12539 +208.228.123.128/255.255.255.192
24.12540 +208.229.79.0/255.255.255.0
24.12541 +208.229.225.240/255.255.255.240
24.12542 +208.231.4.144/255.255.255.248
24.12543 +208.231.29.32/255.255.255.240
24.12544 +208.231.90.224/255.255.255.245
24.12545 +208.231.90.236/255.255.255.236
24.12546 +208.231.162.0/255.255.255.0
24.12547 +208.233.155.0/255.255.255.0
24.12548 +208.234.148.192/255.255.255.192
24.12549 +208.236.44.0/255.255.254.0
24.12550 +208.237.188.0/255.255.255.0
24.12551 +208.237.220.0/255.255.254.0
24.12552 +208.238.15.0/255.255.255.0
24.12553 +208.238.98.0/255.255.255.0
24.12554 +208.240.214.128/255.255.255.128
24.12555 +208.240.244.64/255.255.255.240
24.12556 +208.243.58.0/255.255.254.0
24.12557 +208.243.219.0/255.255.255.128
24.12558 +208.244.73.0/255.255.255.128
24.12559 +208.244.116.0/255.255.254.0
24.12560 +208.244.233.0/255.255.255.0
24.12561 +208.244.251.224/255.255.255.248
24.12562 +208.245.40.192/255.255.255.248
24.12563 +208.246.29.0/255.255.255.128
24.12564 +208.246.34.32/255.255.255.248
24.12565 +208.246.35.0/255.255.255.0
24.12566 +208.246.39.120/255.255.255.248
24.12567 +208.246.95.56/255.255.255.248
24.12568 +208.246.114.176/255.255.255.240
24.12569 +208.247.15.0/255.255.255.0
24.12570 +208.248.174.192/255.255.255.192
24.12571 +208.251.126.96/255.255.255.240
24.12572 +208.251.137.0/255.255.255.0
24.12573 +208.251.175.240/255.255.255.248
24.12574 +208.251.200.128/255.255.255.240
24.12575 +208.252.11.32/255.255.255.240
24.12576 +208.252.18.16/255.255.255.240
24.12577 +208.252.39.0/255.255.255.0
24.12578 +208.252.81.16/255.255.255.240
24.12579 +208.252.102.0/255.255.255.0
24.12580 +208.252.173.240/255.255.255.240
24.12581 +208.252.227.112/255.255.255.248
24.12582 +208.252.239.0/255.255.255.128
24.12583 +208.253.51.168/255.255.255.248
24.12584 +208.253.62.16/255.255.255.248
24.12585 +208.253.65.32/255.255.255.224
24.12586 +208.253.155.0/255.255.255.0
24.12587 +208.254.63.0/255.255.255.0
24.12588 +209.3.152.32/255.255.255.224
24.12589 +209.3.205.48/255.255.255.240
24.12590 +209.5.110.176/255.255.255.240
24.12591 +209.10.102.128/255.255.255.224
24.12592 +209.10.145.208/255.255.255.240
24.12593 +209.10.163.128/255.255.255.240
24.12594 +209.10.173.184/255.255.255.248
24.12595 +209.10.202.176/255.255.255.240
24.12596 +209.10.202.224/255.255.255.224
24.12597 +209.10.215.0/255.255.255.192
24.12598 +209.10.227.160/255.255.255.248
24.12599 +209.10.227.208/255.255.255.192
24.12600 +209.11.5.96/255.255.255.240
24.12601 +209.11.24.64/255.255.255.240
24.12602 +209.11.40.0/255.255.255.192
24.12603 +209.11.41.224/255.255.255.240
24.12604 +209.11.89.16/255.255.255.240
24.12605 +209.11.120.64/255.255.255.240
24.12606 +209.11.126.0/255.255.255.0
24.12607 +209.11.134.0/255.255.255.0
24.12608 +209.12.92.64/255.255.255.224
24.12609 +209.12.135.240/255.255.255.240
24.12610 +209.17.129.96/255.255.255.224
24.12611 +209.17.152.0/255.255.255.192
24.12612 +209.17.174.128/255.255.255.192
24.12613 +209.19.117.16/255.255.255.248
24.12614 +209.19.124.224/255.255.255.240
24.12615 +209.20.177.104/255.255.255.248
24.12616 +209.21.102.120/255.255.255.248
24.12617 +209.21.106.160/255.255.255.240
24.12618 +209.25.84.128/255.255.255.224
24.12619 +209.25.84.192/255.255.255.224
24.12620 +209.25.153.174/255.255.255.246
24.12621 +209.26.80.192/255.255.255.192
24.12622 +209.26.144.0/255.255.255.192
24.12623 +209.26.188.0/255.255.255.224
24.12624 +209.28.87.16/255.255.255.240
24.12625 +209.28.166.0/255.255.255.0
24.12626 +209.29.119.56/255.255.255.248
24.12627 +209.31.0.0/255.255.0.0
24.12628 +209.34.72.48/255.255.255.208
24.12629 +209.34.72.192/255.255.255.192
24.12630 +209.34.75.0/255.255.255.0
24.12631 +209.34.146.112/255.255.255.240
24.12632 +209.34.147.0/255.255.255.128
24.12633 +209.34.154.176/255.255.255.248
24.12634 +209.43.21.224/255.255.255.224
24.12635 +209.44.33.0/255.255.255.224
24.12636 +209.47.84.128/255.255.255.192
24.12637 +209.47.190.192/255.255.255.240
24.12638 +209.47.215.80/255.255.255.240
24.12639 +209.51.16.0/255.255.240.0
24.12640 +209.52.126.64/255.255.255.224
24.12641 +209.54.188.0/255.255.255.0
24.12642 +209.56.0.0/255.255.252.0
24.12643 +209.56.156.0/255.255.254.0
24.12644 +209.58.5.128/255.255.255.224
24.12645 +209.58.93.96/255.255.255.224
24.12646 +209.58.184.136/255.255.255.248
24.12647 +209.61.10.0/255.255.255.240
24.12648 +209.61.120.0/255.255.255.0
24.12649 +209.61.178.96/255.255.255.240
24.12650 +209.62.61.0/255.255.255.0
24.12651 +209.62.62.0/255.255.255.0
24.12652 +209.63.134.128/255.255.255.128
24.12653 +209.66.192.0/255.255.224.0
24.12654 +209.67.69.160/255.255.255.224
24.12655 +209.68.4.0/255.255.255.0
24.12656 +209.68.128.0/255.255.224.0
24.12657 +209.71.127.0/255.255.255.240
24.12658 +209.71.140.96/255.255.255.240
24.12659 +209.71.239.64/255.255.255.192
24.12660 +209.74.192.0/255.255.224.0
24.12661 +209.76.123.128/255.255.255.128
24.12662 +209.76.164.64/255.255.255.224
24.12663 +209.77.58.32/255.255.255.224
24.12664 +209.77.219.128/255.255.255.224
24.12665 +209.78.62.0/255.255.255.0
24.12666 +209.78.104.128/255.255.255.224
24.12667 +209.78.120.128/255.255.255.224
24.12668 +209.78.184.120/255.255.255.248
24.12669 +209.78.188.224/255.255.255.224
24.12670 +209.78.194.0/255.255.255.0
24.12671 +209.78.203.0/255.255.255.0
24.12672 +209.79.237.128/255.255.255.128
24.12673 +209.81.58.112/255.255.255.240
24.12674 +209.81.136.0/255.255.255.0
24.12675 +209.83.206.64/255.255.255.224
24.12676 +209.85.26.192/255.255.255.224
24.12677 +209.85.96.0/255.255.252.0
24.12678 +209.85.147.0/255.255.255.128
24.12679 +209.85.160.0/255.255.248.0
24.12680 +209.85.206.0/255.255.255.0
24.12681 +209.85.239.64/255.255.255.192
24.12682 +209.87.238.32/255.255.255.240
24.12683 +209.92.36.192/255.255.255.224
24.12684 +209.92.132.240/255.255.255.240
24.12685 +209.93.232.0/255.255.254.0
24.12686 +209.98.62.48/255.255.255.240
24.12687 +209.101.132.128/255.255.255.192
24.12688 +209.101.186.64/255.255.255.224
24.12689 +209.102.119.64/255.255.255.192
24.12690 +209.110.94.0/255.255.255.0
24.12691 +209.113.210.72/255.255.255.248
24.12692 +209.113.254.88/255.255.255.248
24.12693 +209.120.34.16/255.255.255.240
24.12694 +209.120.115.0/255.255.255.0
24.12695 +209.121.207.192/255.255.255.224
24.12696 +209.122.24.24/255.255.255.248
24.12697 +209.122.74.0/255.255.255.0
24.12698 +209.122.109.208/255.255.255.240
24.12699 +209.122.130.0/255.255.255.0
24.12700 +209.122.167.208/255.255.255.240
24.12701 +209.123.110.64/255.255.255.225
24.12702 +209.124.0.0/255.255.224.0
24.12703 +209.125.45.0/255.255.255.0
24.12704 +209.125.153.192/255.255.255.240
24.12705 +209.125.159.96/255.255.255.224
24.12706 +209.127.23.128/255.255.255.224
24.12707 +209.128.66.144/255.255.255.240
24.12708 +209.128.66.192/255.255.255.224
24.12709 +209.128.67.88/255.255.255.248
24.12710 +209.128.67.160/255.255.255.248
24.12711 +209.128.68.64/255.255.255.192
24.12712 +209.128.75.32/255.255.255.240
24.12713 +209.128.75.64/255.255.255.240
24.12714 +209.128.75.160/255.255.255.224
24.12715 +209.128.78.224/255.255.255.248
24.12716 +209.128.78.240/255.255.255.248
24.12717 +209.128.81.16/255.255.255.240
24.12718 +209.128.81.64/255.255.255.240
24.12719 +209.128.88.160/255.255.255.248
24.12720 +209.128.91.72/255.255.255.248
24.12721 +209.128.91.88/255.255.255.248
24.12722 +209.128.91.176/255.255.255.248
24.12723 +209.131.128.0/255.255.192.0
24.12724 +209.132.98.0/255.255.255.112
24.12725 +209.132.98.145/255.255.254.145
24.12726 +209.132.203.192/255.255.255.192
24.12727 +209.132.254.0/255.255.254.0
24.12728 +209.133.42.0/255.255.255.0
24.12729 +209.133.128.0/255.255.192.0
24.12730 +209.133.224.0/255.255.224.0
24.12731 +209.134.18.192/255.255.255.224
24.12732 +209.134.159.240/255.255.255.240
24.12733 +209.135.0.64/255.255.255.240
24.12734 +209.137.96.0/255.255.251.0
24.12735 +209.137.147.0/255.255.255.192
24.12736 +209.141.176.24/255.255.255.248
24.12737 +209.142.112.120/255.255.255.120
24.12738 +209.142.123.56/255.255.255.247
24.12739 +209.143.226.0/255.255.255.0
24.12740 +209.146.37.0/255.255.255.0
24.12741 +209.146.89.128/255.255.255.224
24.12742 +209.152.214.8/255.255.255.248
24.12743 +209.152.214.216/255.255.255.248
24.12744 +209.153.208.128/255.255.255.128
24.12745 +209.155.236.0/255.255.255.224
24.12746 +209.163.246.176/255.255.255.248
24.12747 +209.166.3.200/255.255.255.248
24.12748 +209.166.42.48/255.255.255.240
24.12749 +209.166.42.208/255.255.255.248
24.12750 +209.166.49.176/255.255.255.240
24.12751 +209.167.115.0/255.255.255.0
24.12752 +209.167.132.208/255.255.255.240
24.12753 +209.167.159.0/255.255.255.224
24.12754 +209.167.192.16/255.255.255.240
24.12755 +209.167.202.56/255.255.255.248
24.12756 +209.167.245.64/255.255.255.192
24.12757 +209.176.191.192/255.255.255.225
24.12758 +209.176.232.0/255.255.248.0
24.12759 +209.178.32.0/255.255.255.224
24.12760 +209.178.69.0/255.255.255.0
24.12761 +209.178.72.112/255.255.255.240
24.12762 +209.178.92.0/255.255.255.224
24.12763 +209.178.92.128/255.255.255.224
24.12764 +209.178.193.64/255.255.255.240
24.12765 +209.179.64.0/255.255.253.0
24.12766 +209.179.73.0/255.255.255.128
24.12767 +209.179.94.0/255.255.255.240
24.12768 +209.179.103.0/255.255.255.192
24.12769 +209.179.113.64/255.255.255.224
24.12770 +209.180.118.240/255.255.255.248
24.12771 +209.180.151.0/255.255.255.0
24.12772 +209.180.154.144/255.255.255.248
24.12773 +209.180.175.176/255.255.255.248
24.12774 +209.180.202.128/255.255.255.248
24.12775 +209.181.53.16/255.255.255.248
24.12776 +209.181.73.168/255.255.255.248
24.12777 +209.181.113.192/255.255.255.248
24.12778 +209.181.188.128/255.255.255.128
24.12779 +209.182.108.72/255.255.255.248
24.12780 +209.184.7.128/255.255.255.248
24.12781 +209.184.77.128/255.255.255.128
24.12782 +209.184.98.192/255.255.255.208
24.12783 +209.184.105.96/255.255.255.240
24.12784 +209.184.141.96/255.255.255.224
24.12785 +209.187.227.0/255.255.255.0
24.12786 +209.187.233.208/255.255.255.248
24.12787 +209.190.197.128/255.255.255.128
24.12788 +209.191.49.160/255.255.255.240
24.12789 +209.191.90.144/255.255.255.240
24.12790 +209.191.132.240/255.255.255.240
24.12791 +209.191.148.32/255.255.255.224
24.12792 +209.191.148.96/255.255.255.224
24.12793 +209.191.156.0/255.255.255.192
24.12794 +209.191.163.0/255.255.255.0
24.12795 +209.192.62.0/255.255.255.0
24.12796 +209.192.115.0/255.255.253.0
24.12797 +209.192.156.16/255.255.255.248
24.12798 +209.192.166.96/255.255.255.224
24.12799 +209.196.87.64/255.255.255.240
24.12800 +209.197.33.136/255.255.255.248
24.12801 +209.198.176.0/255.255.240.0
24.12802 +209.202.82.136/255.255.255.248
24.12803 +209.203.64.0/255.255.192.0
24.12804 +209.208.140.136/255.255.255.248
24.12805 +209.208.140.240/255.255.255.240
24.12806 +209.208.162.16/255.255.255.240
24.12807 +209.208.171.96/255.255.255.224
24.12808 +209.208.192.0/255.255.255.192
24.12809 +209.208.196.160/255.255.255.224
24.12810 +209.208.200.224/255.255.255.240
24.12811 +209.208.239.0/255.255.255.224
24.12812 +209.209.10.48/255.255.255.248
24.12813 +209.209.57.216/255.255.255.248
24.12814 +209.209.58.24/255.255.255.248
24.12815 +209.210.4.192/255.255.255.192
24.12816 +209.210.120.0/255.255.248.0
24.12817 +209.210.129.224/255.255.255.224
24.12818 +209.210.138.0/255.255.255.0
24.12819 +209.210.228.0/255.255.252.0
24.12820 +209.211.20.0/255.255.255.0
24.12821 +209.211.170.160/255.255.255.224
24.12822 +209.212.164.24/255.255.255.248
24.12823 +209.212.167.0/255.255.255.248
24.12824 +209.212.180.224/255.255.255.224
24.12825 +209.212.184.160/255.255.255.224
24.12826 +209.212.186.192/255.255.255.224
24.12827 +209.212.188.120/255.255.255.248
24.12828 +209.213.206.0/255.255.255.224
24.12829 +209.213.206.128/255.255.255.192
24.12830 +209.216.72.16/255.255.255.240
24.12831 +209.216.74.8/255.255.255.248
24.12832 +209.217.5.32/255.255.255.240
24.12833 +209.217.8.128/255.255.255.128
24.12834 +209.217.88.128/255.255.255.192
24.12835 +209.218.10.96/255.255.255.240
24.12836 +209.218.170.0/255.255.255.128
24.12837 +209.219.39.0/255.255.255.128
24.12838 +209.219.75.0/255.255.255.248
24.12839 +209.219.82.96/255.255.255.240
24.12840 +209.219.93.192/255.255.255.240
24.12841 +209.219.215.1/255.255.255.1
24.12842 +209.221.129.0/255.255.255.128
24.12843 +209.221.132.0/255.255.255.248
24.12844 +209.221.134.24/255.255.255.248
24.12845 +209.221.134.104/255.255.255.248
24.12846 +209.221.134.136/255.255.255.248
24.12847 +209.221.134.160/255.255.255.248
24.12848 +209.221.142.128/255.255.255.192
24.12849 +209.221.170.0/255.255.255.0
24.12850 +209.221.177.0/255.255.253.0
24.12851 +209.223.86.64/255.255.255.224
24.12852 +209.223.92.224/255.255.255.240
24.12853 +209.223.113.0/255.255.255.0
24.12854 +209.223.161.192/255.255.255.192
24.12855 +209.223.167.0/255.255.255.0
24.12856 +209.223.190.0/255.255.255.192
24.12857 +209.224.51.224/255.255.255.240
24.12858 +209.224.54.32/255.255.255.248
24.12859 +209.224.54.112/255.255.255.240
24.12860 +209.224.54.192/255.255.255.192
24.12861 +209.226.41.128/255.255.255.224
24.12862 +209.226.79.128/255.255.255.224
24.12863 +209.226.81.192/255.255.255.224
24.12864 +209.226.227.32/255.255.255.224
24.12865 +209.232.121.160/255.255.255.224
24.12866 +209.232.174.16/255.255.255.248
24.12867 +209.232.184.32/255.255.255.248
24.12868 +209.232.184.224/255.255.255.248
24.12869 +209.239.174.48/255.255.255.248
24.12870 +209.241.200.0/255.255.255.64
24.12871 +209.242.138.0/255.255.255.0
24.12872 +209.249.118.248/255.255.255.248
24.12873 +209.249.219.0/255.255.255.0
24.12874 +209.250.117.192/255.255.255.224
24.12875 +209.250.121.144/255.255.255.240
24.12876 +209.250.123.32/255.255.255.224
24.12877 +209.250.126.192/255.255.255.224
24.12878 +209.251.192.0/255.255.224.0
24.12879 +209.254.208.96/255.255.255.248
24.12880 +210.0.70.224/255.255.255.248
24.12881 +210.0.73.80/255.255.255.248
24.12882 +210.0.75.96/255.255.255.240
24.12883 +210.4.145.0/255.255.255.128
24.12884 +210.7.69.112/255.255.255.248
24.12885 +210.7.112.16/255.255.255.248
24.12886 +210.7.113.0/255.255.255.192
24.12887 +210.7.128.144/255.255.255.240
24.12888 +210.7.159.216/255.255.255.248
24.12889 +210.8.51.112/255.255.255.248
24.12890 +210.8.148.0/255.255.255.0
24.12891 +210.8.167.0/255.255.255.0
24.12892 +210.8.184.0/255.255.255.192
24.12893 +210.11.26.0/255.255.255.0
24.12894 +210.12.39.128/255.255.255.192
24.12895 +210.12.77.56/255.255.255.248
24.12896 +210.12.225.32/255.255.255.224
24.12897 +210.12.241.8/255.255.255.248
24.12898 +210.15.199.32/255.255.255.224
24.12899 +210.15.214.84/255.255.255.248
24.12900 +210.15.223.48/255.255.255.240
24.12901 +210.17.176.192/255.255.255.240
24.12902 +210.23.104.8/255.255.255.248
24.12903 +210.23.108.128/255.255.255.240
24.12904 +210.23.116.8/255.255.255.248
24.12905 +210.23.230.64/255.255.255.224
24.12906 +210.24.160.216/255.255.255.248
24.12907 +210.50.131.96/255.255.255.248
24.12908 +210.54.216.208/255.255.255.248
24.12909 +210.54.237.24/255.255.255.248
24.12910 +210.54.237.136/255.255.255.248
24.12911 +210.55.175.80/255.255.255.248
24.12912 +210.55.193.16/255.255.255.240
24.12913 +210.55.193.112/255.255.255.240
24.12914 +210.55.197.0/255.255.255.0
24.12915 +210.55.245.88/255.255.255.248
24.12916 +210.55.245.192/255.255.255.240
24.12917 +210.56.0.0/255.255.224.0
24.12918 +210.58.96.32/255.255.255.224
24.12919 +210.58.98.100/255.255.255.248
24.12920 +210.58.102.64/255.255.255.248
24.12921 +210.58.109.160/255.255.255.224
24.12922 +210.62.27.0/255.255.255.0
24.12923 +210.62.42.128/255.255.255.192
24.12924 +210.69.23.128/255.255.255.192
24.12925 +210.69.28.128/255.255.255.128
24.12926 +210.69.29.0/255.255.255.192
24.12927 +210.69.29.64/255.255.255.128
24.12928 +210.69.82.0/255.255.255.0
24.12929 +210.69.105.0/255.255.254.0
24.12930 +210.69.118.0/255.255.255.0
24.12931 +210.69.210.0/255.255.254.0
24.12932 +210.75.36.224/255.255.255.224
24.12933 +210.76.47.0/255.255.255.0
24.12934 +210.77.155.0/255.255.252.0
24.12935 +210.80.79.196/255.255.255.248
24.12936 +210.81.4.32/255.255.255.240
24.12937 +210.81.136.32/255.255.255.240
24.12938 +210.81.192.0/255.255.248.0
24.12939 +210.81.232.0/255.255.252.0
24.12940 +210.82.62.0/255.255.255.224
24.12941 +210.86.13.144/255.255.255.248
24.12942 +210.87.12.48/255.255.255.248
24.12943 +210.88.209.224/255.255.255.248
24.12944 +210.89.128.72/255.255.255.248
24.12945 +210.90.93.0/255.255.255.128
24.12946 +210.90.108.0/255.255.255.192
24.12947 +210.90.155.0/255.255.255.128
24.12948 +210.90.156.128/255.255.255.192
24.12949 +210.90.156.192/255.255.255.192
24.12950 +210.90.157.192/255.255.255.192
24.12951 +210.90.175.160/255.255.255.224
24.12952 +210.90.217.128/255.255.255.128
24.12953 +210.90.232.0/255.255.254.0
24.12954 +210.90.237.240/255.255.255.240
24.12955 +210.92.229.16/255.255.255.240
24.12956 +210.95.50.64/255.255.255.192
24.12957 +210.95.62.192/255.255.255.192
24.12958 +210.95.73.0/255.255.255.128
24.12959 +210.95.76.128/255.255.255.128
24.12960 +210.95.80.0/255.255.255.0
24.12961 +210.95.127.160/255.255.255.224
24.12962 +210.95.155.0/255.255.255.0
24.12963 +210.95.183.0/255.255.255.0
24.12964 +210.95.188.128/255.255.255.192
24.12965 +210.95.232.192/255.255.255.192
24.12966 +210.96.1.128/255.255.255.128
24.12967 +210.96.2.128/255.255.255.128
24.12968 +210.96.20.128/255.255.255.192
24.12969 +210.96.39.0/255.255.255.0
24.12970 +210.96.58.0/255.255.255.128
24.12971 +210.96.75.192/255.255.255.192
24.12972 +210.96.183.224/255.255.255.224
24.12973 +210.97.28.0/255.255.255.0
24.12974 +210.97.100.0/255.255.255.192
24.12975 +210.97.100.128/255.255.255.128
24.12976 +210.98.171.240/255.255.255.240
24.12977 +210.99.69.0/255.255.255.0
24.12978 +210.99.99.0/255.255.255.0
24.12979 +210.100.168.0/255.255.255.0
24.12980 +210.101.146.0/255.255.254.0
24.12981 +210.103.110.0/255.255.255.0
24.12982 +210.103.176.0/255.255.255.0
24.12983 +210.104.16.0/255.255.255.0
24.12984 +210.104.44.0/255.255.255.0
24.12985 +210.104.55.0/255.255.255.192
24.12986 +210.104.58.128/255.255.255.192
24.12987 +210.104.118.0/255.255.254.0
24.12988 +210.104.121.128/255.255.255.128
24.12989 +210.104.196.64/255.255.255.192
24.12990 +210.104.242.128/255.255.255.128
24.12991 +210.104.251.128/255.255.255.128
24.12992 +210.106.102.224/255.255.255.224
24.12993 +210.106.243.160/255.255.255.224
24.12994 +210.111.138.128/255.255.255.192
24.12995 +210.124.172.64/255.255.255.192
24.12996 +210.124.183.128/255.255.255.192
24.12997 +210.124.214.160/255.255.255.224
24.12998 +210.127.239.0/255.255.255.0
24.12999 +210.137.20.0/255.255.254.0
24.13000 +210.139.128.0/255.255.128.0
24.13001 +210.160.94.192/255.255.255.248
24.13002 +210.169.235.216/255.255.255.248
24.13003 +210.172.0.0/255.255.224.0
24.13004 +210.175.240.0/255.255.240.0
24.13005 +210.176.24.152/255.255.255.248
24.13006 +210.176.53.128/255.255.255.192
24.13007 +210.176.106.128/255.255.255.128
24.13008 +210.176.162.248/255.255.255.248
24.13009 +210.176.186.0/255.255.255.248
24.13010 +210.176.201.32/255.255.255.224
24.13011 +210.176.209.128/255.255.255.192
24.13012 +210.177.15.64/255.255.255.224
24.13013 +210.177.16.144/255.255.255.240
24.13014 +210.177.56.48/255.255.255.240
24.13015 +210.177.68.0/255.255.255.224
24.13016 +210.177.72.224/255.255.255.224
24.13017 +210.177.96.224/255.255.255.224
24.13018 +210.177.100.240/255.255.255.240
24.13019 +210.177.133.200/255.255.255.248
24.13020 +210.177.140.192/255.255.255.240
24.13021 +210.177.141.0/255.255.255.240
24.13022 +210.177.154.144/255.255.255.240
24.13023 +210.177.164.48/255.255.255.248
24.13024 +210.177.170.112/255.255.255.240
24.13025 +210.177.170.144/255.255.255.240
24.13026 +210.177.170.192/255.255.255.240
24.13027 +210.177.170.224/255.255.255.224
24.13028 +210.178.122.192/255.255.255.192
24.13029 +210.179.127.0/255.255.255.0
24.13030 +210.179.140.0/255.255.254.0
24.13031 +210.179.164.96/255.255.255.224
24.13032 +210.179.188.192/255.255.255.192
24.13033 +210.179.194.64/255.255.255.224
24.13034 +210.179.251.0/255.255.255.192
24.13035 +210.182.53.0/255.255.255.192
24.13036 +210.182.123.192/255.255.255.192
24.13037 +210.182.162.64/255.255.255.192
24.13038 +210.187.70.128/255.255.255.192
24.13039 +210.193.225.224/255.255.255.249
24.13040 +210.196.108.216/255.255.255.248
24.13041 +210.201.34.0/255.255.255.192
24.13042 +210.201.47.24/255.255.255.248
24.13043 +210.202.18.32/255.255.255.240
24.13044 +210.202.54.0/255.255.255.224
24.13045 +210.202.113.248/255.255.255.248
24.13046 +210.202.116.200/255.255.255.240
24.13047 +210.202.191.248/255.255.255.248
24.13048 +210.204.2.0/255.255.255.128
24.13049 +210.204.62.0/255.255.255.128
24.13050 +210.204.80.0/255.255.255.224
24.13051 +210.204.82.128/255.255.255.240
24.13052 +210.204.82.144/255.255.255.208
24.13053 +210.204.99.128/255.255.255.128
24.13054 +210.204.126.0/255.255.255.96
24.13055 +210.204.177.224/255.255.255.224
24.13056 +210.204.204.0/255.255.255.0
24.13057 +210.204.234.128/255.255.255.128
24.13058 +210.206.30.192/255.255.255.192
24.13059 +210.206.48.160/255.255.255.224
24.13060 +210.208.43.128/255.255.255.128
24.13061 +210.208.52.0/255.255.255.128
24.13062 +210.208.54.0/255.255.255.128
24.13063 +210.208.54.128/255.255.255.128
24.13064 +210.208.55.0/255.255.255.128
24.13065 +210.208.58.128/255.255.255.128
24.13066 +210.208.80.0/255.255.240.0
24.13067 +210.209.55.0/255.255.255.0
24.13068 +210.210.78.20/255.255.255.244
24.13069 +210.212.204.160/255.255.255.248
24.13070 +210.212.216.160/255.255.255.248
24.13071 +210.212.216.176/255.255.255.248
24.13072 +210.219.222.192/255.255.255.192
24.13073 +210.245.26.144/255.255.255.240
24.13074 +210.251.240.0/255.255.240.0
24.13075 +211.9.32.0/255.255.228.108
24.13076 +211.9.59.150/255.255.251.150
24.13077 +211.26.53.20/255.255.255.248
24.13078 +211.32.165.64/255.255.255.192
24.13079 +211.32.165.192/255.255.255.192
24.13080 +211.34.80.0/255.255.254.0
24.13081 +211.34.88.224/255.255.255.224
24.13082 +211.34.107.224/255.255.255.224
24.13083 +211.34.108.0/255.255.254.0
24.13084 +211.34.192.160/255.255.255.160
24.13085 +211.36.235.192/255.255.255.224
24.13086 +211.36.243.128/255.255.255.192
24.13087 +211.40.36.64/255.255.255.192
24.13088 +211.40.37.128/255.255.255.192
24.13089 +211.41.54.64/255.255.255.192
24.13090 +211.41.165.160/255.255.255.224
24.13091 +211.42.28.192/255.255.255.192
24.13092 +211.42.46.192/255.255.255.192
24.13093 +211.42.230.0/255.255.255.192
24.13094 +211.42.233.96/255.255.255.224
24.13095 +211.43.235.192/255.255.255.192
24.13096 +211.44.215.0/255.255.255.192
24.13097 +211.45.196.128/255.255.255.192
24.13098 +211.45.197.160/255.255.255.224
24.13099 +211.45.199.160/255.255.255.224
24.13100 +211.45.203.32/255.255.255.224
24.13101 +211.46.15.192/255.255.255.192
24.13102 +211.46.81.0/255.255.255.0
24.13103 +211.46.150.0/255.255.255.192
24.13104 +211.46.197.192/255.255.255.192
24.13105 +211.47.186.128/255.255.255.128
24.13106 +211.47.227.112/255.255.255.240
24.13107 +211.50.37.192/255.255.255.224
24.13108 +211.50.74.192/255.255.255.240
24.13109 +211.53.53.0/255.255.255.192
24.13110 +211.53.66.240/255.255.255.240
24.13111 +211.53.91.224/255.255.255.224
24.13112 +211.60.47.64/255.255.255.192
24.13113 +211.60.65.128/255.255.255.192
24.13114 +211.60.73.128/255.255.255.224
24.13115 +211.60.75.96/255.255.255.224
24.13116 +211.60.128.128/255.255.255.192
24.13117 +211.63.47.128/255.255.255.192
24.13118 +211.76.176.0/255.255.240.0
24.13119 +211.91.80.32/255.255.255.248
24.13120 +211.91.149.80/255.255.255.248
24.13121 +211.93.53.16/255.255.255.240
24.13122 +211.93.108.80/255.255.255.240
24.13123 +211.93.108.128/255.255.255.240
24.13124 +211.96.12.40/255.255.255.248
24.13125 +211.96.197.96/255.255.255.248
24.13126 +211.98.29.0/255.255.255.224
24.13127 +211.98.30.112/255.255.255.240
24.13128 +211.98.49.32/255.255.255.224
24.13129 +211.98.51.0/255.255.255.192
24.13130 +211.98.54.128/255.255.255.224
24.13131 +211.98.72.128/255.255.255.224
24.13132 +211.98.75.192/255.255.255.224
24.13133 +211.98.104.160/255.255.255.224
24.13134 +211.98.120.128/255.255.255.240
24.13135 +211.104.237.96/255.255.255.224
24.13136 +211.111.117.0/255.255.255.0
24.13137 +211.113.149.0/255.255.255.192
24.13138 +211.114.72.0/255.255.255.0
24.13139 +211.114.101.0/255.255.255.0
24.13140 +211.116.6.224/255.255.255.240
24.13141 +211.116.227.192/255.255.255.224
24.13142 +211.116.250.192/255.255.255.224
24.13143 +211.118.13.0/255.255.255.128
24.13144 +211.118.14.128/255.255.255.192
24.13145 +211.118.38.192/255.255.255.224
24.13146 +211.118.172.128/255.255.255.192
24.13147 +211.118.175.0/255.255.255.192
24.13148 +211.132.7.224/255.255.255.224
24.13149 +211.138.142.64/255.255.255.248
24.13150 +211.138.143.8/255.255.255.248
24.13151 +211.138.151.208/255.255.255.248
24.13152 +211.139.167.144/255.255.255.248
24.13153 +211.140.103.16/255.255.255.248
24.13154 +211.140.103.96/255.255.255.248
24.13155 +211.141.115.8/255.255.255.248
24.13156 +211.141.126.128/255.255.255.192
24.13157 +211.141.130.215/255.255.255.240
24.13158 +211.141.162.152/255.255.255.248
24.13159 +211.141.228.240/255.255.255.248
24.13160 +211.148.160.0/255.255.224.0
24.13161 +211.155.63.0/255.255.255.0
24.13162 +211.157.127.0/255.255.255.240
24.13163 +211.168.74.64/255.255.255.192
24.13164 +211.168.235.128/255.255.255.192
24.13165 +211.169.93.0/255.255.255.192
24.13166 +211.170.78.64/255.255.255.192
24.13167 +211.170.98.64/255.255.255.192
24.13168 +211.170.208.192/255.255.255.192
24.13169 +211.170.209.128/255.255.255.192
24.13170 +211.171.179.128/255.255.255.192
24.13171 +211.180.159.80/255.255.255.240
24.13172 +211.181.82.0/255.255.255.0
24.13173 +211.181.93.128/255.255.255.192
24.13174 +211.181.101.128/255.255.255.128
24.13175 +211.184.18.96/255.255.255.224
24.13176 +211.184.50.0/255.255.255.0
24.13177 +211.200.5.0/255.255.255.192
24.13178 +211.204.76.0/255.255.255.0
24.13179 +211.210.105.0/255.255.255.0
24.13180 +211.214.89.0/255.255.255.0
24.13181 +211.222.11.224/255.255.255.224
24.13182 +211.232.108.32/255.255.255.224
24.13183 +211.241.205.160/255.255.255.224
24.13184 +211.250.74.128/255.255.255.224
24.13185 +211.250.107.96/255.255.255.240
24.13186 +211.252.124.192/255.255.255.248
24.13187 +211.252.178.192/255.255.255.224
24.13188 +211.252.178.224/255.255.255.224
24.13189 +212.0.119.160/255.255.255.248
24.13190 +212.0.145.216/255.255.255.248
24.13191 +212.0.245.192/255.255.255.224
24.13192 +212.1.32.160/255.255.255.224
24.13193 +212.1.40.0/255.255.255.128
24.13194 +212.1.42.24/255.255.255.248
24.13195 +212.1.49.0/255.255.255.224
24.13196 +212.4.13.192/255.255.255.224
24.13197 +212.6.175.0/255.255.255.192
24.13198 +212.9.178.128/255.255.255.240
24.13199 +212.9.184.160/255.255.255.240
24.13200 +212.10.15.208/255.255.255.248
24.13201 +212.11.6.40/255.255.255.248
24.13202 +212.11.25.120/255.255.255.248
24.13203 +212.11.28.128/255.255.255.248
24.13204 +212.11.29.32/255.255.255.224
24.13205 +212.11.40.128/255.255.255.224
24.13206 +212.11.45.240/255.255.255.240
24.13207 +212.11.51.224/255.255.255.224
24.13208 +212.12.60.0/255.255.255.248
24.13209 +212.13.247.192/255.255.255.224
24.13210 +212.14.65.0/255.255.255.0
24.13211 +212.14.71.240/255.255.255.245
24.13212 +212.14.82.144/255.255.255.248
24.13213 +212.14.84.208/255.255.255.240
24.13214 +212.16.239.0/255.255.255.224
24.13215 +212.17.232.192/255.255.255.192
24.13216 +212.18.232.32/255.255.255.240
24.13217 +212.19.34.16/255.255.255.248
24.13218 +212.20.129.56/255.255.255.248
24.13219 +212.20.246.224/255.255.255.240
24.13220 +212.21.2.240/255.255.255.248
24.13221 +212.23.12.24/255.255.255.248
24.13222 +212.23.22.88/255.255.255.248
24.13223 +212.23.25.56/255.255.255.248
24.13224 +212.23.29.32/255.255.255.248
24.13225 +212.23.61.0/255.255.255.128
24.13226 +212.23.129.192/255.255.255.248
24.13227 +212.23.129.232/255.255.255.248
24.13228 +212.23.137.64/255.255.255.248
24.13229 +212.23.137.232/255.255.255.248
24.13230 +212.23.139.248/255.255.255.248
24.13231 +212.23.155.128/255.255.255.224
24.13232 +212.23.156.24/255.255.255.248
24.13233 +212.23.156.48/255.255.255.248
24.13234 +212.23.228.88/255.255.255.248
24.13235 +212.23.235.160/255.255.255.240
24.13236 +212.23.245.16/255.255.255.240
24.13237 +212.23.245.40/255.255.255.248
24.13238 +212.24.34.64/255.255.255.224
24.13239 +212.24.144.64/255.255.255.192
24.13240 +212.24.154.80/255.255.255.248
24.13241 +212.24.188.48/255.255.255.248
24.13242 +212.27.33.0/255.255.255.0
24.13243 +212.27.100.80/255.255.255.240
24.13244 +212.27.168.128/255.255.255.224
24.13245 +212.27.191.112/255.255.255.240
24.13246 +212.28.207.144/255.255.255.240
24.13247 +212.28.215.64/255.255.255.192
24.13248 +212.30.92.160/255.255.255.224
24.13249 +212.30.199.40/255.255.255.248
24.13250 +212.31.196.232/255.255.255.248
24.13251 +212.31.237.16/255.255.255.248
24.13252 +212.35.100.0/255.255.255.192
24.13253 +212.35.100.128/255.255.255.192
24.13254 +212.35.101.216/255.255.255.248
24.13255 +212.35.105.176/255.255.255.248
24.13256 +212.35.133.64/255.255.255.192
24.13257 +212.35.236.208/255.255.255.240
24.13258 +212.35.243.240/255.255.255.248
24.13259 +212.36.147.192/255.255.255.224
24.13260 +212.37.45.0/255.255.255.240
24.13261 +212.38.130.48/255.255.255.240
24.13262 +212.41.237.200/255.255.255.240
24.13263 +212.41.237.240/255.255.255.248
24.13264 +212.41.247.40/255.255.255.248
24.13265 +212.42.10.32/255.255.255.240
24.13266 +212.42.77.48/255.255.255.248
24.13267 +212.42.86.128/255.255.255.192
24.13268 +212.42.227.0/255.255.255.224
24.13269 +212.43.72.192/255.255.255.244
24.13270 +212.44.135.0/255.255.255.128
24.13271 +212.44.166.224/255.255.255.224
24.13272 +212.44.228.0/255.255.255.0
24.13273 +212.44.229.0/255.255.255.0
24.13274 +212.44.233.0/255.255.255.63
24.13275 +212.47.174.64/255.255.255.240
24.13276 +212.47.190.160/255.255.255.240
24.13277 +212.48.143.136/255.255.255.248
24.13278 +212.49.165.0/255.255.255.0
24.13279 +212.49.185.0/255.255.255.0
24.13280 +212.50.185.0/255.255.255.224
24.13281 +212.52.133.0/255.255.255.128
24.13282 +212.54.72.224/255.255.255.240
24.13283 +212.55.156.0/255.255.255.0
24.13284 +212.55.208.64/255.255.255.248
24.13285 +212.55.212.248/255.255.255.248
24.13286 +212.56.68.48/255.255.255.240
24.13287 +212.56.97.152/255.255.255.248
24.13288 +212.56.162.64/255.255.255.192
24.13289 +212.57.133.0/255.255.255.0
24.13290 +212.57.179.0/255.255.255.0
24.13291 +212.60.12.128/255.255.255.240
24.13292 +212.60.212.96/255.255.255.248
24.13293 +212.60.216.0/255.255.255.128
24.13294 +212.60.226.40/255.255.255.248
24.13295 +212.61.44.144/255.255.255.248
24.13296 +212.61.57.176/255.255.255.240
24.13297 +212.61.72.32/255.255.255.248
24.13298 +212.61.75.96/255.255.255.248
24.13299 +212.61.255.24/255.255.255.248
24.13300 +212.62.7.0/255.255.255.128
24.13301 +212.62.14.80/255.255.255.240
24.13302 +212.62.21.192/255.255.255.240
24.13303 +212.62.26.64/255.255.255.224
24.13304 +212.62.26.240/255.255.255.240
24.13305 +212.62.229.224/255.255.255.240
24.13306 +212.62.253.136/255.255.255.248
24.13307 +212.63.34.232/255.255.255.248
24.13308 +212.63.77.64/255.255.255.240
24.13309 +212.63.80.72/255.255.255.248
24.13310 +212.63.80.88/255.255.255.248
24.13311 +212.63.86.0/255.255.255.248
24.13312 +212.64.209.16/255.255.255.248
24.13313 +212.64.212.208/255.255.255.248
24.13314 +212.65.219.32/255.255.255.248
24.13315 +212.66.101.32/255.255.255.240
24.13316 +212.66.101.48/255.255.255.240
24.13317 +212.66.101.64/255.255.255.240
24.13318 +212.67.227.48/255.255.255.248
24.13319 +212.67.239.104/255.255.255.248
24.13320 +212.67.239.200/255.255.255.248
24.13321 +212.69.96.0/255.255.255.224
24.13322 +212.71.72.128/255.255.255.224
24.13323 +212.72.39.32/255.255.255.224
24.13324 +212.73.134.88/255.255.255.248
24.13325 +212.73.134.192/255.255.255.240
24.13326 +212.74.14.0/255.255.255.128
24.13327 +212.74.15.128/255.255.255.240
24.13328 +212.74.136.0/255.255.255.0
24.13329 +212.74.152.64/255.255.255.248
24.13330 +212.74.160.96/255.255.255.248
24.13331 +212.75.37.8/255.255.255.240
24.13332 +212.75.86.160/255.255.255.240
24.13333 +212.77.68.112/255.255.255.240
24.13334 +212.77.168.64/255.255.255.192
24.13335 +212.78.97.192/255.255.255.224
24.13336 +212.78.161.112/255.255.255.240
24.13337 +212.78.172.0/255.255.255.0
24.13338 +212.78.179.240/255.255.255.240
24.13339 +212.79.15.48/255.255.255.248
24.13340 +212.79.56.128/255.255.255.196
24.13341 +212.80.166.184/255.255.255.248
24.13342 +212.80.196.248/255.255.255.248
24.13343 +212.81.78.200/255.255.255.248
24.13344 +212.81.100.192/255.255.255.192
24.13345 +212.81.122.144/255.255.255.240
24.13346 +212.82.172.128/255.255.255.192
24.13347 +212.82.216.248/255.255.255.248
24.13348 +212.83.216.240/255.255.255.248
24.13349 +212.84.243.32/255.255.255.224
24.13350 +212.85.4.176/255.255.255.240
24.13351 +212.86.210.192/255.255.255.248
24.13352 +212.87.65.8/255.255.255.248
24.13353 +212.87.66.96/255.255.255.224
24.13354 +212.87.72.160/255.255.255.240
24.13355 +212.87.84.72/255.255.255.248
24.13356 +212.87.85.160/255.255.255.240
24.13357 +212.88.41.0/255.255.255.0
24.13358 +212.88.58.0/255.255.255.240
24.13359 +212.88.146.0/255.255.254.0
24.13360 +212.90.197.128/255.255.255.240
24.13361 +212.90.204.216/255.255.255.248
24.13362 +212.91.209.32/255.255.255.224
24.13363 +212.91.227.216/255.255.255.248
24.13364 +212.94.128.0/255.255.224.0
24.13365 +212.94.224.32/255.255.255.224
24.13366 +212.94.231.0/255.255.255.240
24.13367 +212.94.239.16/255.255.255.240
24.13368 +212.95.7.16/255.255.255.240
24.13369 +212.95.68.64/255.255.255.248
24.13370 +212.95.117.128/255.255.255.192
24.13371 +212.95.126.192/255.255.255.192
24.13372 +212.98.233.192/255.255.255.248
24.13373 +212.98.253.0/255.255.255.0
24.13374 +212.99.136.192/255.255.255.248
24.13375 +212.99.155.64/255.255.255.248
24.13376 +212.100.1.0/255.255.248.0
24.13377 +212.100.9.0/255.255.248.0
24.13378 +212.100.17.0/255.255.248.0
24.13379 +212.100.228.248/255.255.255.248
24.13380 +212.100.233.104/255.255.255.240
24.13381 +212.103.106.128/255.255.255.240
24.13382 +212.103.155.128/255.255.255.240
24.13383 +212.103.236.56/255.255.255.248
24.13384 +212.103.251.128/255.255.255.192
24.13385 +212.104.156.208/255.255.255.248
24.13386 +212.104.202.0/255.255.255.192
24.13387 +212.105.97.160/255.255.255.240
24.13388 +212.107.75.240/255.255.255.240
24.13389 +212.107.102.104/255.255.255.248
24.13390 +212.109.53.120/255.255.255.248
24.13391 +212.109.57.192/255.255.255.248
24.13392 +212.109.62.144/255.255.255.248
24.13393 +212.109.62.216/255.255.255.248
24.13394 +212.110.6.208/255.255.255.248
24.13395 +212.110.39.128/255.255.255.192
24.13396 +212.110.101.0/255.255.255.128
24.13397 +212.110.103.128/255.255.255.192
24.13398 +212.110.123.64/255.255.255.224
24.13399 +212.111.49.0/255.255.255.192
24.13400 +212.111.240.0/255.255.255.128
24.13401 +212.113.194.128/255.255.255.248
24.13402 +212.114.131.32/255.255.255.224
24.13403 +212.114.204.0/255.255.255.240
24.13404 +212.115.183.96/255.255.255.240
24.13405 +212.117.137.32/255.255.255.224
24.13406 +212.117.242.0/255.255.255.224
24.13407 +212.118.250.112/255.255.255.240
24.13408 +212.119.1.96/255.255.255.240
24.13409 +212.119.7.72/255.255.255.248
24.13410 +212.119.7.216/255.255.255.232
24.13411 +212.119.11.200/255.255.255.248
24.13412 +212.120.150.128/255.255.255.128
24.13413 +212.121.135.224/255.255.255.224
24.13414 +212.121.137.100/255.255.255.248
24.13415 +212.122.233.0/255.255.255.224
24.13416 +212.123.28.0/255.255.255.0
24.13417 +212.123.108.0/255.255.254.0
24.13418 +212.123.200.216/255.255.255.248
24.13419 +212.123.201.192/255.255.255.224
24.13420 +212.123.217.64/255.255.255.224
24.13421 +212.123.224.160/255.255.255.224
24.13422 +212.123.224.240/255.255.255.248
24.13423 +212.123.227.64/255.255.255.248
24.13424 +212.123.233.224/255.255.255.224
24.13425 +212.124.43.0/255.255.255.215
24.13426 +212.124.133.64/255.255.255.240
24.13427 +212.124.226.48/255.255.255.240
24.13428 +212.125.38.48/255.255.255.240
24.13429 +212.126.22.0/255.255.255.128
24.13430 +212.126.164.128/255.255.255.248
24.13431 +212.126.220.48/255.255.255.240
24.13432 +212.127.18.96/255.255.255.248
24.13433 +212.127.20.0/255.255.255.192
24.13434 +212.127.21.0/255.255.255.0
24.13435 +212.129.233.224/255.255.255.248
24.13436 +212.130.55.96/255.255.255.240
24.13437 +212.130.65.120/255.255.255.248
24.13438 +212.131.141.32/255.255.255.224
24.13439 +212.131.150.0/255.255.255.224
24.13440 +212.131.165.192/255.255.255.192
24.13441 +212.131.177.64/255.255.255.224
24.13442 +212.131.184.192/255.255.255.192
24.13443 +212.131.187.208/255.255.255.240
24.13444 +212.131.188.112/255.255.255.240
24.13445 +212.131.201.8/255.255.255.248
24.13446 +212.131.201.32/255.255.255.224
24.13447 +212.131.215.160/255.255.255.224
24.13448 +212.131.224.64/255.255.255.192
24.13449 +212.131.225.0/255.255.255.128
24.13450 +212.131.228.0/255.255.255.128
24.13451 +212.131.231.64/255.255.255.192
24.13452 +212.131.240.32/255.255.255.224
24.13453 +212.131.253.168/255.255.255.248
24.13454 +212.133.17.0/255.255.255.0
24.13455 +212.133.20.192/255.255.255.224
24.13456 +212.133.30.64/255.255.255.192
24.13457 +212.133.30.192/255.255.255.192
24.13458 +212.133.53.192/255.255.255.224
24.13459 +212.134.53.96/255.255.255.224
24.13460 +212.134.90.240/255.255.255.248
24.13461 +212.134.113.0/255.255.255.192
24.13462 +212.134.114.160/255.255.255.248
24.13463 +212.134.144.32/255.255.255.224
24.13464 +212.134.174.0/255.255.255.192
24.13465 +212.134.191.0/255.255.255.0
24.13466 +212.134.195.64/255.255.255.240
24.13467 +212.134.196.0/255.255.255.0
24.13468 +212.134.204.0/255.255.255.0
24.13469 +212.134.214.16/255.255.255.240
24.13470 +212.135.70.0/255.255.255.192
24.13471 +212.135.73.192/255.255.255.192
24.13472 +212.135.75.64/255.255.255.224
24.13473 +212.135.82.192/255.255.255.192
24.13474 +212.135.112.16/255.255.255.240
24.13475 +212.135.116.64/255.255.255.192
24.13476 +212.135.133.240/255.255.255.248
24.13477 +212.135.137.192/255.255.255.224
24.13478 +212.135.140.32/255.255.255.224
24.13479 +212.135.141.32/255.255.255.224
24.13480 +212.135.164.184/255.255.255.248
24.13481 +212.135.166.208/255.255.255.240
24.13482 +212.135.177.112/255.255.255.240
24.13483 +212.135.184.160/255.255.255.240
24.13484 +212.135.184.208/255.255.255.248
24.13485 +212.135.187.216/255.255.255.248
24.13486 +212.135.190.136/255.255.255.248
24.13487 +212.135.197.32/255.255.255.240
24.13488 +212.135.197.88/255.255.255.248
24.13489 +212.135.212.144/255.255.255.240
24.13490 +212.135.215.0/255.255.255.240
24.13491 +212.135.216.208/255.255.255.240
24.13492 +212.135.226.208/255.255.255.240
24.13493 +212.135.232.96/255.255.255.240
24.13494 +212.136.9.0/255.255.255.0
24.13495 +212.136.31.0/255.255.255.0
24.13496 +212.136.193.200/255.255.255.248
24.13497 +212.136.193.216/255.255.255.248
24.13498 +212.136.198.64/255.255.255.248
24.13499 +212.136.208.72/255.255.255.248
24.13500 +212.136.211.0/255.255.255.248
24.13501 +212.136.219.112/255.255.255.248
24.13502 +212.136.227.240/255.255.255.248
24.13503 +212.137.16.56/255.255.255.248
24.13504 +212.137.29.0/255.255.255.248
24.13505 +212.137.52.176/255.255.255.248
24.13506 +212.137.52.184/255.255.255.248
24.13507 +212.137.74.104/255.255.255.248
24.13508 +212.137.74.128/255.255.255.248
24.13509 +212.137.74.136/255.255.255.248
24.13510 +212.137.74.144/255.255.255.248
24.13511 +212.141.188.192/255.255.255.224
24.13512 +212.141.224.64/255.255.255.224
24.13513 +212.142.48.200/255.255.255.248
24.13514 +212.143.21.184/255.255.255.248
24.13515 +212.143.28.128/255.255.255.248
24.13516 +212.143.153.0/255.255.255.0
24.13517 +212.144.119.0/255.255.255.0
24.13518 +212.147.70.64/255.255.255.240
24.13519 +212.150.69.64/255.255.255.224
24.13520 +212.150.184.0/255.255.253.0
24.13521 +212.152.174.0/255.255.255.128
24.13522 +212.152.174.160/255.255.255.240
24.13523 +212.152.254.216/255.255.255.248
24.13524 +212.153.69.0/255.255.255.0
24.13525 +212.153.175.96/255.255.255.240
24.13526 +212.153.190.40/255.255.255.248
24.13527 +212.153.238.128/255.255.255.128
24.13528 +212.153.241.16/255.255.255.248
24.13529 +212.154.162.160/255.255.255.248
24.13530 +212.155.116.128/255.255.255.192
24.13531 +212.155.192.64/255.255.255.224
24.13532 +212.155.219.144/255.255.255.248
24.13533 +212.155.229.0/255.255.255.0
24.13534 +212.155.230.224/255.255.255.224
24.13535 +212.157.110.32/255.255.255.224
24.13536 +212.157.152.32/255.255.255.224
24.13537 +212.157.158.32/255.255.255.224
24.13538 +212.157.168.224/255.255.255.248
24.13539 +212.157.200.128/255.255.255.128
24.13540 +212.158.12.0/255.255.255.0
24.13541 +212.158.26.160/255.255.255.240
24.13542 +212.158.91.192/255.255.255.224
24.13543 +212.158.97.32/255.255.255.224
24.13544 +212.158.117.192/255.255.255.224
24.13545 +212.158.199.176/255.255.255.248
24.13546 +212.158.209.64/255.255.255.248
24.13547 +212.158.214.176/255.255.255.248
24.13548 +212.158.216.48/255.255.255.240
24.13549 +212.158.219.24/255.255.255.248
24.13550 +212.158.228.136/255.255.255.248
24.13551 +212.158.230.232/255.255.255.248
24.13552 +212.158.252.24/255.255.255.248
24.13553 +212.160.240.64/255.255.255.224
24.13554 +212.161.6.0/255.255.255.0
24.13555 +212.161.60.0/255.255.255.0
24.13556 +212.161.81.144/255.255.255.240
24.13557 +212.161.82.0/255.255.254.0
24.13558 +212.162.64.0/255.255.192.0
24.13559 +212.162.209.128/255.255.255.128
24.13560 +212.162.212.0/255.255.255.0
24.13561 +212.162.234.128/255.255.255.192
24.13562 +212.162.236.64/255.255.255.192
24.13563 +212.162.240.0/255.255.240.0
24.13564 +212.163.213.32/255.255.255.224
24.13565 +212.163.215.224/255.255.255.240
24.13566 +212.166.27.176/255.255.255.240
24.13567 +212.170.234.0/255.255.255.192
24.13568 +212.174.43.0/255.255.255.192
24.13569 +212.176.62.224/255.255.255.240
24.13570 +212.177.1.224/255.255.255.240
24.13571 +212.177.2.240/255.255.255.240
24.13572 +212.177.7.240/255.255.255.248
24.13573 +212.177.60.88/255.255.255.248
24.13574 +212.177.104.0/255.255.255.0
24.13575 +212.177.105.32/255.255.255.248
24.13576 +212.177.105.48/255.255.255.240
24.13577 +212.177.108.112/255.255.255.248
24.13578 +212.177.113.176/255.255.255.240
24.13579 +212.177.120.240/255.255.255.240
24.13580 +212.177.126.0/255.255.254.0
24.13581 +212.177.132.32/255.255.255.248
24.13582 +212.177.134.80/255.255.255.248
24.13583 +212.177.138.32/255.255.255.240
24.13584 +212.177.139.224/255.255.255.248
24.13585 +212.177.140.96/255.255.255.240
24.13586 +212.177.157.40/255.255.255.248
24.13587 +212.179.16.96/255.255.255.248
24.13588 +212.180.18.248/255.255.255.248
24.13589 +212.180.26.104/255.255.255.248
24.13590 +212.180.37.48/255.255.255.248
24.13591 +212.180.45.240/255.255.255.240
24.13592 +212.180.65.104/255.255.255.248
24.13593 +212.180.90.0/255.255.255.240
24.13594 +212.180.91.128/255.255.255.248
24.13595 +212.180.123.80/255.255.255.240
24.13596 +212.181.14.8/255.255.255.248
24.13597 +212.182.90.0/255.255.255.128
24.13598 +212.182.114.48/255.255.255.240
24.13599 +212.184.122.216/255.255.255.248
24.13600 +212.184.191.224/255.255.255.240
24.13601 +212.184.199.144/255.255.255.208
24.13602 +212.184.215.152/255.255.255.248
24.13603 +212.185.43.64/255.255.255.248
24.13604 +212.185.108.0/255.255.255.248
24.13605 +212.185.120.48/255.255.255.248
24.13606 +212.185.170.40/255.255.255.248
24.13607 +212.185.171.0/255.255.255.0
24.13608 +212.187.188.128/255.255.255.224
24.13609 +212.188.38.0/255.255.255.0
24.13610 +212.190.0.0/255.255.0.0
24.13611 +212.197.204.0/255.255.255.240
24.13612 +212.197.218.48/255.255.255.240
24.13613 +212.199.58.0/255.255.255.128
24.13614 +212.199.66.96/255.255.255.192
24.13615 +212.199.67.192/255.255.255.192
24.13616 +212.199.91.0/255.255.244.0
24.13617 +212.202.1.0/255.255.255.0
24.13618 +212.202.97.0/255.255.255.224
24.13619 +212.202.99.96/255.255.255.248
24.13620 +212.202.109.104/255.255.255.248
24.13621 +212.202.139.152/255.255.255.248
24.13622 +212.202.153.88/255.255.255.248
24.13623 +212.202.158.160/255.255.255.248
24.13624 +212.202.161.192/255.255.255.248
24.13625 +212.202.162.200/255.255.255.248
24.13626 +212.202.224.128/255.255.255.224
24.13627 +212.202.228.40/255.255.255.248
24.13628 +212.202.236.136/255.255.255.248
24.13629 +212.202.238.56/255.255.255.248
24.13630 +212.202.247.104/255.255.255.248
24.13631 +212.202.252.120/255.255.255.248
24.13632 +212.203.70.0/255.255.255.0
24.13633 +212.204.120.16/255.255.255.240
24.13634 +212.204.249.81/255.255.255.236
24.13635 +212.204.249.101/255.255.255.246
24.13636 +212.204.249.111/255.255.255.236
24.13637 +212.204.252.21/255.255.255.246
24.13638 +212.206.208.56/255.255.255.248
24.13639 +212.206.237.232/255.255.255.248
24.13640 +212.208.102.0/255.255.255.128
24.13641 +212.208.157.0/255.255.255.128
24.13642 +212.208.158.16/255.255.255.240
24.13643 +212.208.163.208/255.255.255.240
24.13644 +212.208.183.224/255.255.255.240
24.13645 +212.209.3.64/255.255.255.240
24.13646 +212.209.9.176/255.255.255.240
24.13647 +212.209.14.0/255.255.255.224
24.13648 +212.209.39.192/255.255.255.224
24.13649 +212.209.61.128/255.255.255.240
24.13650 +212.209.106.0/255.255.255.240
24.13651 +212.209.111.144/255.255.255.240
24.13652 +212.209.133.0/255.255.255.240
24.13653 +212.209.174.16/255.255.255.240
24.13654 +212.209.183.0/255.255.255.0
24.13655 +212.209.195.144/255.255.255.240
24.13656 +212.210.12.88/255.255.255.248
24.13657 +212.210.14.128/255.255.255.192
24.13658 +212.210.42.128/255.255.255.128
24.13659 +212.210.46.192/255.255.255.224
24.13660 +212.210.47.0/255.255.255.128
24.13661 +212.210.47.160/255.255.255.224
24.13662 +212.210.52.160/255.255.255.224
24.13663 +212.210.54.224/255.255.255.224
24.13664 +212.210.57.128/255.255.255.224
24.13665 +212.210.77.192/255.255.255.224
24.13666 +212.210.82.32/255.255.255.224
24.13667 +212.210.83.192/255.255.255.192
24.13668 +212.210.89.0/255.255.255.0
24.13669 +212.210.110.192/255.255.255.224
24.13670 +212.210.110.224/255.255.255.240
24.13671 +212.210.111.0/255.255.255.224
24.13672 +212.210.133.160/255.255.255.224
24.13673 +212.210.147.0/255.255.255.0
24.13674 +212.210.148.192/255.255.255.224
24.13675 +212.210.153.0/255.255.255.0
24.13676 +212.210.154.160/255.255.255.248
24.13677 +212.210.154.192/255.255.255.224
24.13678 +212.210.158.192/255.255.255.224
24.13679 +212.210.167.112/255.255.255.240
24.13680 +212.210.167.160/255.255.255.248
24.13681 +212.210.178.96/255.255.255.224
24.13682 +212.210.187.32/255.255.255.224
24.13683 +212.210.191.224/255.255.255.224
24.13684 +212.210.200.0/255.255.255.0
24.13685 +212.210.217.128/255.255.255.192
24.13686 +212.210.225.0/255.255.255.128
24.13687 +212.210.235.64/255.255.255.224
24.13688 +212.210.235.128/255.255.255.192
24.13689 +212.210.235.192/255.255.255.224
24.13690 +212.210.242.208/255.255.255.240
24.13691 +212.212.160.192/255.255.255.192
24.13692 +212.212.163.112/255.255.255.240
24.13693 +212.214.1.48/255.255.255.240
24.13694 +212.214.85.208/255.255.255.248
24.13695 +212.214.117.144/255.255.255.240
24.13696 +212.214.191.128/255.255.255.192
24.13697 +212.215.2.112/255.255.255.240
24.13698 +212.215.3.64/255.255.255.240
24.13699 +212.217.35.16/255.255.255.240
24.13700 +212.217.74.192/255.255.255.240
24.13701 +212.219.59.0/255.255.255.224
24.13702 +212.219.118.192/255.255.255.192
24.13703 +212.221.0.0/255.255.128.0
24.13704 +212.222.11.224/255.255.255.224
24.13705 +212.222.37.192/255.255.255.192
24.13706 +212.222.40.32/255.255.255.224
24.13707 +212.222.40.160/255.255.255.224
24.13708 +212.222.54.128/255.255.255.240
24.13709 +212.222.59.0/255.255.255.192
24.13710 +212.222.60.32/255.255.255.224
24.13711 +212.222.67.128/255.255.255.128
24.13712 +212.222.78.128/255.255.255.192
24.13713 +212.222.90.224/255.255.255.224
24.13714 +212.222.116.192/255.255.255.192
24.13715 +212.222.128.0/255.255.255.0
24.13716 +212.222.132.192/255.255.255.240
24.13717 +212.222.134.224/255.255.255.224
24.13718 +212.222.164.0/255.255.255.0
24.13719 +212.222.166.192/255.255.255.192
24.13720 +212.222.172.64/255.255.255.192
24.13721 +212.222.199.0/255.255.255.240
24.13722 +212.222.199.32/255.255.255.224
24.13723 +212.222.205.56/255.255.255.248
24.13724 +212.222.236.0/255.255.255.240
24.13725 +212.222.236.32/255.255.255.240
24.13726 +212.222.247.192/255.255.255.192
24.13727 +212.222.248.80/255.255.255.240
24.13728 +212.222.249.64/255.255.255.240
24.13729 +212.223.3.224/255.255.255.224
24.13730 +212.223.10.96/255.255.255.224
24.13731 +212.224.26.80/255.255.255.248
24.13732 +212.224.59.16/255.255.255.248
24.13733 +212.226.130.152/255.255.255.248
24.13734 +212.226.132.176/255.255.255.248
24.13735 +212.226.136.16/255.255.255.248
24.13736 +212.234.7.0/255.255.255.0
24.13737 +212.234.8.0/255.255.255.240
24.13738 +212.234.16.216/255.255.255.248
24.13739 +212.234.18.64/255.255.255.192
24.13740 +212.234.18.160/255.255.255.248
24.13741 +212.234.19.88/255.255.255.248
24.13742 +212.234.19.224/255.255.255.248
24.13743 +212.234.21.96/255.255.255.248
24.13744 +212.234.21.240/255.255.255.248
24.13745 +212.234.25.208/255.255.255.240
24.13746 +212.234.34.0/255.255.255.0
24.13747 +212.234.37.224/255.255.255.248
24.13748 +212.234.40.0/255.255.255.240
24.13749 +212.234.50.8/255.255.255.248
24.13750 +212.234.50.88/255.255.255.248
24.13751 +212.234.65.128/255.255.255.224
24.13752 +212.234.82.104/255.255.255.248
24.13753 +212.234.85.48/255.255.255.248
24.13754 +212.234.85.136/255.255.255.248
24.13755 +212.234.85.168/255.255.255.248
24.13756 +212.234.86.224/255.255.255.224
24.13757 +212.234.100.32/255.255.255.248
24.13758 +212.234.106.240/255.255.255.240
24.13759 +212.234.110.0/255.255.255.0
24.13760 +212.234.113.32/255.255.255.248
24.13761 +212.234.114.0/255.255.255.0
24.13762 +212.234.122.192/255.255.255.192
24.13763 +212.234.123.32/255.255.255.240
24.13764 +212.234.135.64/255.255.255.248
24.13765 +212.234.138.192/255.255.255.224
24.13766 +212.234.147.192/255.255.255.192
24.13767 +212.234.148.0/255.255.255.240
24.13768 +212.234.149.0/255.255.255.0
24.13769 +212.234.150.16/255.255.255.248
24.13770 +212.234.154.32/255.255.255.240
24.13771 +212.234.165.224/255.255.255.240
24.13772 +212.234.172.8/255.255.255.248
24.13773 +212.234.172.144/255.255.255.240
24.13774 +212.234.176.208/255.255.255.240
24.13775 +212.234.193.64/255.255.255.224
24.13776 +212.234.211.48/255.255.255.240
24.13777 +212.234.219.128/255.255.255.240
24.13778 +212.234.228.40/255.255.255.248
24.13779 +212.234.237.200/255.255.255.248
24.13780 +212.234.239.64/255.255.255.240
24.13781 +212.234.239.216/255.255.255.248
24.13782 +212.236.37.240/255.255.255.240
24.13783 +212.236.50.128/255.255.255.192
24.13784 +212.239.0.0/255.255.128.0
24.13785 +212.240.35.56/255.255.255.248
24.13786 +212.240.152.64/255.255.255.224
24.13787 +212.240.153.128/255.255.255.192
24.13788 +212.240.197.176/255.255.255.248
24.13789 +212.240.243.160/255.255.255.224
24.13790 +212.241.48.0/255.255.255.128
24.13791 +212.241.147.144/255.255.255.240
24.13792 +212.241.164.104/255.255.255.248
24.13793 +212.242.73.0/255.255.255.0
24.13794 +212.243.136.40/255.255.255.248
24.13795 +212.243.136.80/255.255.255.248
24.13796 +212.243.136.168/255.255.255.248
24.13797 +212.243.164.64/255.255.255.64
24.13798 +212.244.52.160/255.255.255.224
24.13799 +212.244.242.192/255.255.255.224
24.13800 +212.247.15.80/255.255.255.240
24.13801 +212.247.22.64/255.255.255.248
24.13802 +212.247.94.48/255.255.255.240
24.13803 +212.247.169.96/255.255.255.224
24.13804 +212.248.9.32/255.255.255.224
24.13805 +212.248.23.120/255.255.255.248
24.13806 +212.248.193.64/255.255.255.224
24.13807 +212.248.237.0/255.255.255.240
24.13808 +212.249.45.224/255.255.255.224
24.13809 +212.250.16.0/255.255.255.0
24.13810 +212.251.10.0/255.255.255.0
24.13811 +212.251.72.0/255.255.255.224
24.13812 +212.254.25.144/255.255.255.240
24.13813 +212.254.190.160/255.255.255.240
24.13814 +212.254.195.72/255.255.255.248
24.13815 +212.255.72.144/255.255.255.248
24.13816 +212.255.75.0/255.255.255.240
24.13817 +213.1.251.48/255.255.255.240
24.13818 +213.1.252.0/255.255.255.128
24.13819 +213.4.64.0/255.255.240.0
24.13820 +213.5.232.24/255.255.255.248
24.13821 +213.8.71.224/255.255.255.224
24.13822 +213.8.111.0/255.255.255.0
24.13823 +213.9.129.0/255.255.255.0
24.13824 +213.9.180.64/255.255.255.192
24.13825 +213.9.195.0/255.255.255.0
24.13826 +213.11.11.56/255.255.255.248
24.13827 +213.11.28.160/255.255.255.240
24.13828 +213.11.34.24/255.255.255.248
24.13829 +213.11.44.176/255.255.255.248
24.13830 +213.11.47.112/255.255.255.248
24.13831 +213.11.61.112/255.255.255.240
24.13832 +213.11.62.216/255.255.255.248
24.13833 +213.11.65.48/255.255.255.248
24.13834 +213.11.67.0/255.255.255.192
24.13835 +213.11.77.64/255.255.255.224
24.13836 +213.11.80.240/255.255.255.248
24.13837 +213.11.82.48/255.255.255.240
24.13838 +213.13.159.0/255.255.255.0
24.13839 +213.16.133.64/255.255.255.192
24.13840 +213.17.139.0/255.255.255.248
24.13841 +213.17.170.232/255.255.255.248
24.13842 +213.17.203.16/255.255.255.248
24.13843 +213.17.225.240/255.255.255.240
24.13844 +213.20.240.192/255.255.255.224
24.13845 +213.23.97.176/255.255.255.240
24.13846 +213.23.101.0/255.255.255.0
24.13847 +213.23.127.80/255.255.255.240
24.13848 +213.24.16.0/255.255.255.192
24.13849 +213.24.17.232/255.255.255.248
24.13850 +213.24.76.0/255.255.254.0
24.13851 +213.24.182.0/255.255.255.0
24.13852 +213.24.252.48/255.255.255.248
24.13853 +213.25.108.160/255.255.255.224
24.13854 +213.25.179.80/255.255.255.240
24.13855 +213.26.0.104/255.255.255.248
24.13856 +213.26.9.128/255.255.255.192
24.13857 +213.26.13.16/255.255.255.240
24.13858 +213.26.21.128/255.255.255.128
24.13859 +213.26.30.96/255.255.255.224
24.13860 +213.26.34.208/255.255.255.240
24.13861 +213.26.36.0/255.255.255.192
24.13862 +213.26.36.64/255.255.255.240
24.13863 +213.26.36.80/255.255.255.240
24.13864 +213.26.62.64/255.255.255.192
24.13865 +213.26.67.96/255.255.255.240
24.13866 +213.26.67.136/255.255.255.248
24.13867 +213.26.67.160/255.255.255.224
24.13868 +213.26.76.128/255.255.255.224
24.13869 +213.26.76.160/255.255.255.224
24.13870 +213.26.94.96/255.255.255.240
24.13871 +213.26.102.32/255.255.255.248
24.13872 +213.26.102.40/255.255.255.248
24.13873 +213.26.106.0/255.255.255.248
24.13874 +213.26.109.56/255.255.255.248
24.13875 +213.26.110.0/255.255.255.224
24.13876 +213.26.117.160/255.255.255.224
24.13877 +213.26.131.128/255.255.255.224
24.13878 +213.26.132.128/255.255.255.240
24.13879 +213.26.132.144/255.255.255.240
24.13880 +213.26.136.96/255.255.255.224
24.13881 +213.26.140.224/255.255.255.192
24.13882 +213.26.144.0/255.255.255.224
24.13883 +213.26.146.32/255.255.255.248
24.13884 +213.26.152.32/255.255.255.224
24.13885 +213.26.152.128/255.255.255.128
24.13886 +213.26.154.32/255.255.255.240
24.13887 +213.26.154.64/255.255.255.192
24.13888 +213.26.154.208/255.255.255.248
24.13889 +213.26.154.216/255.255.255.248
24.13890 +213.26.172.96/255.255.255.240
24.13891 +213.26.175.128/255.255.255.128
24.13892 +213.26.178.32/255.255.255.224
24.13893 +213.26.183.160/255.255.255.224
24.13894 +213.26.214.128/255.255.255.224
24.13895 +213.26.218.192/255.255.255.224
24.13896 +213.26.223.192/255.255.255.224
24.13897 +213.26.232.32/255.255.255.224
24.13898 +213.26.237.128/255.255.255.224
24.13899 +213.26.237.192/255.255.255.224
24.13900 +213.26.237.224/255.255.255.240
24.13901 +213.26.239.224/255.255.255.224
24.13902 +213.26.240.192/255.255.255.224
24.13903 +213.26.246.0/255.255.255.224
24.13904 +213.26.251.0/255.255.255.0
24.13905 +213.26.253.192/255.255.255.240
24.13906 +213.27.139.224/255.255.255.224
24.13907 +213.28.20.240/255.255.255.248
24.13908 +213.28.57.192/255.255.255.192
24.13909 +213.30.134.208/255.255.255.248
24.13910 +213.30.134.216/255.255.255.248
24.13911 +213.30.136.224/255.255.255.240
24.13912 +213.30.153.64/255.255.255.248
24.13913 +213.30.155.128/255.255.255.248
24.13914 +213.30.155.136/255.255.255.248
24.13915 +213.30.168.64/255.255.255.248
24.13916 +213.30.172.176/255.255.255.232
24.13917 +213.30.173.120/255.255.255.248
24.13918 +213.30.183.128/255.255.255.248
24.13919 +213.30.254.72/255.255.255.248
24.13920 +213.31.232.88/255.255.255.248
24.13921 +213.31.234.0/255.255.255.240
24.13922 +213.31.234.192/255.255.255.240
24.13923 +213.33.147.32/255.255.255.240
24.13924 +213.37.108.8/255.255.255.248
24.13925 +213.38.32.88/255.255.255.248
24.13926 +213.38.69.112/255.255.255.240
24.13927 +213.38.72.0/255.255.255.192
24.13928 +213.38.86.0/255.255.255.0
24.13929 +213.38.94.248/255.255.255.248
24.13930 +213.38.112.80/255.255.255.240
24.13931 +213.38.170.192/255.255.255.192
24.13932 +213.38.199.64/255.255.255.224
24.13933 +213.38.212.0/255.255.255.128
24.13934 +213.39.12.48/255.255.255.240
24.13935 +213.39.34.192/255.255.255.192
24.13936 +213.39.69.128/255.255.255.192
24.13937 +213.39.234.128/255.255.255.240
24.13938 +213.39.242.112/255.255.255.248
24.13939 +213.39.244.80/255.255.255.248
24.13940 +213.39.247.144/255.255.255.248
24.13941 +213.39.250.120/255.255.255.248
24.13942 +213.39.254.88/255.255.255.248
24.13943 +213.41.19.128/255.255.255.224
24.13944 +213.41.82.72/255.255.255.248
24.13945 +213.41.82.224/255.255.255.248
24.13946 +213.41.83.144/255.255.255.248
24.13947 +213.41.86.176/255.255.255.240
24.13948 +213.41.98.16/255.255.255.240
24.13949 +213.41.98.192/255.255.255.240
24.13950 +213.41.99.80/255.255.255.240
24.13951 +213.41.101.96/255.255.255.240
24.13952 +213.41.105.176/255.255.255.248
24.13953 +213.41.105.248/255.255.255.248
24.13954 +213.41.116.192/255.255.255.240
24.13955 +213.41.118.48/255.255.255.240
24.13956 +213.41.122.0/255.255.255.248
24.13957 +213.42.59.80/255.255.255.240
24.13958 +213.42.71.160/255.255.255.240
24.13959 +213.42.137.144/255.255.255.240
24.13960 +213.42.176.16/255.255.255.240
24.13961 +213.42.176.192/255.255.255.240
24.13962 +213.42.190.0/255.255.255.128
24.13963 +213.42.235.96/255.255.255.240
24.13964 +213.48.26.128/255.255.255.192
24.13965 +213.48.53.0/255.255.255.0
24.13966 +213.48.195.64/255.255.255.192
24.13967 +213.52.136.208/255.255.255.240
24.13968 +213.52.140.160/255.255.255.224
24.13969 +213.52.142.144/255.255.255.240
24.13970 +213.52.145.0/255.255.255.0
24.13971 +213.52.162.80/255.255.255.240
24.13972 +213.52.162.144/255.255.255.240
24.13973 +213.52.162.192/255.255.255.240
24.13974 +213.52.163.224/255.255.255.240
24.13975 +213.52.165.144/255.255.255.240
24.13976 +213.52.168.16/255.255.255.240
24.13977 +213.52.171.208/255.255.255.240
24.13978 +213.52.199.144/255.255.255.240
24.13979 +213.52.205.128/255.255.255.240
24.13980 +213.53.76.184/255.255.255.248
24.13981 +213.53.90.184/255.255.255.248
24.13982 +213.53.133.248/255.255.255.248
24.13983 +213.53.146.88/255.255.255.248
24.13984 +213.53.199.0/255.255.255.248
24.13985 +213.53.199.24/255.255.255.248
24.13986 +213.56.38.216/255.255.255.248
24.13987 +213.56.39.24/255.255.255.248
24.13988 +213.56.39.64/255.255.255.248
24.13989 +213.56.64.64/255.255.255.224
24.13990 +213.56.67.88/255.255.255.248
24.13991 +213.56.71.184/255.255.255.248
24.13992 +213.56.77.240/255.255.255.248
24.13993 +213.56.80.200/255.255.255.248
24.13994 +213.56.82.80/255.255.255.248
24.13995 +213.56.88.208/255.255.255.248
24.13996 +213.56.96.64/255.255.255.224
24.13997 +213.56.97.232/255.255.255.248
24.13998 +213.56.100.176/255.255.255.248
24.13999 +213.56.103.192/255.255.255.240
24.14000 +213.56.149.248/255.255.255.248
24.14001 +213.56.152.0/255.255.254.0
24.14002 +213.56.160.144/255.255.255.248
24.14003 +213.56.160.184/255.255.255.248
24.14004 +213.56.160.200/255.255.255.248
24.14005 +213.56.168.208/255.255.255.248
24.14006 +213.56.168.240/255.255.255.248
24.14007 +213.56.179.192/255.255.255.224
24.14008 +213.56.180.32/255.255.255.248
24.14009 +213.56.182.128/255.255.255.192
24.14010 +213.56.189.0/255.255.255.96
24.14011 +213.56.190.32/255.255.255.224
24.14012 +213.56.190.128/255.255.255.224
24.14013 +213.56.204.192/255.255.255.224
24.14014 +213.56.212.16/255.255.255.240
24.14015 +213.56.230.225/255.255.255.246
24.14016 +213.61.18.0/255.255.255.0
24.14017 +213.61.58.208/255.255.255.248
24.14018 +213.61.69.136/255.255.255.248
24.14019 +213.61.76.32/255.255.255.224
24.14020 +213.61.77.224/255.255.255.248
24.14021 +213.61.104.0/255.255.255.240
24.14022 +213.61.128.0/255.255.255.240
24.14023 +213.61.128.48/255.255.255.248
24.14024 +213.61.130.224/255.255.255.240
24.14025 +213.61.134.16/255.255.255.248
24.14026 +213.61.139.208/255.255.255.240
24.14027 +213.61.148.0/255.255.255.0
24.14028 +213.61.157.128/255.255.255.128
24.14029 +213.61.162.112/255.255.255.240
24.14030 +213.61.163.32/255.255.255.224
24.14031 +213.61.168.88/255.255.255.248
24.14032 +213.61.168.96/255.255.255.248
24.14033 +213.61.173.32/255.255.255.240
24.14034 +213.61.174.32/255.255.255.248
24.14035 +213.61.181.176/255.255.255.240
24.14036 +213.61.190.128/255.255.255.248
24.14037 +213.61.225.200/255.255.255.248
24.14038 +213.61.227.240/255.255.255.248
24.14039 +213.61.228.48/255.255.255.248
24.14040 +213.61.228.80/255.255.255.248
24.14041 +213.61.228.216/255.255.255.248
24.14042 +213.61.246.112/255.255.255.248
24.14043 +213.62.69.64/255.255.255.224
24.14044 +213.62.69.248/255.255.255.248
24.14045 +213.62.71.0/255.255.255.224
24.14046 +213.62.97.0/255.255.255.0
24.14047 +213.62.98.208/255.255.255.240
24.14048 +213.62.99.160/255.255.255.240
24.14049 +213.62.112.0/255.255.255.224
24.14050 +213.68.1.144/255.255.255.240
24.14051 +213.68.22.176/255.255.255.240
24.14052 +213.68.57.176/255.255.255.240
24.14053 +213.68.73.16/255.255.255.240
24.14054 +213.68.84.64/255.255.255.128
24.14055 +213.68.85.176/255.255.255.240
24.14056 +213.68.88.0/255.255.254.0
24.14057 +213.68.134.128/255.255.255.224
24.14058 +213.68.146.0/255.255.255.192
24.14059 +213.68.153.192/255.255.255.240
24.14060 +213.68.155.0/255.255.255.0
24.14061 +213.68.157.224/255.255.255.224
24.14062 +213.68.235.144/255.255.255.240
24.14063 +213.69.30.112/255.255.255.248
24.14064 +213.69.81.0/255.255.255.248
24.14065 +213.69.81.16/255.255.255.240
24.14066 +213.69.111.48/255.255.255.240
24.14067 +213.69.119.160/255.255.255.224
24.14068 +213.69.134.128/255.255.255.192
24.14069 +213.69.142.168/255.255.255.248
24.14070 +213.69.144.160/255.255.255.224
24.14071 +213.69.170.0/255.255.255.224
24.14072 +213.69.184.232/255.255.255.248
24.14073 +213.69.188.160/255.255.255.240
24.14074 +213.69.232.192/255.255.255.240
24.14075 +213.69.247.32/255.255.255.240
24.14076 +213.70.30.32/255.255.255.248
24.14077 +213.70.32.96/255.255.255.248
24.14078 +213.70.48.80/255.255.255.248
24.14079 +213.70.54.128/255.255.255.240
24.14080 +213.70.61.96/255.255.255.224
24.14081 +213.70.101.224/255.255.255.240
24.14082 +213.70.122.0/255.255.255.128
24.14083 +213.70.175.224/255.255.255.240
24.14084 +213.77.28.80/255.255.255.240
24.14085 +213.80.32.192/255.255.255.224
24.14086 +213.80.61.192/255.255.255.248
24.14087 +213.80.61.224/255.255.255.232
24.14088 +213.80.64.8/255.255.255.248
24.14089 +213.80.64.80/255.255.255.240
24.14090 +213.80.72.136/255.255.255.248
24.14091 +213.82.11.96/255.255.255.224
24.14092 +213.82.24.0/255.255.255.224
24.14093 +213.82.24.168/255.255.255.248
24.14094 +213.82.26.144/255.255.255.240
24.14095 +213.82.27.128/255.255.255.192
24.14096 +213.82.28.160/255.255.255.224
24.14097 +213.82.40.128/255.255.255.192
24.14098 +213.82.49.32/255.255.255.224
24.14099 +213.82.53.96/255.255.255.224
24.14100 +213.82.55.192/255.255.255.248
24.14101 +213.82.79.176/255.255.255.240
24.14102 +213.82.90.160/255.255.255.224
24.14103 +213.82.90.192/255.255.255.224
24.14104 +213.82.107.192/255.255.255.192
24.14105 +213.82.110.248/255.255.255.248
24.14106 +213.82.111.64/255.255.255.192
24.14107 +213.82.111.152/255.255.255.248
24.14108 +213.82.111.176/255.255.255.240
24.14109 +213.82.136.128/255.255.255.240
24.14110 +213.82.136.144/255.255.255.240
24.14111 +213.82.136.160/255.255.255.240
24.14112 +213.82.140.96/255.255.255.224
24.14113 +213.82.145.128/255.255.255.224
24.14114 +213.82.146.160/255.255.255.240
24.14115 +213.82.146.176/255.255.255.240
24.14116 +213.82.151.96/255.255.255.224
24.14117 +213.82.166.0/255.255.255.224
24.14118 +213.82.166.192/255.255.255.224
24.14119 +213.82.170.40/255.255.255.248
24.14120 +213.82.170.128/255.255.255.224
24.14121 +213.82.171.160/255.255.255.224
24.14122 +213.82.184.128/255.255.255.240
24.14123 +213.82.208.96/255.255.255.248
24.14124 +213.82.208.104/255.255.255.248
24.14125 +213.82.208.112/255.255.255.248
24.14126 +213.82.208.120/255.255.255.248
24.14127 +213.82.208.224/255.255.255.240
24.14128 +213.82.208.240/255.255.255.240
24.14129 +213.82.210.144/255.255.255.240
24.14130 +213.82.210.160/255.255.255.240
24.14131 +213.82.210.176/255.255.255.240
24.14132 +213.82.210.192/255.255.255.240
24.14133 +213.82.212.176/255.255.255.240
24.14134 +213.82.214.160/255.255.255.224
24.14135 +213.82.214.208/255.255.255.240
24.14136 +213.82.215.128/255.255.255.224
24.14137 +213.82.215.160/255.255.255.224
24.14138 +213.82.216.0/255.255.255.224
24.14139 +213.82.216.32/255.255.255.224
24.14140 +213.82.216.176/255.255.255.248
24.14141 +213.82.217.0/255.255.255.192
24.14142 +213.82.217.128/255.255.255.240
24.14143 +213.82.218.80/255.255.255.240
24.14144 +213.82.219.224/255.255.255.240
24.14145 +213.82.220.64/255.255.255.224
24.14146 +213.82.221.208/255.255.255.240
24.14147 +213.82.221.232/255.255.255.248
24.14148 +213.82.223.160/255.255.255.224
24.14149 +213.82.231.64/255.255.255.224
24.14150 +213.82.231.224/255.255.255.224
24.14151 +213.82.232.64/255.255.255.240
24.14152 +213.82.236.192/255.255.255.224
24.14153 +213.82.236.224/255.255.255.240
24.14154 +213.82.241.96/255.255.255.224
24.14155 +213.82.241.224/255.255.255.224
24.14156 +213.82.244.176/255.255.255.240
24.14157 +213.82.248.0/255.255.255.248
24.14158 +213.82.248.8/255.255.255.248
24.14159 +213.82.248.16/255.255.255.248
24.14160 +213.82.248.24/255.255.255.248
24.14161 +213.82.249.128/255.255.255.248
24.14162 +213.82.249.136/255.255.255.248
24.14163 +213.82.249.144/255.255.255.248
24.14164 +213.82.250.160/255.255.255.224
24.14165 +213.82.250.224/255.255.255.224
24.14166 +213.82.251.96/255.255.255.240
24.14167 +213.82.251.128/255.255.255.248
24.14168 +213.82.254.0/255.255.255.240
24.14169 +213.82.254.96/255.255.255.224
24.14170 +213.82.254.128/255.255.255.224
24.14171 +213.83.4.208/255.255.255.248
24.14172 +213.83.55.0/255.255.255.248
24.14173 +213.85.70.32/255.255.255.224
24.14174 +213.86.0.224/255.255.255.240
24.14175 +213.86.10.0/255.255.255.0
24.14176 +213.86.19.48/255.255.255.248
24.14177 +213.86.22.96/255.255.255.248
24.14178 +213.86.34.0/255.255.255.240
24.14179 +213.86.35.192/255.255.255.224
24.14180 +213.86.46.128/255.255.255.192
24.14181 +213.86.53.160/255.255.255.224
24.14182 +213.86.56.64/255.255.255.192
24.14183 +213.86.60.0/255.255.255.224
24.14184 +213.86.60.64/255.255.255.224
24.14185 +213.86.60.160/255.255.255.224
24.14186 +213.86.77.0/255.255.254.0
24.14187 +213.86.99.96/255.255.255.248
24.14188 +213.86.99.224/255.255.255.248
24.14189 +213.86.104.80/255.255.255.216
24.14190 +213.86.104.232/255.255.255.248
24.14191 +213.86.112.0/255.255.255.240
24.14192 +213.86.117.8/255.255.255.248
24.14193 +213.86.119.80/255.255.255.240
24.14194 +213.86.132.80/255.255.255.240
24.14195 +213.86.141.0/255.255.255.0
24.14196 +213.86.166.112/255.255.255.240
24.14197 +213.86.167.0/255.255.255.248
24.14198 +213.86.169.144/255.255.255.248
24.14199 +213.86.229.192/255.255.255.224
24.14200 +213.88.133.112/255.255.255.248
24.14201 +213.88.223.208/255.255.255.224
24.14202 +213.88.223.240/255.255.255.240
24.14203 +213.88.238.160/255.255.255.248
24.14204 +213.90.140.160/255.255.255.248
24.14205 +213.91.208.192/255.255.255.224
24.14206 +213.92.1.0/255.255.249.0
24.14207 +213.92.20.0/255.255.255.0
24.14208 +213.92.32.0/255.255.248.0
24.14209 +213.92.64.0/255.255.244.0
24.14210 +213.92.76.80/255.255.255.240
24.14211 +213.92.92.240/255.255.255.240
24.14212 +213.92.94.8/255.255.255.248
24.14213 +213.92.96.56/255.255.255.248
24.14214 +213.92.120.0/255.255.255.0
24.14215 +213.95.4.0/255.255.255.240
24.14216 +213.95.14.0/255.255.255.0
24.14217 +213.105.192.0/255.255.255.248
24.14218 +213.106.251.192/255.255.255.240
24.14219 +213.115.149.16/255.255.255.240
24.14220 +213.115.151.48/255.255.255.240
24.14221 +213.115.152.168/255.255.255.248
24.14222 +213.115.153.104/255.255.255.248
24.14223 +213.120.81.0/255.255.255.224
24.14224 +213.120.92.192/255.255.255.192
24.14225 +213.120.95.64/255.255.255.240
24.14226 +213.121.161.0/255.255.255.224
24.14227 +213.121.165.160/255.255.255.224
24.14228 +213.121.166.160/255.255.255.248
24.14229 +213.121.168.48/255.255.255.240
24.14230 +213.121.203.144/255.255.255.240
24.14231 +213.121.205.32/255.255.255.224
24.14232 +213.121.253.64/255.255.255.224
24.14233 +213.123.158.192/255.255.255.248
24.14234 +213.128.33.240/255.255.255.248
24.14235 +213.128.100.96/255.255.255.248
24.14236 +213.128.143.128/255.255.255.191
24.14237 +213.129.24.68/255.255.255.236
24.14238 +213.129.25.0/255.255.255.0
24.14239 +213.129.27.16/255.255.255.248
24.14240 +213.129.227.224/255.255.255.240
24.14241 +213.129.242.40/255.255.255.248
24.14242 +213.129.247.0/255.255.255.224
24.14243 +213.129.248.176/255.255.255.240
24.14244 +213.130.55.176/255.255.255.244
24.14245 +213.131.165.56/255.255.255.248
24.14246 +213.131.166.64/255.255.255.192
24.14247 +213.131.172.16/255.255.255.248
24.14248 +213.131.172.96/255.255.255.248
24.14249 +213.131.178.56/255.255.255.248
24.14250 +213.131.248.0/255.255.255.0
24.14251 +213.132.36.176/255.255.255.240
24.14252 +213.132.61.152/255.255.255.248
24.14253 +213.132.70.0/255.255.255.0
24.14254 +213.134.205.64/255.255.255.240
24.14255 +213.135.112.208/255.255.255.248
24.14256 +213.139.24.176/255.255.255.248
24.14257 +213.139.27.48/255.255.255.240
24.14258 +213.139.28.8/255.255.255.248
24.14259 +213.139.29.32/255.255.255.224
24.14260 +213.139.130.160/255.255.255.224
24.14261 +213.139.134.0/255.255.255.224
24.14262 +213.139.136.32/255.255.255.240
24.14263 +213.139.144.80/255.255.255.240
24.14264 +213.139.144.224/255.255.255.224
24.14265 +213.139.146.236/255.255.255.244
24.14266 +213.139.147.112/255.255.255.208
24.14267 +213.139.151.32/255.255.255.240
24.14268 +213.140.8.120/255.255.255.248
24.14269 +213.140.23.208/255.255.255.248
24.14270 +213.141.165.120/255.255.255.248
24.14271 +213.142.7.16/255.255.255.240
24.14272 +213.143.6.0/255.255.255.127
24.14273 +213.144.12.0/255.255.255.192
24.14274 +213.144.19.0/255.255.255.0
24.14275 +213.144.20.192/255.255.255.240
24.14276 +213.144.24.0/255.255.255.192
24.14277 +213.144.132.192/255.255.255.248
24.14278 +213.144.143.32/255.255.255.248
24.14279 +213.147.105.64/255.255.255.192
24.14280 +213.147.107.0/255.255.255.192
24.14281 +213.148.39.44/255.255.255.248
24.14282 +213.150.36.128/255.255.255.128
24.14283 +213.150.39.64/255.255.255.248
24.14284 +213.150.42.0/255.255.255.192
24.14285 +213.150.52.176/255.255.255.248
24.14286 +213.150.57.240/255.255.255.240
24.14287 +213.150.62.128/255.255.255.224
24.14288 +213.150.154.160/255.255.255.248
24.14289 +213.150.156.160/255.255.255.224
24.14290 +213.150.161.0/255.255.255.0
24.14291 +213.150.177.0/255.255.254.0
24.14292 +213.150.190.0/255.255.255.0
24.14293 +213.152.248.128/255.255.255.208
24.14294 +213.153.177.64/255.255.255.240
24.14295 +213.156.48.192/255.255.255.224
24.14296 +213.156.54.224/255.255.255.240
24.14297 +213.156.160.0/255.255.224.0
24.14298 +213.157.6.0/255.255.255.0
24.14299 +213.160.5.40/255.255.255.248
24.14300 +213.160.5.72/255.255.255.248
24.14301 +213.160.23.16/255.255.255.248
24.14302 +213.160.24.208/255.255.255.248
24.14303 +213.160.25.216/255.255.255.248
24.14304 +213.160.199.8/255.255.255.248
24.14305 +213.161.76.80/255.255.255.240
24.14306 +213.163.39.64/255.255.255.192
24.14307 +213.163.41.32/255.255.255.248
24.14308 +213.164.4.32/255.255.255.248
24.14309 +213.164.5.16/255.255.255.240
24.14310 +213.164.5.48/255.255.255.240
24.14311 +213.164.88.32/255.255.255.240
24.14312 +213.168.192.16/255.255.255.240
24.14313 +213.168.200.144/255.255.255.240
24.14314 +213.168.226.0/255.255.255.0
24.14315 +213.170.58.32/255.255.255.240
24.14316 +213.172.114.128/255.255.255.248
24.14317 +213.173.145.176/255.255.255.240
24.14318 +213.173.163.192/255.255.255.248
24.14319 +213.173.164.0/255.255.255.0
24.14320 +213.173.177.0/255.255.254.0
24.14321 +213.173.183.192/255.255.255.224
24.14322 +213.173.222.168/255.255.255.248
24.14323 +213.173.245.80/255.255.255.240
24.14324 +213.174.78.128/255.255.255.192
24.14325 +213.174.78.192/255.255.255.192
24.14326 +213.175.10.64/255.255.255.192
24.14327 +213.175.13.0/255.255.255.224
24.14328 +213.175.13.192/255.255.255.224
24.14329 +213.175.15.0/255.255.255.224
24.14330 +213.175.17.144/255.255.255.248
24.14331 +213.175.17.192/255.255.255.224
24.14332 +213.180.13.96/255.255.255.240
24.14333 +213.180.176.208/255.255.255.248
24.14334 +213.180.176.232/255.255.255.248
24.14335 +213.180.177.152/255.255.255.248
24.14336 +213.180.191.224/255.255.255.248
24.14337 +213.182.7.232/255.255.255.248
24.14338 +213.183.182.0/255.255.255.248
24.14339 +213.183.227.160/255.255.255.240
24.14340 +213.183.233.64/255.255.255.224
24.14341 +213.184.19.32/255.255.255.224
24.14342 +213.184.23.0/255.255.255.192
24.14343 +213.185.13.0/255.255.255.0
24.14344 +213.185.131.64/255.255.255.224
24.14345 +213.187.165.112/255.255.255.248
24.14346 +213.187.166.80/255.255.255.240
24.14347 +213.187.170.200/255.255.255.248
24.14348 +213.188.82.72/255.255.255.248
24.14349 +213.189.150.0/255.255.255.248
24.14350 +213.189.199.128/255.255.255.240
24.14351 +213.190.84.0/255.255.255.191
24.14352 +213.190.128.128/255.255.255.192
24.14353 +213.190.145.224/255.255.255.248
24.14354 +213.190.147.16/255.255.255.240
24.14355 +213.190.149.32/255.255.255.240
24.14356 +213.190.156.128/255.255.255.248
24.14357 +213.191.85.104/255.255.255.248
24.14358 +213.193.108.128/255.255.255.192
24.14359 +213.194.33.192/255.255.255.192
24.14360 +213.197.243.176/255.255.255.240
24.14361 +213.199.144.0/255.255.240.0
24.14362 +213.200.100.128/255.255.255.192
24.14363 +213.200.112.0/255.255.240.0
24.14364 +213.200.240.0/255.255.255.248
24.14365 +213.201.50.0/255.255.255.0
24.14366 +213.201.135.184/255.255.255.248
24.14367 +213.201.170.160/255.255.255.248
24.14368 +213.203.13.16/255.255.255.240
24.14369 +213.203.47.192/255.255.255.224
24.14370 +213.203.53.0/255.255.255.0
24.14371 +213.203.209.112/255.255.255.240
24.14372 +213.203.248.192/255.255.255.224
24.14373 +213.204.177.64/255.255.255.192
24.14374 +213.205.110.0/255.255.255.0
24.14375 +213.205.149.112/255.255.255.248
24.14376 +213.206.7.0/255.255.255.0
24.14377 +213.206.133.24/255.255.255.248
24.14378 +213.206.133.160/255.255.255.248
24.14379 +213.206.133.176/255.255.255.248
24.14380 +213.208.2.80/255.255.255.248
24.14381 +213.208.6.48/255.255.255.240
24.14382 +213.208.6.128/255.255.255.240
24.14383 +213.208.70.128/255.255.255.224
24.14384 +213.208.84.168/255.255.255.248
24.14385 +213.208.90.112/255.255.255.248
24.14386 +213.208.91.136/255.255.255.248
24.14387 +213.208.96.0/255.255.255.224
24.14388 +213.208.98.240/255.255.255.248
24.14389 +213.208.99.240/255.255.255.248
24.14390 +213.208.102.40/255.255.255.248
24.14391 +213.208.102.208/255.255.255.248
24.14392 +213.210.18.0/255.255.255.0
24.14393 +213.210.20.0/255.255.255.248
24.14394 +213.213.71.192/255.255.255.224
24.14395 +213.217.87.240/255.255.255.248
24.14396 +213.217.103.184/255.255.255.248
24.14397 +213.217.139.80/255.255.255.248
24.14398 +213.217.159.96/255.255.255.224
24.14399 +213.219.6.32/255.255.255.240
24.14400 +213.219.25.224/255.255.255.224
24.14401 +213.219.28.64/255.255.255.224
24.14402 +213.219.36.16/255.255.255.240
24.14403 +213.219.39.64/255.255.255.224
24.14404 +213.219.49.64/255.255.255.240
24.14405 +213.219.49.160/255.255.255.224
24.14406 +213.219.58.0/255.255.255.240
24.14407 +213.221.116.136/255.255.255.248
24.14408 +213.222.9.16/255.255.255.248
24.14409 +213.223.16.24/255.255.255.248
24.14410 +213.223.50.0/255.255.255.224
24.14411 +213.223.64.48/255.255.255.240
24.14412 +213.225.61.0/255.255.255.0
24.14413 +213.225.62.184/255.255.255.248
24.14414 +213.225.63.16/255.255.255.240
24.14415 +213.225.63.32/255.255.255.224
24.14416 +213.225.63.104/255.255.255.248
24.14417 +213.225.127.0/255.255.255.248
24.14418 +213.225.127.8/255.255.255.248
24.14419 +213.229.0.48/255.255.255.248
24.14420 +213.229.14.64/255.255.255.192
24.14421 +213.229.130.16/255.255.255.248
24.14422 +213.229.141.64/255.255.255.192
24.14423 +213.229.162.0/255.255.255.240
24.14424 +213.230.20.0/255.255.255.0
24.14425 +213.233.120.192/255.255.255.224
24.14426 +213.233.122.160/255.255.255.224
24.14427 +213.235.230.64/255.255.255.248
24.14428 +213.236.65.160/255.255.255.224
24.14429 +213.236.217.32/255.255.255.248
24.14430 +213.237.51.0/255.255.255.240
24.14431 +213.237.179.64/255.255.255.192
24.14432 +213.237.182.224/255.255.255.224
24.14433 +213.239.78.128/255.255.255.192
24.14434 +213.241.132.24/255.255.255.248
24.14435 +213.241.157.64/255.255.255.192
24.14436 +213.243.127.224/255.255.255.248
24.14437 +213.244.30.208/255.255.255.248
24.14438 +213.244.160.0/255.255.255.0
24.14439 +213.244.233.144/255.255.255.240
24.14440 +213.246.135.64/255.255.255.192
24.14441 +213.246.159.128/255.255.255.224
24.14442 +213.246.172.88/255.255.255.248
24.14443 +213.246.172.136/255.255.255.248
24.14444 +213.246.172.144/255.255.255.240
24.14445 +213.246.173.248/255.255.255.248
24.14446 +213.246.193.224/255.255.255.224
24.14447 +213.246.196.128/255.255.255.224
24.14448 +213.247.197.128/255.255.255.192
24.14449 +213.249.54.176/255.255.255.240
24.14450 +213.249.138.0/255.255.255.248
24.14451 +213.249.138.104/255.255.255.248
24.14452 +213.249.148.0/255.255.255.192
24.14453 +213.249.231.104/255.255.255.248
24.14454 +213.251.1.112/255.255.255.240
24.14455 +213.253.26.16/255.255.255.240
24.14456 +213.253.62.160/255.255.255.224
24.14457 +213.253.63.48/255.255.255.240
24.14458 +213.253.136.0/255.255.255.0
24.14459 +213.254.4.0/255.255.255.224
24.14460 +213.254.4.224/255.255.255.224
24.14461 +213.254.6.160/255.255.255.224
24.14462 +213.254.6.208/255.255.255.248
24.14463 +213.254.174.40/255.255.255.248
24.14464 +213.255.42.160/255.255.255.224
24.14465 +213.255.49.0/255.255.255.128
24.14466 +213.255.103.152/255.255.255.248
24.14467 +216.0.220.64/255.255.255.224
24.14468 +216.5.194.216/255.255.255.248
24.14469 +216.6.43.192/255.255.255.192
24.14470 +216.7.13.192/255.255.255.224
24.14471 +216.9.240.0/255.255.240.0
24.14472 +216.10.192.0/255.255.240.0
24.14473 +216.10.208.0/255.255.240.0
24.14474 +216.13.171.0/255.255.255.0
24.14475 +216.15.153.114/255.255.255.248
24.14476 +216.15.159.192/255.255.255.224
24.14477 +216.15.176.0/255.255.255.128
24.14478 +216.17.37.128/255.255.255.240
24.14479 +216.17.37.176/255.255.255.240
24.14480 +216.17.155.184/255.255.255.248
24.14481 +216.19.160.96/255.255.255.224
24.14482 +216.19.160.128/255.255.255.224
24.14483 +216.21.151.0/255.255.255.248
24.14484 +216.21.157.192/255.255.255.224
24.14485 +216.22.7.0/255.255.254.0
24.14486 +216.22.30.0/255.255.255.127
24.14487 +216.22.69.112/255.255.255.248
24.14488 +216.22.145.118/255.255.255.247
24.14489 +216.22.173.112/255.255.255.248
24.14490 +216.22.173.184/255.255.255.248
24.14491 +216.22.208.120/255.255.255.248
24.14492 +216.22.210.64/255.255.255.224
24.14493 +216.22.214.160/255.255.255.248
24.14494 +216.23.1.64/255.255.255.248
24.14495 +216.23.7.248/255.255.255.248
24.14496 +216.23.12.32/255.255.255.248
24.14497 +216.23.13.24/255.255.255.248
24.14498 +216.23.22.0/255.255.255.0
24.14499 +216.23.23.0/255.255.255.240
24.14500 +216.26.224.0/255.255.224.0
24.14501 +216.27.22.32/255.255.255.224
24.14502 +216.27.25.64/255.255.255.192
24.14503 +216.27.42.128/255.255.255.128
24.14504 +216.27.43.128/255.255.255.128
24.14505 +216.27.58.192/255.255.255.192
24.14506 +216.27.157.80/255.255.255.240
24.14507 +216.27.186.96/255.255.255.248
24.14508 +216.27.189.72/255.255.255.240
24.14509 +216.28.201.32/255.255.255.248
24.14510 +216.29.23.0/255.255.255.240
24.14511 +216.29.61.0/255.255.255.0
24.14512 +216.30.16.64/255.255.255.240
24.14513 +216.30.23.0/255.255.255.248
24.14514 +216.30.23.96/255.255.255.248
24.14515 +216.30.23.208/255.255.255.240
24.14516 +216.30.30.64/255.255.255.224
24.14517 +216.30.41.128/255.255.255.240
24.14518 +216.30.197.64/255.255.255.248
24.14519 +216.30.197.80/255.255.255.248
24.14520 +216.30.197.88/255.255.255.248
24.14521 +216.30.204.40/255.255.255.248
24.14522 +216.30.232.40/255.255.255.248
24.14523 +216.31.8.0/255.255.252.0
24.14524 +216.35.64.160/255.255.255.224
24.14525 +216.35.71.0/255.255.255.0
24.14526 +216.35.73.128/255.255.255.224
24.14527 +216.35.74.224/255.255.255.224
24.14528 +216.37.144.0/255.255.255.0
24.14529 +216.37.158.0/255.255.255.0
24.14530 +216.37.171.0/255.255.255.0
24.14531 +216.37.193.64/255.255.255.192
24.14532 +216.38.3.72/255.255.255.248
24.14533 +216.39.149.240/255.255.255.248
24.14534 +216.41.87.80/255.255.255.248
24.14535 +216.41.107.0/255.255.255.0
24.14536 +216.43.24.0/255.255.255.128
24.14537 +216.43.55.48/255.255.255.240
24.14538 +216.43.198.32/255.255.255.248
24.14539 +216.43.198.64/255.255.255.248
24.14540 +216.46.11.128/255.255.255.248
24.14541 +216.46.14.48/255.255.255.240
24.14542 +216.46.16.216/255.255.255.248
24.14543 +216.48.37.128/255.255.255.224
24.14544 +216.49.0.0/255.255.192.0
24.14545 +216.49.80.0/255.255.247.244
24.14546 +216.49.88.13/255.255.255.238
24.14547 +216.49.88.32/255.255.255.188
24.14548 +216.49.88.101/255.255.255.239
24.14549 +216.49.88.119/255.255.255.232
24.14550 +216.49.88.144/255.255.248.144
24.14551 +216.49.131.192/255.255.255.248
24.14552 +216.49.137.248/255.255.255.248
24.14553 +216.52.3.56/255.255.255.248
24.14554 +216.52.22.0/255.255.254.0
24.14555 +216.52.28.0/255.255.255.0
24.14556 +216.52.44.32/255.255.255.224
24.14557 +216.52.47.0/255.255.255.0
24.14558 +216.52.56.24/255.255.255.248
24.14559 +216.52.88.16/255.255.255.240
24.14560 +216.52.88.80/255.255.255.240
24.14561 +216.52.88.96/255.255.255.224
24.14562 +216.52.102.0/255.255.255.112
24.14563 +216.52.119.128/255.255.255.224
24.14564 +216.52.159.224/255.255.255.224
24.14565 +216.52.163.16/255.255.255.240
24.14566 +216.52.167.128/255.255.255.192
24.14567 +216.52.184.224/255.255.255.224
24.14568 +216.52.195.128/255.255.255.192
24.14569 +216.52.209.0/255.255.255.0
24.14570 +216.52.212.0/255.255.254.0
24.14571 +216.52.229.0/255.255.255.0
24.14572 +216.52.232.64/255.255.255.240
24.14573 +216.52.232.80/255.255.255.240
24.14574 +216.52.238.0/255.255.255.0
24.14575 +216.52.242.0/255.255.255.0
24.14576 +216.52.244.32/255.255.255.240
24.14577 +216.52.244.64/255.255.255.228
24.14578 +216.54.20.192/255.255.255.240
24.14579 +216.54.26.232/255.255.255.248
24.14580 +216.54.96.48/255.255.255.240
24.14581 +216.54.117.0/255.255.255.192
24.14582 +216.54.131.1/255.255.255.1
24.14583 +216.55.67.16/255.255.255.248
24.14584 +216.57.219.0/255.255.255.0
24.14585 +216.60.222.0/255.255.255.0
24.14586 +216.61.39.200/255.255.255.248
24.14587 +216.61.132.32/255.255.255.248
24.14588 +216.61.133.72/255.255.255.248
24.14589 +216.62.132.248/255.255.255.248
24.14590 +216.62.182.176/255.255.255.240
24.14591 +216.62.187.184/255.255.255.248
24.14592 +216.62.203.112/255.255.255.248
24.14593 +216.62.233.144/255.255.255.248
24.14594 +216.62.240.96/255.255.255.248
24.14595 +216.62.247.200/255.255.255.248
24.14596 +216.63.21.160/255.255.255.248
24.14597 +216.63.76.88/255.255.255.248
24.14598 +216.63.122.64/255.255.255.248
24.14599 +216.63.176.224/255.255.255.224
24.14600 +216.63.177.128/255.255.255.224
24.14601 +216.63.246.0/255.255.254.0
24.14602 +216.64.169.0/255.255.255.0
24.14603 +216.64.190.0/255.255.255.0
24.14604 +216.65.4.80/255.255.255.240
24.14605 +216.65.62.248/255.255.255.248
24.14606 +216.65.64.192/255.255.255.240
24.14607 +216.65.78.0/255.255.255.0
24.14608 +216.65.103.80/255.255.255.240
24.14609 +216.65.123.16/255.255.255.240
24.14610 +216.65.211.208/255.255.255.240
24.14611 +216.66.208.0/255.255.240.0
24.14612 +216.69.112.0/255.255.240.0
24.14613 +216.70.137.232/255.255.255.248
24.14614 +216.70.162.24/255.255.255.248
24.14615 +216.70.162.40/255.255.255.248
24.14616 +216.70.241.0/255.255.255.128
24.14617 +216.73.30.160/255.255.255.224
24.14618 +216.74.57.197/255.255.255.236
24.14619 +216.74.130.0/255.255.254.224
24.14620 +216.74.134.128/255.255.255.224
24.14621 +216.74.135.160/255.255.255.224
24.14622 +216.74.143.64/255.255.255.224
24.14623 +216.74.159.64/255.255.255.224
24.14624 +216.74.164.192/255.255.255.224
24.14625 +216.74.169.96/255.255.255.224
24.14626 +216.74.172.0/255.255.255.0
24.14627 +216.75.65.144/255.255.255.248
24.14628 +216.75.67.168/255.255.255.248
24.14629 +216.75.75.192/255.255.255.240
24.14630 +216.75.80.96/255.255.255.240
24.14631 +216.75.80.144/255.255.255.240
24.14632 +216.75.82.248/255.255.255.248
24.14633 +216.75.86.96/255.255.255.248
24.14634 +216.80.23.64/255.255.255.248
24.14635 +216.80.41.0/255.255.255.192
24.14636 +216.83.6.0/255.255.255.0
24.14637 +216.84.96.0/255.255.255.0
24.14638 +216.84.130.176/255.255.255.240
24.14639 +216.84.136.64/255.255.255.240
24.14640 +216.85.27.232/255.255.255.248
24.14641 +216.85.201.192/255.255.255.248
24.14642 +216.86.111.0/255.255.255.192
24.14643 +216.86.111.224/255.255.255.224
24.14644 +216.86.240.0/255.255.240.0
24.14645 +216.88.34.48/255.255.255.240
24.14646 +216.90.199.0/255.255.251.0
24.14647 +216.90.241.0/255.255.255.0
24.14648 +216.91.70.0/255.255.255.0
24.14649 +216.91.121.0/255.255.255.0
24.14650 +216.91.187.160/255.255.255.224
24.14651 +216.91.250.192/255.255.255.192
24.14652 +216.93.160.0/255.255.224.0
24.14653 +216.94.11.120/255.255.255.248
24.14654 +216.94.12.0/255.255.255.128
24.14655 +216.94.44.72/255.255.255.248
24.14656 +216.94.87.80/255.255.255.240
24.14657 +216.94.102.96/255.255.255.240
24.14658 +216.94.103.192/255.255.255.224
24.14659 +216.94.116.128/255.255.255.128
24.14660 +216.94.153.48/255.255.255.240
24.14661 +216.94.244.128/255.255.255.128
24.14662 +216.95.175.96/255.255.255.224
24.14663 +216.95.205.0/255.255.255.0
24.14664 +216.95.235.32/255.255.255.240
24.14665 +216.98.48.0/255.255.240.0
24.14666 +216.98.70.0/255.255.255.224
24.14667 +216.99.58.224/255.255.255.224
24.14668 +216.100.14.0/255.255.255.224
24.14669 +216.100.35.120/255.255.255.248
24.14670 +216.100.53.96/255.255.255.224
24.14671 +216.100.231.96/255.255.255.224
24.14672 +216.101.22.176/255.255.255.248
24.14673 +216.101.33.160/255.255.255.224
24.14674 +216.101.48.104/255.255.255.248
24.14675 +216.101.65.0/255.255.255.224
24.14676 +216.101.68.32/255.255.255.224
24.14677 +216.101.71.128/255.255.255.224
24.14678 +216.101.73.160/255.255.255.224
24.14679 +216.101.73.192/255.255.255.224
24.14680 +216.101.76.0/255.255.255.128
24.14681 +216.101.81.0/255.255.255.192
24.14682 +216.101.81.192/255.255.255.224
24.14683 +216.101.82.96/255.255.255.240
24.14684 +216.101.88.0/255.255.255.0
24.14685 +216.101.93.0/255.255.255.0
24.14686 +216.101.140.40/255.255.255.248
24.14687 +216.101.166.176/255.255.255.248
24.14688 +216.101.197.168/255.255.255.248
24.14689 +216.101.254.0/255.255.255.0
24.14690 +216.102.71.208/255.255.255.248
24.14691 +216.102.72.0/255.255.244.0
24.14692 +216.102.128.0/255.255.255.248
24.14693 +216.102.132.160/255.255.255.248
24.14694 +216.102.134.248/255.255.255.248
24.14695 +216.102.219.144/255.255.255.248
24.14696 +216.102.221.104/255.255.255.248
24.14697 +216.102.229.216/255.255.255.248
24.14698 +216.102.237.208/255.255.255.248
24.14699 +216.102.239.56/255.255.255.248
24.14700 +216.102.247.128/255.255.255.240
24.14701 +216.103.5.80/255.255.255.248
24.14702 +216.103.35.104/255.255.255.248
24.14703 +216.103.35.224/255.255.255.224
24.14704 +216.103.37.56/255.255.255.248
24.14705 +216.103.39.48/255.255.255.248
24.14706 +216.103.41.80/255.255.255.248
24.14707 +216.103.47.208/255.255.255.248
24.14708 +216.103.60.176/255.255.255.248
24.14709 +216.103.64.80/255.255.255.248
24.14710 +216.103.67.192/255.255.255.224
24.14711 +216.103.69.16/255.255.255.248
24.14712 +216.103.69.168/255.255.255.248
24.14713 +216.103.69.224/255.255.255.248
24.14714 +216.103.98.192/255.255.255.240
24.14715 +216.103.108.144/255.255.255.248
24.14716 +216.103.123.208/255.255.255.248
24.14717 +216.103.124.0/255.255.255.248
24.14718 +216.103.178.96/255.255.255.224
24.14719 +216.103.225.192/255.255.255.248
24.14720 +216.103.248.0/255.255.255.224
24.14721 +216.103.249.0/255.255.255.224
24.14722 +216.104.43.1/255.255.255.2
24.14723 +216.104.208.0/255.255.240.0
24.14724 +216.105.76.40/255.255.255.248
24.14725 +216.108.28.0/255.255.254.0
24.14726 +216.108.34.0/255.255.255.48
24.14727 +216.108.35.160/255.255.255.216
24.14728 +216.108.37.0/255.255.254.112
24.14729 +216.108.40.0/255.255.255.208
24.14730 +216.108.41.128/255.255.255.224
24.14731 +216.108.42.128/255.255.255.240
24.14732 +216.108.42.160/255.255.255.224
24.14733 +216.108.43.0/255.255.255.224
24.14734 +216.108.44.0/255.255.255.0
24.14735 +216.108.45.192/255.255.255.224
24.14736 +216.108.46.128/255.255.255.192
24.14737 +216.108.47.128/255.255.255.208
24.14738 +216.108.48.0/255.255.255.0
24.14739 +216.108.50.0/255.255.255.96
24.14740 +216.108.53.0/255.255.254.112
24.14741 +216.108.56.0/255.255.255.192
24.14742 +216.108.57.0/255.255.255.176
24.14743 +216.108.58.128/255.255.255.176
24.14744 +216.108.59.128/255.255.255.224
24.14745 +216.108.61.0/255.255.255.192
24.14746 +216.108.64.0/255.255.255.209
24.14747 +216.108.65.0/255.255.255.224
24.14748 +216.108.65.48/255.255.255.240
24.14749 +216.108.66.0/255.255.255.209
24.14750 +216.108.67.0/255.255.255.176
24.14751 +216.108.68.0/255.255.255.224
24.14752 +216.108.69.0/255.255.255.208
24.14753 +216.108.70.0/255.255.255.16
24.14754 +216.108.71.0/255.255.255.240
24.14755 +216.108.71.64/255.255.255.224
24.14756 +216.108.71.128/255.255.255.224
24.14757 +216.108.71.192/255.255.255.176
24.14758 +216.108.73.0/255.255.255.240
24.14759 +216.108.74.0/255.255.255.128
24.14760 +216.108.75.0/255.255.255.240
24.14761 +216.108.75.32/255.255.255.160
24.14762 +216.108.76.0/255.255.255.160
24.14763 +216.108.76.192/255.255.255.192
24.14764 +216.108.77.128/255.255.255.240
24.14765 +216.108.78.0/255.255.255.224
24.14766 +216.108.79.0/255.255.255.192
24.14767 +216.108.83.128/255.255.255.240
24.14768 +216.108.87.0/255.255.255.240
24.14769 +216.108.89.128/255.255.255.224
24.14770 +216.108.90.128/255.255.255.224
24.14771 +216.108.91.0/255.255.255.176
24.14772 +216.108.94.128/255.255.255.192
24.14773 +216.108.97.0/255.255.255.224
24.14774 +216.108.98.128/255.255.255.176
24.14775 +216.108.100.128/255.255.255.224
24.14776 +216.108.102.64/255.255.255.240
24.14777 +216.108.102.192/255.255.255.240
24.14778 +216.108.103.128/255.255.255.240
24.14779 +216.108.106.128/255.255.255.224
24.14780 +216.108.107.0/255.255.255.192
24.14781 +216.108.108.144/255.255.255.224
24.14782 +216.108.110.128/255.255.255.224
24.14783 +216.108.111.128/255.255.255.224
24.14784 +216.108.113.192/255.255.255.224
24.14785 +216.108.114.128/255.255.255.224
24.14786 +216.108.115.128/255.255.255.224
24.14787 +216.108.116.192/255.255.255.240
24.14788 +216.108.117.192/255.255.255.240
24.14789 +216.108.118.128/255.255.255.224
24.14790 +216.108.119.0/255.255.255.128
24.14791 +216.109.0.0/255.255.192.0
24.14792 +216.109.240.0/255.255.240.0
24.14793 +216.110.6.80/255.255.255.240
24.14794 +216.110.34.184/255.255.255.240
24.14795 +216.110.41.160/255.255.255.240
24.14796 +216.111.2.0/255.255.255.224
24.14797 +216.111.88.224/255.255.255.224
24.14798 +216.111.91.192/255.255.255.224
24.14799 +216.111.115.0/255.255.255.128
24.14800 +216.111.137.128/255.255.255.224
24.14801 +216.111.159.0/255.255.255.0
24.14802 +216.111.212.96/255.255.255.224
24.14803 +216.113.58.0/255.255.255.0
24.14804 +216.117.16.24/255.255.255.248
24.14805 +216.117.42.208/255.255.255.248
24.14806 +216.118.66.0/255.255.255.11
24.14807 +216.118.66.246/255.255.255.246
24.14808 +216.119.144.240/255.255.255.240
24.14809 +216.120.0.0/255.255.128.0
24.14810 +216.123.8.0/255.255.252.0
24.14811 +216.123.25.224/255.255.255.224
24.14812 +216.123.43.32/255.255.255.240
24.14813 +216.126.98.168/255.255.255.248
24.14814 +216.127.253.64/255.255.255.192
24.14815 +216.128.4.16/255.255.255.240
24.14816 +216.129.6.0/255.255.255.224
24.14817 +216.129.34.0/255.255.255.240
24.14818 +216.129.35.224/255.255.255.248
24.14819 +216.129.205.0/255.255.255.248
24.14820 +216.130.33.0/255.255.255.248
24.14821 +216.130.33.8/255.255.255.248
24.14822 +216.132.49.0/255.255.255.224
24.14823 +216.132.49.224/255.255.255.224
24.14824 +216.132.68.32/255.255.255.224
24.14825 +216.132.86.0/255.255.255.0
24.14826 +216.132.91.160/255.255.255.224
24.14827 +216.132.111.32/255.255.255.224
24.14828 +216.132.243.32/255.255.255.224
24.14829 +216.133.193.0/255.255.255.0
24.14830 +216.133.204.224/255.255.255.224
24.14831 +216.133.221.0/255.255.255.0
24.14832 +216.133.240.128/255.255.255.248
24.14833 +216.133.250.112/255.255.255.240
24.14834 +216.136.25.192/255.255.255.224
24.14835 +216.136.33.0/255.255.255.240
24.14836 +216.136.96.224/255.255.255.240
24.14837 +216.136.102.64/255.255.255.240
24.14838 +216.139.179.128/255.255.255.128
24.14839 +216.140.36.216/255.255.255.248
24.14840 +216.140.104.0/255.255.255.0
24.14841 +216.140.123.64/255.255.255.192
24.14842 +216.140.212.224/255.255.255.240
24.14843 +216.141.80.0/255.255.255.0
24.14844 +216.141.118.64/255.255.255.224
24.14845 +216.141.140.0/255.255.255.224
24.14846 +216.141.160.80/255.255.255.240
24.14847 +216.141.161.192/255.255.255.240
24.14848 +216.141.174.0/255.255.254.0
24.14849 +216.141.177.224/255.255.255.224
24.14850 +216.141.198.0/255.255.255.0
24.14851 +216.141.210.128/255.255.255.128
24.14852 +216.141.211.128/255.255.255.128
24.14853 +216.142.66.96/255.255.255.224
24.14854 +216.142.131.192/255.255.255.224
24.14855 +216.143.20.0/255.255.255.0
24.14856 +216.143.179.160/255.255.255.224
24.14857 +216.143.233.0/255.255.255.224
24.14858 +216.144.70.0/255.255.255.0
24.14859 +216.144.71.0/255.255.255.0
24.14860 +216.144.128.0/255.255.144.0
24.14861 +216.146.75.80/255.255.255.240
24.14862 +216.146.85.224/255.255.255.224
24.14863 +216.148.0.0/255.255.254.0
24.14864 +216.148.234.216/255.255.255.248
24.14865 +216.153.31.0/255.255.255.0
24.14866 +216.153.199.176/255.255.255.244
24.14867 +216.154.196.64/255.255.255.192
24.14868 +216.154.228.0/255.255.255.0
24.14869 +216.160.37.0/255.255.255.248
24.14870 +216.160.43.0/255.255.255.248
24.14871 +216.160.66.112/255.255.255.248
24.14872 +216.160.68.200/255.255.255.248
24.14873 +216.160.76.120/255.255.255.248
24.14874 +216.160.174.8/255.255.255.248
24.14875 +216.160.202.0/255.255.255.0
24.14876 +216.160.239.96/255.255.255.248
24.14877 +216.160.251.32/255.255.255.248
24.14878 +216.161.47.32/255.255.255.248
24.14879 +216.161.118.8/255.255.255.248
24.14880 +216.161.127.128/255.255.255.248
24.14881 +216.161.127.248/255.255.255.248
24.14882 +216.161.155.8/255.255.255.248
24.14883 +216.161.175.152/255.255.255.248
24.14884 +216.161.180.120/255.255.255.248
24.14885 +216.161.202.24/255.255.255.248
24.14886 +216.161.203.192/255.255.255.248
24.14887 +216.161.203.248/255.255.255.248
24.14888 +216.163.49.136/255.255.255.240
24.14889 +216.163.128.0/255.255.240.0
24.14890 +216.164.75.224/255.255.255.239
24.14891 +216.164.95.96/255.255.255.224
24.14892 +216.165.169.176/255.255.255.248
24.14893 +216.165.173.64/255.255.255.224
24.14894 +216.165.174.192/255.255.255.192
24.14895 +216.166.2.64/255.255.255.192
24.14896 +216.169.144.0/255.255.240.0
24.14897 +216.170.177.0/255.255.255.248
24.14898 +216.171.13.32/255.255.255.240
24.14899 +216.171.50.104/255.255.255.248
24.14900 +216.171.57.128/255.255.255.248
24.14901 +216.172.108.80/255.255.255.240
24.14902 +216.172.116.16/255.255.255.248
24.14903 +216.172.204.192/255.255.255.192
24.14904 +216.173.2.120/255.255.255.248
24.14905 +216.173.12.112/255.255.255.240
24.14906 +216.173.46.0/255.255.255.240
24.14907 +216.173.46.32/255.255.255.224
24.14908 +216.173.46.176/255.255.255.208
24.14909 +216.173.224.0/255.255.224.0
24.14910 +216.175.151.192/255.255.255.224
24.14911 +216.175.153.240/255.255.255.240
24.14912 +216.175.155.160/255.255.255.240
24.14913 +216.175.156.152/255.255.255.248
24.14914 +216.175.158.64/255.255.255.192
24.14915 +216.175.165.192/255.255.255.192
24.14916 +216.175.168.32/255.255.255.240
24.14917 +216.175.168.112/255.255.255.240
24.14918 +216.175.180.224/255.255.255.240
24.14919 +216.175.196.192/255.255.255.224
24.14920 +216.175.198.128/255.255.255.192
24.14921 +216.175.201.0/255.255.255.224
24.14922 +216.175.227.128/255.255.255.240
24.14923 +216.175.238.32/255.255.255.240
24.14924 +216.177.36.0/255.255.255.0
24.14925 +216.177.38.16/255.255.255.248
24.14926 +216.177.38.64/255.255.255.240
24.14927 +216.177.38.192/255.255.255.248
24.14928 +216.177.72.96/255.255.255.224
24.14929 +216.178.248.112/255.255.255.248
24.14930 +216.178.251.32/255.255.255.248
24.14931 +216.179.214.32/255.255.255.240
24.14932 +216.180.38.192/255.255.255.240
24.14933 +216.180.110.96/255.255.255.224
24.14934 +216.180.161.0/255.255.255.239
24.14935 +216.181.12.112/255.255.255.240
24.14936 +216.181.17.96/255.255.255.224
24.14937 +216.181.51.0/255.255.255.0
24.14938 +216.181.68.96/255.255.255.240
24.14939 +216.181.68.176/255.255.255.240
24.14940 +216.181.70.48/255.255.255.240
24.14941 +216.181.76.0/255.255.255.224
24.14942 +216.181.78.224/255.255.255.224
24.14943 +216.181.82.128/255.255.255.192
24.14944 +216.181.103.192/255.255.255.192
24.14945 +216.181.148.16/255.255.255.224
24.14946 +216.181.148.56/255.255.255.232
24.14947 +216.181.153.128/255.255.255.224
24.14948 +216.181.167.160/255.255.255.224
24.14949 +216.181.170.64/255.255.255.192
24.14950 +216.181.171.192/255.255.255.240
24.14951 +216.181.175.88/255.255.255.248
24.14952 +216.181.192.32/255.255.255.224
24.14953 +216.181.193.0/255.255.255.240
24.14954 +216.181.193.16/255.255.255.240
24.14955 +216.181.201.192/255.255.255.192
24.14956 +216.181.209.80/255.255.255.240
24.14957 +216.181.212.200/255.255.255.248
24.14958 +216.181.225.96/255.255.255.240
24.14959 +216.181.231.0/255.255.255.0
24.14960 +216.181.237.96/255.255.255.248
24.14961 +216.181.241.128/255.255.255.192
24.14962 +216.182.162.64/255.255.255.224
24.14963 +216.182.196.160/255.255.255.224
24.14964 +216.183.106.144/255.255.255.240
24.14965 +216.184.137.80/255.255.255.240
24.14966 +216.184.137.192/255.255.255.224
24.14967 +216.184.144.32/255.255.255.224
24.14968 +216.184.148.224/255.255.255.224
24.14969 +216.184.153.192/255.255.255.224
24.14970 +216.184.153.224/255.255.255.224
24.14971 +216.184.157.64/255.255.255.248
24.14972 +216.184.157.128/255.255.255.224
24.14973 +216.184.163.96/255.255.255.224
24.14974 +216.184.163.160/255.255.255.224
24.14975 +216.184.163.208/255.255.255.240
24.14976 +216.184.165.96/255.255.255.224
24.14977 +216.184.174.0/255.255.255.224
24.14978 +216.184.174.96/255.255.255.224
24.14979 +216.184.186.64/255.255.255.224
24.14980 +216.184.194.0/255.255.255.0
24.14981 +216.184.199.160/255.255.255.224
24.14982 +216.184.200.0/255.255.255.0
24.14983 +216.184.202.208/255.255.255.240
24.14984 +216.184.220.0/255.255.255.0
24.14985 +216.184.222.96/255.255.255.224
24.14986 +216.184.227.32/255.255.255.240
24.14987 +216.184.229.0/255.255.255.248
24.14988 +216.184.234.96/255.255.255.224
24.14989 +216.184.237.128/255.255.255.224
24.14990 +216.184.239.160/255.255.255.224
24.14991 +216.184.247.32/255.255.255.224
24.14992 +216.184.247.112/255.255.255.240
24.14993 +216.186.143.40/255.255.255.224
24.14994 +216.186.149.0/255.255.255.248
24.14995 +216.186.152.232/255.255.255.248
24.14996 +216.186.153.16/255.255.255.240
24.14997 +216.186.153.64/255.255.255.240
24.14998 +216.186.153.144/255.255.255.240
24.14999 +216.186.156.136/255.255.255.248
24.15000 +216.186.159.160/255.255.255.224
24.15001 +216.186.160.0/255.255.255.240
24.15002 +216.186.160.232/255.255.255.248
24.15003 +216.186.164.96/255.255.255.248
24.15004 +216.186.180.224/255.255.255.240
24.15005 +216.186.195.208/255.255.255.248
24.15006 +216.186.203.48/255.255.255.248
24.15007 +216.186.203.248/255.255.255.248
24.15008 +216.186.208.80/255.255.255.248
24.15009 +216.186.217.168/255.255.255.248
24.15010 +216.186.220.48/255.255.255.240
24.15011 +216.186.226.168/255.255.255.248
24.15012 +216.186.228.16/255.255.255.240
24.15013 +216.186.231.40/255.255.255.248
24.15014 +216.186.238.40/255.255.255.248
24.15015 +216.186.238.96/255.255.255.248
24.15016 +216.186.239.112/255.255.255.240
24.15017 +216.186.240.0/255.255.255.248
24.15018 +216.186.248.16/255.255.255.240
24.15019 +216.187.69.96/255.255.255.224
24.15020 +216.188.27.208/255.255.255.240
24.15021 +216.190.0.0/255.255.255.0
24.15022 +216.190.56.0/255.255.252.0
24.15023 +216.190.100.0/255.255.255.0
24.15024 +216.190.169.0/255.255.255.0
24.15025 +216.190.210.0/255.255.254.0
24.15026 +216.190.255.48/255.255.255.248
24.15027 +216.193.194.0/255.255.255.0
24.15028 +216.194.192.0/255.255.192.0
24.15029 +216.197.96.0/255.255.224.0
24.15030 +216.198.90.88/255.255.255.232
24.15031 +216.198.91.144/255.255.255.240
24.15032 +216.198.218.0/255.255.255.128
24.15033 +216.199.12.192/255.255.255.224
24.15034 +216.199.34.192/255.255.255.248
24.15035 +216.199.91.224/255.255.255.248
24.15036 +216.199.251.64/255.255.255.248
24.15037 +216.201.183.176/255.255.255.240
24.15038 +216.201.202.48/255.255.255.240
24.15039 +216.203.2.80/255.255.255.248
24.15040 +216.204.31.192/255.255.255.192
24.15041 +216.204.34.120/255.255.255.248
24.15042 +216.204.56.0/255.255.255.128
24.15043 +216.205.94.0/255.255.255.174
24.15044 +216.205.94.83/255.255.255.83
24.15045 +216.205.224.0/255.255.224.0
24.15046 +216.206.216.0/255.255.255.0
24.15047 +216.206.242.192/255.255.255.192
24.15048 +216.207.221.32/255.255.255.224
24.15049 +216.207.222.0/255.255.255.0
24.15050 +216.208.1.0/255.255.255.224
24.15051 +216.208.8.32/255.255.255.224
24.15052 +216.208.27.128/255.255.255.224
24.15053 +216.208.34.128/255.255.255.224
24.15054 +216.208.34.192/255.255.255.224
24.15055 +216.208.35.32/255.255.255.224
24.15056 +216.208.35.96/255.255.255.224
24.15057 +216.208.35.160/255.255.255.224
24.15058 +216.208.39.192/255.255.255.192
24.15059 +216.208.71.32/255.255.255.224
24.15060 +216.208.95.224/255.255.255.224
24.15061 +216.208.98.96/255.255.255.224
24.15062 +216.208.123.0/255.255.255.0
24.15063 +216.208.226.160/255.255.255.224
24.15064 +216.209.86.192/255.255.255.248
24.15065 +216.210.206.64/255.255.255.248
24.15066 +216.210.239.96/255.255.255.248
24.15067 +216.211.201.192/255.255.255.192
24.15068 +216.212.60.96/255.255.255.248
24.15069 +216.212.104.200/255.255.255.248
24.15070 +216.212.105.168/255.255.255.248
24.15071 +216.213.99.56/255.255.255.248
24.15072 +216.216.41.16/255.255.255.240
24.15073 +216.216.41.96/255.255.255.240
24.15074 +216.216.48.16/255.255.255.240
24.15075 +216.216.192.16/255.255.255.240
24.15076 +216.217.6.144/255.255.255.240
24.15077 +216.217.22.200/255.255.255.248
24.15078 +216.217.23.64/255.255.255.192
24.15079 +216.217.71.64/255.255.255.192
24.15080 +216.217.71.216/255.255.255.248
24.15081 +216.217.72.64/255.255.255.192
24.15082 +216.217.156.240/255.255.255.248
24.15083 +216.217.179.120/255.255.255.248
24.15084 +216.217.212.128/255.255.255.224
24.15085 +216.217.245.192/255.255.255.224
24.15086 +216.218.132.16/255.255.255.248
24.15087 +216.218.139.208/255.255.255.240
24.15088 +216.218.152.128/255.255.255.128
24.15089 +216.218.162.0/255.255.255.0
24.15090 +216.218.196.64/255.255.255.224
24.15091 +216.218.196.176/255.255.255.248
24.15092 +216.218.200.72/255.255.255.248
24.15093 +216.218.207.0/255.255.255.192
24.15094 +216.219.57.96/255.255.255.240
24.15095 +216.220.100.160/255.255.255.192
24.15096 +216.220.176.0/255.255.240.0
24.15097 +216.220.225.64/255.255.255.224
24.15098 +216.223.34.0/255.255.255.0
24.15099 +216.224.8.136/255.255.255.248
24.15100 +216.224.8.176/255.255.255.240
24.15101 +216.224.32.192/255.255.255.240
24.15102 +216.224.44.176/255.255.255.240
24.15103 +216.224.59.192/255.255.255.240
24.15104 +216.226.176.0/255.255.240.0
24.15105 +216.228.0.0/255.255.224.0
24.15106 +216.230.65.96/255.255.255.241
24.15107 +216.230.91.64/255.255.255.192
24.15108 +216.231.40.96/255.255.255.224
24.15109 +216.233.8.160/255.255.255.248
24.15110 +216.233.8.176/255.255.255.240
24.15111 +216.233.10.128/255.255.255.224
24.15112 +216.233.10.176/255.255.255.240
24.15113 +216.233.12.120/255.255.255.248
24.15114 +216.233.44.216/255.255.255.248
24.15115 +216.233.69.0/255.255.255.192
24.15116 +216.233.76.32/255.255.255.248
24.15117 +216.233.86.0/255.255.255.240
24.15118 +216.233.99.72/255.255.255.248
24.15119 +216.233.103.144/255.255.255.240
24.15120 +216.233.116.96/255.255.255.240
24.15121 +216.233.117.136/255.255.255.248
24.15122 +216.233.129.120/255.255.255.248
24.15123 +216.233.130.112/255.255.255.176
24.15124 +216.233.131.8/255.255.255.248
24.15125 +216.233.133.192/255.255.255.192
24.15126 +216.233.146.128/255.255.255.224
24.15127 +216.233.150.32/255.255.255.224
24.15128 +216.233.162.64/255.255.255.248
24.15129 +216.233.191.16/255.255.255.248
24.15130 +216.233.191.192/255.255.255.240
24.15131 +216.233.229.192/255.255.255.240
24.15132 +216.233.248.200/255.255.255.248
24.15133 +216.233.252.0/255.255.255.0
24.15134 +216.234.160.0/255.255.224.0
24.15135 +216.236.134.168/255.255.255.248
24.15136 +216.236.223.0/255.255.255.0
24.15137 +216.238.0.0/255.255.0.0
24.15138 +216.241.165.32/255.255.255.240
24.15139 +216.241.187.16/255.255.255.248
24.15140 +216.243.178.160/255.255.255.240
24.15141 +216.244.76.0/255.255.255.248
24.15142 +216.246.5.128/255.255.255.224
24.15143 +216.246.7.128/255.255.255.224
24.15144 +216.246.7.240/255.255.255.240
24.15145 +216.246.17.0/255.255.255.224
24.15146 +216.246.87.0/255.255.255.0
24.15147 +216.246.91.0/255.255.255.224
24.15148 +216.246.96.0/255.255.255.0
24.15149 +216.248.12.96/255.255.255.240
24.15150 +216.248.61.64/255.255.255.192
24.15151 +216.248.139.96/255.255.255.224
24.15152 +216.248.142.96/255.255.255.224
24.15153 +216.248.149.176/255.255.255.248
24.15154 +216.250.66.240/255.255.255.248
24.15155 +216.250.87.192/255.255.255.224
24.15156 +216.250.192.0/255.255.255.0
24.15157 +216.251.233.0/255.255.255.0
24.15158 +216.251.239.80/255.255.255.248
24.15159 +216.251.239.96/255.255.255.224
24.15160 +216.253.88.160/255.255.255.240
24.15161 +216.253.166.224/255.255.255.224
24.15162 +216.253.191.80/255.255.255.248
24.15163 +216.253.218.224/255.255.255.224
24.15164 +216.253.232.64/255.255.255.192
24.15165 +216.253.251.208/255.255.255.248
24.15166 +216.254.61.136/255.255.255.248
24.15167 +216.254.93.32/255.255.255.224
24.15168 +216.254.94.0/255.255.255.128
24.15169 +216.255.127.128/255.255.255.224
24.15170 +217.5.153.0/255.255.255.0
24.15171 +217.5.156.64/255.255.255.248
24.15172 +217.5.200.224/255.255.255.240
24.15173 +217.5.215.48/255.255.255.248
24.15174 +217.5.219.112/255.255.255.240
24.15175 +217.6.0.112/255.255.255.248
24.15176 +217.6.8.112/255.255.255.240
24.15177 +217.6.8.216/255.255.255.248
24.15178 +217.6.20.128/255.255.255.248
24.15179 +217.6.33.176/255.255.255.248
24.15180 +217.6.73.72/255.255.255.248
24.15181 +217.6.87.192/255.255.255.248
24.15182 +217.6.130.48/255.255.255.248
24.15183 +217.6.136.192/255.255.255.240
24.15184 +217.6.160.160/255.255.255.248
24.15185 +217.6.160.192/255.255.255.192
24.15186 +217.6.186.48/255.255.255.248
24.15187 +217.6.219.88/255.255.255.248
24.15188 +217.6.229.184/255.255.255.248
24.15189 +217.7.3.104/255.255.255.248
24.15190 +217.7.11.224/255.255.255.248
24.15191 +217.7.17.0/255.255.255.0
24.15192 +217.7.65.168/255.255.255.248
24.15193 +217.7.96.24/255.255.255.248
24.15194 +217.7.97.0/255.255.255.0
24.15195 +217.7.114.248/255.255.255.248
24.15196 +217.7.125.192/255.255.255.248
24.15197 +217.7.128.112/255.255.255.248
24.15198 +217.7.147.112/255.255.255.248
24.15199 +217.7.147.216/255.255.255.248
24.15200 +217.7.171.112/255.255.255.248
24.15201 +217.8.156.208/255.255.255.240
24.15202 +217.8.164.176/255.255.255.240
24.15203 +217.8.175.0/255.255.255.0
24.15204 +217.9.97.16/255.255.255.240
24.15205 +217.9.126.56/255.255.255.248
24.15206 +217.10.12.160/255.255.255.240
24.15207 +217.10.79.248/255.255.255.248
24.15208 +217.10.221.224/255.255.255.224
24.15209 +217.11.39.32/255.255.255.248
24.15210 +217.11.144.56/255.255.255.248
24.15211 +217.13.31.168/255.255.255.248
24.15212 +217.13.140.112/255.255.255.248
24.15213 +217.13.143.240/255.255.255.248
24.15214 +217.13.144.8/255.255.255.248
24.15215 +217.14.217.104/255.255.255.248
24.15216 +217.14.217.160/255.255.255.248
24.15217 +217.15.224.0/255.255.240.0
24.15218 +217.17.32.0/255.255.253.0
24.15219 +217.17.46.216/255.255.255.248
24.15220 +217.17.196.96/255.255.255.240
24.15221 +217.18.16.0/255.255.240.0
24.15222 +217.19.69.0/255.255.255.240
24.15223 +217.19.170.128/255.255.255.224
24.15224 +217.19.187.0/255.255.255.240
24.15225 +217.19.187.64/255.255.255.216
24.15226 +217.19.189.136/255.255.255.248
24.15227 +217.23.55.48/255.255.255.240
24.15228 +217.23.171.80/255.255.255.224
24.15229 +217.23.185.40/255.255.255.240
24.15230 +217.24.12.48/255.255.255.248
24.15231 +217.26.79.0/255.255.255.224
24.15232 +217.27.95.208/255.255.255.248
24.15233 +217.31.72.48/255.255.255.248
24.15234 +217.31.172.96/255.255.255.248
24.15235 +217.32.201.64/255.255.255.224
24.15236 +217.32.202.176/255.255.255.240
24.15237 +217.32.204.128/255.255.255.224
24.15238 +217.33.0.16/255.255.255.240
24.15239 +217.33.5.0/255.255.255.0
24.15240 +217.33.25.176/255.255.255.248
24.15241 +217.33.30.32/255.255.255.240
24.15242 +217.33.73.112/255.255.255.240
24.15243 +217.33.73.224/255.255.255.224
24.15244 +217.33.96.160/255.255.255.248
24.15245 +217.33.193.144/255.255.255.240
24.15246 +217.33.197.32/255.255.255.224
24.15247 +217.33.199.0/255.255.254.112
24.15248 +217.33.219.192/255.255.255.224
24.15249 +217.33.232.168/255.255.255.248
24.15250 +217.33.252.128/255.255.255.128
24.15251 +217.33.255.0/255.255.255.0
24.15252 +217.35.119.208/255.255.255.240
24.15253 +217.37.50.72/255.255.255.248
24.15254 +217.37.151.16/255.255.255.248
24.15255 +217.37.153.112/255.255.255.240
24.15256 +217.37.192.32/255.255.255.248
24.15257 +217.40.79.232/255.255.255.248
24.15258 +217.40.95.216/255.255.255.248
24.15259 +217.40.103.24/255.255.255.248
24.15260 +217.41.240.224/255.255.255.224
24.15261 +217.41.242.160/255.255.255.224
24.15262 +217.45.225.96/255.255.255.248
24.15263 +217.46.164.120/255.255.255.248
24.15264 +217.46.192.200/255.255.255.248
24.15265 +217.56.1.144/255.255.255.248
24.15266 +217.56.1.160/255.255.255.224
24.15267 +217.56.1.192/255.255.255.224
24.15268 +217.56.5.0/255.255.255.248
24.15269 +217.56.16.144/255.255.255.240
24.15270 +217.56.23.200/255.255.255.248
24.15271 +217.56.25.80/255.255.255.248
24.15272 +217.56.29.192/255.255.255.224
24.15273 +217.56.32.32/255.255.255.224
24.15274 +217.56.32.160/255.255.255.248
24.15275 +217.56.44.24/255.255.255.248
24.15276 +217.56.44.96/255.255.255.224
24.15277 +217.56.44.224/255.255.255.224
24.15278 +217.56.46.32/255.255.255.224
24.15279 +217.56.49.48/255.255.255.248
24.15280 +217.56.51.192/255.255.255.224
24.15281 +217.56.55.96/255.255.255.224
24.15282 +217.56.66.32/255.255.255.224
24.15283 +217.56.67.168/255.255.255.248
24.15284 +217.56.73.136/255.255.255.248
24.15285 +217.56.77.16/255.255.255.248
24.15286 +217.56.77.24/255.255.255.248
24.15287 +217.56.77.32/255.255.255.224
24.15288 +217.56.77.64/255.255.255.248
24.15289 +217.56.77.72/255.255.255.248
24.15290 +217.56.77.80/255.255.255.248
24.15291 +217.56.77.88/255.255.255.248
24.15292 +217.56.77.96/255.255.255.248
24.15293 +217.56.77.104/255.255.255.248
24.15294 +217.56.77.128/255.255.255.248
24.15295 +217.56.77.136/255.255.255.248
24.15296 +217.56.77.144/255.255.255.248
24.15297 +217.56.77.152/255.255.255.248
24.15298 +217.56.77.160/255.255.255.248
24.15299 +217.56.77.168/255.255.255.248
24.15300 +217.56.77.200/255.255.255.248
24.15301 +217.56.78.224/255.255.255.224
24.15302 +217.56.84.248/255.255.255.248
24.15303 +217.56.87.160/255.255.255.240
24.15304 +217.56.87.184/255.255.255.248
24.15305 +217.56.89.56/255.255.255.248
24.15306 +217.56.95.224/255.255.255.248
24.15307 +217.56.102.160/255.255.255.248
24.15308 +217.56.104.0/255.255.255.240
24.15309 +217.56.104.80/255.255.255.240
24.15310 +217.56.109.192/255.255.255.240
24.15311 +217.56.111.192/255.255.255.248
24.15312 +217.56.114.112/255.255.255.248
24.15313 +217.56.200.144/255.255.255.240
24.15314 +217.56.207.16/255.255.255.240
24.15315 +217.56.211.96/255.255.255.240
24.15316 +217.56.223.232/255.255.255.248
24.15317 +217.56.227.192/255.255.255.240
24.15318 +217.56.228.192/255.255.255.224
24.15319 +217.56.229.120/255.255.255.240
24.15320 +217.56.229.136/255.255.255.248
24.15321 +217.56.229.200/255.255.255.248
24.15322 +217.56.229.208/255.255.255.248
24.15323 +217.56.229.216/255.255.255.248
24.15324 +217.56.230.224/255.255.255.248
24.15325 +217.56.234.48/255.255.255.248
24.15326 +217.57.2.64/255.255.255.248
24.15327 +217.57.2.72/255.255.255.248
24.15328 +217.57.2.80/255.255.255.248
24.15329 +217.57.2.152/255.255.255.248
24.15330 +217.57.4.156/255.255.255.244
24.15331 +217.57.8.176/255.255.255.248
24.15332 +217.57.10.16/255.255.255.248
24.15333 +217.57.18.56/255.255.255.248
24.15334 +217.57.20.8/255.255.255.248
24.15335 +217.57.23.184/255.255.255.248
24.15336 +217.57.23.192/255.255.255.248
24.15337 +217.57.26.56/255.255.255.248
24.15338 +217.57.27.160/255.255.255.224
24.15339 +217.57.30.104/255.255.255.248
24.15340 +217.57.31.64/255.255.255.192
24.15341 +217.57.31.184/255.255.255.248
24.15342 +217.57.39.48/255.255.255.248
24.15343 +217.57.39.56/255.255.255.248
24.15344 +217.57.43.0/255.255.255.240
24.15345 +217.57.45.128/255.255.255.240
24.15346 +217.57.47.0/255.255.255.192
24.15347 +217.57.47.64/255.255.255.240
24.15348 +217.57.47.208/255.255.255.240
24.15349 +217.57.48.160/255.255.255.248
24.15350 +217.57.61.208/255.255.255.240
24.15351 +217.57.66.120/255.255.255.248
24.15352 +217.57.110.192/255.255.255.244
24.15353 +217.57.113.160/255.255.255.240
24.15354 +217.57.114.208/255.255.255.248
24.15355 +217.57.139.8/255.255.255.248
24.15356 +217.57.144.144/255.255.255.248
24.15357 +217.57.147.64/255.255.255.224
24.15358 +217.57.147.96/255.255.255.240
24.15359 +217.57.148.32/255.255.255.224
24.15360 +217.57.158.216/255.255.255.248
24.15361 +217.57.164.48/255.255.255.240
24.15362 +217.57.166.88/255.255.255.248
24.15363 +217.57.166.96/255.255.255.248
24.15364 +217.57.166.104/255.255.255.248
24.15365 +217.57.166.112/255.255.255.248
24.15366 +217.57.166.120/255.255.255.248
24.15367 +217.58.1.224/255.255.255.248
24.15368 +217.58.4.48/255.255.255.248
24.15369 +217.58.19.96/255.255.255.240
24.15370 +217.58.23.48/255.255.255.248
24.15371 +217.58.23.64/255.255.255.224
24.15372 +217.58.23.96/255.255.255.248
24.15373 +217.58.27.48/255.255.255.248
24.15374 +217.58.37.216/255.255.255.248
24.15375 +217.58.39.80/255.255.255.240
24.15376 +217.58.41.128/255.255.255.248
24.15377 +217.58.50.128/255.255.255.248
24.15378 +217.58.64.56/255.255.255.248
24.15379 +217.58.72.152/255.255.255.248
24.15380 +217.58.90.0/255.255.255.248
24.15381 +217.58.129.104/255.255.255.248
24.15382 +217.58.129.216/255.255.255.248
24.15383 +217.58.132.16/255.255.255.248
24.15384 +217.58.132.192/255.255.255.224
24.15385 +217.58.141.192/255.255.255.224
24.15386 +217.58.145.24/255.255.255.248
24.15387 +217.58.145.32/255.255.255.248
24.15388 +217.58.146.80/255.255.255.248
24.15389 +217.58.152.192/255.255.255.224
24.15390 +217.58.160.40/255.255.255.240
24.15391 +217.58.160.160/255.255.255.224
24.15392 +217.58.163.32/255.255.255.224
24.15393 +217.58.163.96/255.255.255.224
24.15394 +217.58.163.128/255.255.255.224
24.15395 +217.58.167.96/255.255.255.224
24.15396 +217.58.169.0/255.255.255.200
24.15397 +217.58.192.152/255.255.255.248
24.15398 +217.58.193.176/255.255.255.240
24.15399 +217.58.193.224/255.255.255.248
24.15400 +217.58.193.232/255.255.255.248
24.15401 +217.58.193.248/255.255.255.248
24.15402 +217.58.199.128/255.255.255.240
24.15403 +217.58.199.176/255.255.255.240
24.15404 +217.58.200.128/255.255.255.224
24.15405 +217.58.201.8/255.255.255.248
24.15406 +217.58.201.48/255.255.255.248
24.15407 +217.58.202.0/255.255.255.224
24.15408 +217.58.202.32/255.255.255.248
24.15409 +217.58.203.64/255.255.255.192
24.15410 +217.58.204.0/255.255.255.240
24.15411 +217.58.204.16/255.255.255.248
24.15412 +217.58.204.24/255.255.255.248
24.15413 +217.58.204.32/255.255.255.224
24.15414 +217.58.204.64/255.255.255.248
24.15415 +217.58.204.120/255.255.255.248
24.15416 +217.58.204.128/255.255.255.248
24.15417 +217.58.205.144/255.255.255.240
24.15418 +217.58.205.248/255.255.255.248
24.15419 +217.58.207.80/255.255.255.240
24.15420 +217.58.207.160/255.255.255.224
24.15421 +217.58.211.0/255.255.255.248
24.15422 +217.58.211.8/255.255.255.248
24.15423 +217.58.211.16/255.255.255.248
24.15424 +217.58.211.24/255.255.255.248
24.15425 +217.58.211.32/255.255.255.248
24.15426 +217.58.211.40/255.255.255.248
24.15427 +217.58.211.48/255.255.255.248
24.15428 +217.58.211.56/255.255.255.248
24.15429 +217.58.211.64/255.255.255.248
24.15430 +217.58.211.72/255.255.255.248
24.15431 +217.58.211.112/255.255.255.248
24.15432 +217.58.213.56/255.255.255.248
24.15433 +217.58.214.0/255.255.255.248
24.15434 +217.58.214.8/255.255.255.248
24.15435 +217.58.214.16/255.255.255.248
24.15436 +217.58.214.24/255.255.255.248
24.15437 +217.58.214.32/255.255.255.248
24.15438 +217.58.214.56/255.255.255.248
24.15439 +217.58.214.96/255.255.255.240
24.15440 +217.58.214.112/255.255.255.248
24.15441 +217.58.214.160/255.255.255.224
24.15442 +217.58.214.224/255.255.255.240
24.15443 +217.58.215.160/255.255.255.224
24.15444 +217.58.215.240/255.255.255.248
24.15445 +217.58.217.144/255.255.255.240
24.15446 +217.58.223.0/255.255.255.28
24.15447 +217.59.3.144/255.255.255.248
24.15448 +217.59.3.152/255.255.255.248
24.15449 +217.59.3.192/255.255.255.248
24.15450 +217.59.5.192/255.255.255.224
24.15451 +217.59.10.48/255.255.255.248
24.15452 +217.59.11.64/255.255.255.248
24.15453 +217.59.13.160/255.255.255.240
24.15454 +217.59.13.176/255.255.255.240
24.15455 +217.59.14.128/255.255.255.240
24.15456 +217.59.15.240/255.255.255.248
24.15457 +217.59.17.56/255.255.255.248
24.15458 +217.59.18.32/255.255.255.224
24.15459 +217.59.18.192/255.255.255.248
24.15460 +217.59.19.0/255.255.255.240
24.15461 +217.59.21.24/255.255.255.248
24.15462 +217.59.22.144/255.255.255.248
24.15463 +217.59.24.80/255.255.255.240
24.15464 +217.59.24.96/255.255.255.224
24.15465 +217.59.26.96/255.255.255.240
24.15466 +217.59.28.56/255.255.255.248
24.15467 +217.59.30.48/255.255.255.248
24.15468 +217.59.31.96/255.255.255.240
24.15469 +217.59.32.128/255.255.255.232
24.15470 +217.59.32.176/255.255.255.240
24.15471 +217.59.32.192/255.255.255.248
24.15472 +217.59.32.200/255.255.255.248
24.15473 +217.59.32.208/255.255.255.248
24.15474 +217.59.32.216/255.255.255.248
24.15475 +217.59.36.0/255.255.255.248
24.15476 +217.59.41.0/255.255.255.224
24.15477 +217.59.43.224/255.255.255.248
24.15478 +217.59.44.96/255.255.255.240
24.15479 +217.59.44.224/255.255.255.224
24.15480 +217.59.45.48/255.255.255.248
24.15481 +217.59.45.56/255.255.255.248
24.15482 +217.59.49.192/255.255.255.248
24.15483 +217.59.49.224/255.255.255.224
24.15484 +217.59.54.24/255.255.255.248
24.15485 +217.59.54.32/255.255.255.248
24.15486 +217.59.54.40/255.255.255.248
24.15487 +217.59.54.64/255.255.255.224
24.15488 +217.59.54.112/255.255.255.248
24.15489 +217.59.54.128/255.255.255.240
24.15490 +217.59.56.192/255.255.255.224
24.15491 +217.59.59.96/255.255.255.224
24.15492 +217.59.63.0/255.255.255.248
24.15493 +217.59.63.8/255.255.255.248
24.15494 +217.59.63.16/255.255.255.248
24.15495 +217.59.64.96/255.255.255.240
24.15496 +217.59.65.16/255.255.255.248
24.15497 +217.59.67.112/255.255.255.240
24.15498 +217.59.70.72/255.255.255.244
24.15499 +217.59.71.104/255.255.255.248
24.15500 +217.59.77.48/255.255.255.248
24.15501 +217.59.77.64/255.255.255.224
24.15502 +217.59.78.192/255.255.255.240
24.15503 +217.59.80.120/255.255.255.248
24.15504 +217.59.105.204/255.255.255.244
24.15505 +217.59.128.32/255.255.255.224
24.15506 +217.59.128.128/255.255.255.240
24.15507 +217.59.130.160/255.255.255.240
24.15508 +217.59.130.176/255.255.255.240
24.15509 +217.59.130.192/255.255.255.224
24.15510 +217.59.130.224/255.255.255.248
24.15511 +217.59.131.0/255.255.255.224
24.15512 +217.59.131.32/255.255.255.248
24.15513 +217.59.134.48/255.255.255.240
24.15514 +217.59.134.96/255.255.255.240
24.15515 +217.59.134.136/255.255.255.248
24.15516 +217.59.134.192/255.255.255.224
24.15517 +217.59.135.96/255.255.255.224
24.15518 +217.59.135.128/255.255.255.248
24.15519 +217.59.135.160/255.255.255.224
24.15520 +217.59.136.144/255.255.255.240
24.15521 +217.59.138.216/255.255.255.248
24.15522 +217.59.138.224/255.255.255.224
24.15523 +217.59.139.128/255.255.255.240
24.15524 +217.59.140.144/255.255.255.240
24.15525 +217.59.141.96/255.255.255.240
24.15526 +217.59.145.96/255.255.255.224
24.15527 +217.59.145.224/255.255.255.224
24.15528 +217.59.146.0/255.255.255.224
24.15529 +217.59.146.32/255.255.255.240
24.15530 +217.59.148.8/255.255.255.248
24.15531 +217.59.148.16/255.255.255.240
24.15532 +217.59.148.72/255.255.255.248
24.15533 +217.59.148.96/255.255.255.224
24.15534 +217.59.148.240/255.255.255.240
24.15535 +217.59.149.184/255.255.255.248
24.15536 +217.59.149.192/255.255.255.248
24.15537 +217.59.149.200/255.255.255.248
24.15538 +217.59.149.208/255.255.255.240
24.15539 +217.59.149.224/255.255.255.224
24.15540 +217.59.150.40/255.255.255.248
24.15541 +217.59.150.128/255.255.255.224
24.15542 +217.59.151.0/255.255.255.224
24.15543 +217.59.151.144/255.255.255.240
24.15544 +217.59.152.32/255.255.255.224
24.15545 +217.59.152.72/255.255.255.248
24.15546 +217.59.152.96/255.255.255.224
24.15547 +217.59.152.128/255.255.255.224
24.15548 +217.59.153.0/255.255.255.248
24.15549 +217.59.153.8/255.255.255.248
24.15550 +217.59.153.16/255.255.255.248
24.15551 +217.59.153.248/255.255.255.248
24.15552 +217.59.154.0/255.255.255.240
24.15553 +217.59.154.16/255.255.255.240
24.15554 +217.59.154.32/255.255.255.248
24.15555 +217.59.154.48/255.255.255.240
24.15556 +217.59.155.16/255.255.255.248
24.15557 +217.59.155.32/255.255.255.240
24.15558 +217.59.157.0/255.255.255.240
24.15559 +217.59.157.160/255.255.255.248
24.15560 +217.59.157.168/255.255.255.248
24.15561 +217.59.157.176/255.255.255.248
24.15562 +217.59.157.184/255.255.255.248
24.15563 +217.59.159.112/255.255.255.240
24.15564 +217.59.159.160/255.255.255.224
24.15565 +217.59.160.8/255.255.255.248
24.15566 +217.59.160.192/255.255.255.192
24.15567 +217.59.161.0/255.255.255.224
24.15568 +217.59.161.32/255.255.255.248
24.15569 +217.59.161.64/255.255.255.248
24.15570 +217.59.161.160/255.255.255.224
24.15571 +217.59.161.192/255.255.255.224
24.15572 +217.59.162.176/255.255.255.248
24.15573 +217.59.162.184/255.255.255.248
24.15574 +217.59.162.192/255.255.255.248
24.15575 +217.59.162.200/255.255.255.248
24.15576 +217.59.162.208/255.255.255.248
24.15577 +217.59.163.16/255.255.255.240
24.15578 +217.59.163.64/255.255.255.224
24.15579 +217.59.163.160/255.255.255.224
24.15580 +217.59.163.208/255.255.255.248
24.15581 +217.59.165.128/255.255.255.240
24.15582 +217.59.165.144/255.255.255.224
24.15583 +217.59.165.176/255.255.255.240
24.15584 +217.59.166.16/255.255.255.248
24.15585 +217.59.166.32/255.255.255.224
24.15586 +217.59.167.144/255.255.255.248
24.15587 +217.59.168.48/255.255.255.240
24.15588 +217.59.168.184/255.255.255.248
24.15589 +217.59.168.192/255.255.255.192
24.15590 +217.59.169.160/255.255.255.240
24.15591 +217.59.169.176/255.255.255.248
24.15592 +217.59.170.128/255.255.255.224
24.15593 +217.59.170.160/255.255.255.248
24.15594 +217.59.170.168/255.255.255.248
24.15595 +217.59.170.176/255.255.255.240
24.15596 +217.59.170.192/255.255.255.224
24.15597 +217.59.172.192/255.255.255.224
24.15598 +217.59.172.224/255.255.255.240
24.15599 +217.59.172.240/255.255.255.240
24.15600 +217.59.178.248/255.255.255.248
24.15601 +217.59.179.0/255.255.255.0
24.15602 +217.59.181.0/255.255.255.248
24.15603 +217.59.181.8/255.255.255.248
24.15604 +217.59.181.16/255.255.255.248
24.15605 +217.59.181.24/255.255.255.248
24.15606 +217.59.181.32/255.255.255.248
24.15607 +217.59.181.40/255.255.255.248
24.15608 +217.59.181.64/255.255.255.192
24.15609 +217.59.192.64/255.255.255.224
24.15610 +217.59.197.232/255.255.255.248
24.15611 +217.59.197.248/255.255.255.248
24.15612 +217.59.198.128/255.255.255.240
24.15613 +217.59.200.56/255.255.255.248
24.15614 +217.59.201.0/255.255.255.224
24.15615 +217.59.201.48/255.255.255.240
24.15616 +217.59.201.80/255.255.255.240
24.15617 +217.59.201.96/255.255.255.224
24.15618 +217.59.202.32/255.255.255.224
24.15619 +217.59.203.32/255.255.255.248
24.15620 +217.59.204.32/255.255.255.224
24.15621 +217.59.204.184/255.255.255.248
24.15622 +217.59.204.192/255.255.255.224
24.15623 +217.59.206.128/255.255.255.240
24.15624 +217.59.207.32/255.255.255.248
24.15625 +217.59.207.40/255.255.255.248
24.15626 +217.59.210.96/255.255.255.244
24.15627 +217.64.113.0/255.255.255.240
24.15628 +217.64.169.208/255.255.255.248
24.15629 +217.64.230.216/255.255.255.248
24.15630 +217.67.199.176/255.255.255.240
24.15631 +217.68.16.0/255.255.255.0
24.15632 +217.69.246.0/255.255.255.0
24.15633 +217.75.74.224/255.255.255.248
24.15634 +217.75.98.208/255.255.255.240
24.15635 +217.76.100.32/255.255.255.224
24.15636 +217.89.66.8/255.255.255.248
24.15637 +217.89.74.88/255.255.255.248
24.15638 +217.89.88.192/255.255.255.224
24.15639 +217.89.94.192/255.255.255.248
24.15640 +217.89.132.56/255.255.255.248
24.15641 +217.89.135.200/255.255.255.248
24.15642 +217.89.138.0/255.255.254.248
24.15643 +217.89.141.208/255.255.255.248
24.15644 +217.96.24.144/255.255.255.240
24.15645 +217.97.164.0/255.255.255.128
24.15646 +217.101.168.224/255.255.255.224
24.15647 +217.109.146.128/255.255.255.192
24.15648 +217.109.147.168/255.255.255.248
24.15649 +217.109.155.64/255.255.255.192
24.15650 +217.109.190.0/255.255.254.0
24.15651 +217.110.5.80/255.255.255.248
24.15652 +217.110.5.176/255.255.255.248
24.15653 +217.110.5.192/255.255.255.248
24.15654 +217.110.12.224/255.255.255.248
24.15655 +217.110.14.168/255.255.255.248
24.15656 +217.110.18.208/255.255.255.248
24.15657 +217.110.21.224/255.255.255.248
24.15658 +217.110.29.32/255.255.255.248
24.15659 +217.110.29.232/255.255.255.248
24.15660 +217.110.30.216/255.255.255.248
24.15661 +217.110.31.0/255.255.255.240
24.15662 +217.110.40.184/255.255.255.248
24.15663 +217.110.45.96/255.255.255.248
24.15664 +217.110.52.0/255.255.255.0
24.15665 +217.110.83.48/255.255.255.240
24.15666 +217.110.104.32/255.255.255.240
24.15667 +217.110.107.24/255.255.255.248
24.15668 +217.110.109.64/255.255.255.240
24.15669 +217.110.123.32/255.255.255.240
24.15670 +217.110.124.120/255.255.255.248
24.15671 +217.110.154.96/255.255.255.224
24.15672 +217.110.197.56/255.255.255.248
24.15673 +217.110.198.216/255.255.255.248
24.15674 +217.110.199.96/255.255.255.248
24.15675 +217.110.199.176/255.255.255.248
24.15676 +217.110.201.32/255.255.255.248
24.15677 +217.110.208.152/255.255.255.248
24.15678 +217.110.209.160/255.255.255.248
24.15679 +217.110.223.40/255.255.255.248
24.15680 +217.110.228.152/255.255.255.248
24.15681 +217.111.5.160/255.255.255.224
24.15682 +217.111.37.64/255.255.255.248
24.15683 +217.111.37.88/255.255.255.248
24.15684 +217.111.48.0/255.255.255.240
24.15685 +217.111.49.0/255.255.255.0
24.15686 +217.111.50.48/255.255.255.240
24.15687 +217.113.38.176/255.255.255.248
24.15688 +217.113.38.184/255.255.255.248
24.15689 +217.113.177.48/255.255.255.248
24.15690 +217.115.132.72/255.255.255.248
24.15691 +217.115.132.104/255.255.255.248
24.15692 +217.115.155.224/255.255.255.240
24.15693 +217.115.158.176/255.255.255.248
24.15694 +217.116.8.112/255.255.255.248
24.15695 +217.117.146.0/255.255.255.240
24.15696 +217.118.227.128/255.255.255.208
24.15697 +217.118.230.176/255.255.255.248
24.15698 +217.141.59.72/255.255.255.248
24.15699 +217.141.144.128/255.255.255.240
24.15700 +217.141.144.240/255.255.255.248
24.15701 +217.141.146.72/255.255.255.244
24.15702 +217.141.151.144/255.255.255.248
24.15703 +217.141.180.16/255.255.255.248
24.15704 +217.146.142.16/255.255.255.240
24.15705 +217.146.142.128/255.255.255.248
24.15706 +217.147.100.80/255.255.255.248
24.15707 +217.147.100.152/255.255.255.216
24.15708 +217.147.130.128/255.255.255.248
24.15709 +217.149.34.192/255.255.255.240
24.15710 +217.149.34.224/255.255.255.224
24.15711 +217.149.36.16/255.255.255.240
24.15712 +217.149.224.0/255.255.240.0
24.15713 +217.153.34.160/255.255.255.248
24.15714 +217.153.90.208/255.255.255.240
24.15715 +217.153.132.48/255.255.255.240
24.15716 +217.154.24.192/255.255.255.240
24.15717 +217.154.56.48/255.255.255.248
24.15718 +217.154.90.184/255.255.255.248
24.15719 +217.154.94.144/255.255.255.248
24.15720 +217.154.95.136/255.255.255.248
24.15721 +217.154.103.128/255.255.255.192
24.15722 +217.154.104.200/255.255.255.248
24.15723 +217.154.108.224/255.255.255.224
24.15724 +217.154.110.88/255.255.255.248
24.15725 +217.154.110.240/255.255.255.248
24.15726 +217.154.125.96/255.255.255.224
24.15727 +217.154.136.96/255.255.255.248
24.15728 +217.154.136.184/255.255.255.248
24.15729 +217.154.142.0/255.255.255.0
24.15730 +217.154.145.32/255.255.255.248
24.15731 +217.154.151.160/255.255.255.248
24.15732 +217.154.176.8/255.255.255.248
24.15733 +217.154.192.56/255.255.255.248
24.15734 +217.154.194.192/255.255.255.248
24.15735 +217.154.195.120/255.255.255.248
24.15736 +217.154.204.24/255.255.255.248
24.15737 +217.154.204.32/255.255.255.248
24.15738 +217.154.205.160/255.255.255.240
24.15739 +217.154.210.184/255.255.255.240
24.15740 +217.154.218.72/255.255.255.248
24.15741 +217.154.220.200/255.255.255.248
24.15742 +217.154.229.136/255.255.255.248
24.15743 +217.154.238.144/255.255.255.248
24.15744 +217.154.239.224/255.255.255.248
24.15745 +217.155.0.80/255.255.255.248
24.15746 +217.155.73.56/255.255.255.248
24.15747 +217.155.113.184/255.255.255.248
24.15748 +217.155.119.64/255.255.255.248
24.15749 +217.155.120.192/255.255.255.224
24.15750 +217.155.156.136/255.255.255.248
24.15751 +217.155.184.184/255.255.255.248
24.15752 +217.155.221.248/255.255.255.248
24.15753 +217.155.227.144/255.255.255.248
24.15754 +217.157.43.216/255.255.255.248
24.15755 +217.158.45.144/255.255.255.240
24.15756 +217.158.72.64/255.255.255.240
24.15757 +217.158.95.0/255.255.255.240
24.15758 +217.158.98.48/255.255.255.240
24.15759 +217.158.112.224/255.255.255.224
24.15760 +217.158.152.16/255.255.255.240
24.15761 +217.158.164.16/255.255.255.240
24.15762 +217.158.169.0/255.255.255.0
24.15763 +217.158.178.224/255.255.255.240
24.15764 +217.158.194.176/255.255.255.240
24.15765 +217.161.1.192/255.255.255.240
24.15766 +217.161.87.240/255.255.255.248
24.15767 +217.166.34.0/255.255.255.0
24.15768 +217.166.52.64/255.255.255.240
24.15769 +217.166.89.24/255.255.255.248
24.15770 +217.166.100.192/255.255.255.248
24.15771 +217.166.124.240/255.255.255.248
24.15772 +217.166.133.56/255.255.255.232
24.15773 +217.167.0.16/255.255.255.248
24.15774 +217.167.1.24/255.255.255.248
24.15775 +217.167.17.72/255.255.255.248
24.15776 +217.167.27.224/255.255.255.248
24.15777 +217.167.41.184/255.255.255.248
24.15778 +217.167.43.152/255.255.255.216
24.15779 +217.167.48.56/255.255.255.248
24.15780 +217.167.50.8/255.255.255.248
24.15781 +217.167.120.16/255.255.255.232
24.15782 +217.167.182.1/255.255.255.1
24.15783 +217.167.201.96/255.255.255.224
24.15784 +217.167.211.24/255.255.255.248
24.15785 +217.168.235.0/255.255.255.248
24.15786 +217.169.4.160/255.255.255.240
24.15787 +217.169.10.112/255.255.255.240
24.15788 +217.169.11.224/255.255.255.240
24.15789 +217.169.25.64/255.255.255.248
24.15790 +217.169.31.96/255.255.255.224
24.15791 +217.169.34.216/255.255.255.248
24.15792 +217.169.42.128/255.255.255.224
24.15793 +217.173.135.208/255.255.255.240
24.15794 +217.174.199.80/255.255.255.240
24.15795 +217.174.220.0/255.255.255.128
24.15796 +217.175.243.128/255.255.255.192
24.15797 +217.192.230.0/255.255.254.0
24.15798 +217.193.131.232/255.255.255.248
24.15799 +217.193.140.224/255.255.255.248
24.15800 +217.193.145.120/255.255.255.248
24.15801 +217.193.145.184/255.255.255.248
24.15802 +217.194.79.32/255.255.255.224
24.15803 +217.196.229.168/255.255.255.248
24.15804 +217.196.229.184/255.255.255.248
24.15805 +217.196.235.72/255.255.255.248
24.15806 +217.196.238.208/255.255.255.240
24.15807 +217.196.239.0/255.255.255.248
24.15808 +217.196.239.80/255.255.255.248
24.15809 +217.196.240.112/255.255.255.248
24.15810 +217.197.166.80/255.255.255.248
24.15811 +217.199.32.32/255.255.255.248
24.15812 +217.199.145.40/255.255.255.248
24.15813 +217.199.155.0/255.255.255.128
24.15814 +217.199.167.16/255.255.255.240
24.15815 +217.199.180.64/255.255.255.240
24.15816 +217.199.180.224/255.255.255.224
24.15817 +217.204.1.64/255.255.255.248
24.15818 +217.204.1.96/255.255.255.248
24.15819 +217.204.2.240/255.255.255.240
24.15820 +217.204.3.0/255.255.255.240
24.15821 +217.204.5.192/255.255.255.240
24.15822 +217.204.69.208/255.255.255.240
24.15823 +217.204.75.48/255.255.255.240
24.15824 +217.204.75.96/255.255.255.240
24.15825 +217.204.75.112/255.255.255.240
24.15826 +217.204.88.160/255.255.255.240
24.15827 +217.204.112.0/255.255.255.128
24.15828 +217.204.114.248/255.255.255.248
24.15829 +217.204.160.192/255.255.255.240
24.15830 +217.204.165.232/255.255.255.248
24.15831 +217.204.167.64/255.255.255.248
24.15832 +217.204.171.224/255.255.255.240
24.15833 +217.204.194.144/255.255.255.240
24.15834 +217.204.199.144/255.255.255.240
24.15835 +217.204.217.160/255.255.255.248
24.15836 +217.204.242.32/255.255.255.240
24.15837 +217.205.36.192/255.255.255.240
24.15838 +217.205.45.48/255.255.255.240
24.15839 +217.205.86.40/255.255.255.248
24.15840 +217.205.87.144/255.255.255.240
24.15841 +217.205.102.224/255.255.255.240
24.15842 +217.205.104.240/255.255.255.248
24.15843 +217.205.108.120/255.255.255.248
24.15844 +217.205.109.48/255.255.255.240
24.15845 +217.205.109.64/255.255.255.248
24.15846 +217.205.146.88/255.255.255.248
24.15847 +217.205.162.192/255.255.255.224
24.15848 +217.206.32.160/255.255.255.240
24.15849 +217.206.36.160/255.255.255.240
24.15850 +217.206.38.192/255.255.255.248
24.15851 +217.206.40.48/255.255.255.248
24.15852 +217.206.43.112/255.255.255.240
24.15853 +217.206.45.176/255.255.255.248
24.15854 +217.206.47.112/255.255.255.240
24.15855 +217.206.50.48/255.255.255.240
24.15856 +217.206.86.208/255.255.255.240
24.15857 +217.206.87.56/255.255.255.248
24.15858 +217.206.98.160/255.255.255.248
24.15859 +217.206.120.176/255.255.255.240
24.15860 +217.206.142.192/255.255.255.240
24.15861 +217.206.144.128/255.255.255.240
24.15862 +217.206.160.48/255.255.255.240
24.15863 +217.206.161.80/255.255.255.240
24.15864 +217.206.162.224/255.255.255.224
24.15865 +217.206.164.176/255.255.255.248
24.15866 +217.206.166.160/255.255.255.224
24.15867 +217.206.185.184/255.255.255.248
24.15868 +217.206.194.24/255.255.255.248
24.15869 +217.206.197.64/255.255.255.248
24.15870 +217.206.199.24/255.255.255.248
24.15871 +217.206.208.176/255.255.255.240
24.15872 +217.206.221.208/255.255.255.240
24.15873 +217.207.13.144/255.255.255.240
24.15874 +217.207.17.240/255.255.255.240
24.15875 +217.207.20.64/255.255.255.248
24.15876 +217.207.33.0/255.255.255.240
24.15877 +217.207.33.200/255.255.255.248
24.15878 +217.207.34.192/255.255.255.240
24.15879 +217.207.37.176/255.255.255.240
24.15880 +217.207.80.112/255.255.255.248
24.15881 +217.207.80.128/255.255.255.240
24.15882 +217.207.82.160/255.255.255.248
24.15883 +217.207.84.8/255.255.255.248
24.15884 +217.207.84.192/255.255.255.240
24.15885 +217.207.102.80/255.255.255.240
24.15886 +217.207.114.176/255.255.255.240
24.15887 +217.207.130.96/255.255.255.248
24.15888 +217.207.144.176/255.255.255.240
24.15889 +217.207.148.144/255.255.255.248
24.15890 +217.207.161.176/255.255.255.240
24.15891 +217.207.162.32/255.255.255.248
24.15892 +217.207.164.128/255.255.255.240
24.15893 +217.207.169.128/255.255.255.192
24.15894 +217.207.176.144/255.255.255.240
24.15895 +217.207.177.176/255.255.255.240
24.15896 +217.207.188.136/255.255.255.248
24.15897 +217.207.190.32/255.255.255.240
24.15898 +217.207.190.80/255.255.255.240
24.15899 +217.207.192.192/255.255.255.240
24.15900 +217.207.198.168/255.255.255.248
24.15901 +217.207.206.144/255.255.255.240
24.15902 +217.207.210.144/255.255.255.240
24.15903 +217.207.236.128/255.255.255.240
24.15904 +217.207.237.232/255.255.255.248
24.15905 +217.207.240.192/255.255.255.248
24.15906 +217.207.241.152/255.255.255.248
24.15907 +217.207.242.96/255.255.255.240
24.15908 +217.207.242.216/255.255.255.232
24.15909 +217.207.244.0/255.255.255.248
24.15910 +217.207.246.96/255.255.255.248
24.15911 +217.207.246.192/255.255.255.240
24.15912 +217.207.247.232/255.255.255.248
24.15913 +217.207.253.96/255.255.255.248
24.15914 +217.220.5.224/255.255.255.224
24.15915 +217.220.105.176/255.255.255.248
24.15916 +217.220.106.200/255.255.255.248
24.15917 +217.220.147.32/255.255.255.240
24.15918 +217.220.152.144/255.255.255.216
24.15919 +217.220.154.40/255.255.255.232
24.15920 +217.220.240.240/255.255.255.248
24.15921 +217.220.244.136/255.255.255.248
24.15922 +217.221.36.128/255.255.255.248
24.15923 +217.222.23.232/255.255.255.248
24.15924 +217.222.63.64/255.255.255.240
24.15925 +217.222.158.112/255.255.255.232
24.15926 +217.222.159.96/255.255.255.248
24.15927 +217.222.159.120/255.255.255.248
24.15928 +217.222.195.40/255.255.255.248
24.15929 +217.222.208.224/255.255.255.248
24.15930 +217.223.33.56/255.255.255.248
24.15931 +217.223.33.144/255.255.255.248
24.15932 +217.223.42.224/255.255.255.248
24.15933 +217.223.68.200/255.255.255.248
24.15934 +217.223.72.48/255.255.255.248
24.15935 +217.223.72.208/255.255.255.248
24.15936 +217.223.90.0/255.255.255.248
24.15937 +217.223.91.0/255.255.255.224
24.15938 +217.223.158.120/255.255.255.248
24.15939 +217.223.158.152/255.255.255.248
24.15940 +217.223.171.128/255.255.255.248
24.15941 +217.223.198.48/255.255.255.248
24.15942 +217.223.201.56/255.255.255.248
24.15943 +217.223.213.16/255.255.255.248
24.15944 +217.223.227.96/255.255.255.240
24.15945 +217.237.171.144/255.255.255.248
24.15946 +217.237.177.64/255.255.255.248
24.15947 +217.243.175.72/255.255.255.248
24.15948 +218.1.118.168/255.255.255.248
24.15949 +218.2.112.152/255.255.255.248
24.15950 +218.3.20.80/255.255.255.240
24.15951 +218.3.74.192/255.255.255.192
24.15952 +218.3.78.224/255.255.255.240
24.15953 +218.3.91.48/255.255.255.240
24.15954 +218.3.95.32/255.255.255.240
24.15955 +218.3.95.48/255.255.255.240
24.15956 +218.3.95.128/255.255.255.240
24.15957 +218.3.96.128/255.255.255.224
24.15958 +218.3.114.96/255.255.255.224
24.15959 +218.3.141.192/255.255.255.240
24.15960 +218.4.90.240/255.255.255.248
24.15961 +218.4.203.56/255.255.255.248
24.15962 +218.4.204.0/255.255.255.224
24.15963 +218.4.236.0/255.255.255.240
24.15964 +218.5.83.160/255.255.255.240
24.15965 +218.5.85.64/255.255.255.240
24.15966 +218.5.98.120/255.255.255.248
24.15967 +218.7.28.0/255.255.255.248
24.15968 +218.7.75.0/255.255.255.0
24.15969 +218.7.229.128/255.255.255.128
24.15970 +218.10.230.0/255.255.255.192
24.15971 +218.10.230.192/255.255.255.192
24.15972 +218.10.239.0/255.255.255.0
24.15973 +218.15.26.32/255.255.255.248
24.15974 +218.15.95.96/255.255.255.224
24.15975 +218.21.32.248/255.255.255.248
24.15976 +218.26.225.160/255.255.255.248
24.15977 +218.28.0.72/255.255.255.248
24.15978 +218.28.0.208/255.255.255.240
24.15979 +218.28.16.144/255.255.255.240
24.15980 +218.28.22.48/255.255.255.240
24.15981 +218.28.25.48/255.255.255.240
24.15982 +218.28.43.16/255.255.255.240
24.15983 +218.28.51.48/255.255.255.248
24.15984 +218.28.138.32/255.255.255.240
24.15985 +218.31.21.24/255.255.255.248
24.15986 +218.31.35.120/255.255.255.248
24.15987 +218.31.43.24/255.255.255.248
24.15988 +218.31.43.40/255.255.255.248
24.15989 +218.31.95.48/255.255.255.240
24.15990 +218.31.124.224/255.255.255.248
24.15991 +218.36.48.192/255.255.255.192
24.15992 +218.36.98.0/255.255.255.192
24.15993 +218.38.249.64/255.255.255.192
24.15994 +218.42.144.0/255.255.240.0
24.15995 +218.54.132.0/255.255.255.0
24.15996 +218.55.21.0/255.255.255.192
24.15997 +218.55.27.0/255.255.255.128
24.15998 +218.56.158.192/255.255.255.224
24.15999 +218.57.131.136/255.255.255.248
24.16000 +218.57.141.0/255.255.255.248
24.16001 +218.57.176.0/255.255.255.248
24.16002 +218.57.236.40/255.255.255.240
24.16003 +218.62.14.72/255.255.255.248
24.16004 +218.63.194.64/255.255.255.192
24.16005 +218.63.195.0/255.255.255.192
24.16006 +218.63.195.128/255.255.255.192
24.16007 +218.63.243.24/255.255.255.248
24.16008 +218.67.78.80/255.255.255.240
24.16009 +218.69.93.80/255.255.255.240
24.16010 +218.75.11.160/255.255.255.248
24.16011 +218.75.19.192/255.255.255.248
24.16012 +218.75.24.192/255.255.255.248
24.16013 +218.75.34.40/255.255.255.248
24.16014 +218.75.51.40/255.255.255.248
24.16015 +218.75.61.248/255.255.255.248
24.16016 +218.75.70.184/255.255.255.248
24.16017 +218.75.104.224/255.255.255.240
24.16018 +218.78.208.0/255.255.255.128
24.16019 +218.80.225.68/255.255.255.248
24.16020 +218.85.129.200/255.255.255.248
24.16021 +218.85.131.48/255.255.255.248
24.16022 +218.86.63.56/255.255.255.248
24.16023 +218.90.166.72/255.255.255.248
24.16024 +218.90.213.136/255.255.255.248
24.16025 +218.90.239.240/255.255.255.248
24.16026 +218.91.99.120/255.255.255.248
24.16027 +218.91.210.0/255.255.255.224
24.16028 +218.92.9.0/255.255.255.192
24.16029 +218.92.200.192/255.255.255.224
24.16030 +218.93.11.224/255.255.255.248
24.16031 +218.93.17.16/255.255.255.240
24.16032 +218.94.31.104/255.255.255.248
24.16033 +218.97.164.48/255.255.255.240
24.16034 +218.97.180.224/255.255.255.224
24.16035 +218.103.16.184/255.255.255.248
24.16036 +218.103.30.56/255.255.255.248
24.16037 +218.103.71.216/255.255.255.248
24.16038 +218.103.74.96/255.255.255.224
24.16039 +218.103.94.208/255.255.255.248
24.16040 +218.108.16.176/255.255.255.248
24.16041 +218.108.18.64/255.255.255.248
24.16042 +218.108.18.80/255.255.255.240
24.16043 +218.108.18.128/255.255.255.248
24.16044 +218.108.18.192/255.255.255.248
24.16045 +218.108.25.168/255.255.255.248
24.16046 +218.108.37.16/255.255.255.240
24.16047 +218.108.39.32/255.255.255.240
24.16048 +218.108.39.64/255.255.255.240
24.16049 +218.108.39.80/255.255.255.240
24.16050 +218.108.88.104/255.255.255.248
24.16051 +218.110.0.0/255.255.0.0
24.16052 +218.185.85.0/255.255.255.0
24.16053 +218.185.127.40/255.255.255.248
24.16054 +218.192.8.0/255.255.252.0
24.16055 +218.202.158.128/255.255.255.248
24.16056 +218.216.64.0/255.255.240.0
24.16057 +218.232.228.192/255.255.255.192
24.16058 +218.244.40.96/255.255.255.224
24.16059 +218.246.117.64/255.255.255.192
24.16060 +219.76.202.208/255.255.255.248
24.16061 +219.76.229.248/255.255.255.248
24.16062 +219.76.231.208/255.255.255.248
24.16063 +219.88.107.64/255.255.255.240
24.16064 +219.97.233.176/255.255.255.248
24.16065 +219.101.32.0/255.255.240.0
24.16066 +219.101.51.128/255.255.255.192
24.16067 +219.106.0.0/255.255.128.0
24.16068 +219.106.224.0/255.255.224.0
24.16069 +219.118.160.0/255.255.224.0
24.16070 +219.129.141.200/255.255.255.248
24.16071 +219.163.181.8/255.255.255.248
24.16072 +219.253.144.0/255.255.255.0
24.16073 +219.253.152.0/255.255.255.0
24.16074 +219.253.154.128/255.255.255.128
24.16075 +220.64.136.128/255.255.255.128
24.16076 +220.65.237.0/255.255.255.128
24.16077 +220.156.0.0/255.255.160.0
24.16078 +221.117.39.160/255.255.255.248
24.16079 +221.129.0.0/255.255.0.0
24.16080 +222.88.0.0/255.254.0.0
24.16081 +222.123.0.0/255.255.0.0
    25.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    25.2 +++ b/depcomp	Sat Feb 20 21:18:28 2010 -0800
    25.3 @@ -0,0 +1,479 @@
    25.4 +#! /bin/sh
    25.5 +
    25.6 +# depcomp - compile a program generating dependencies as side-effects
    25.7 +# Copyright 1999, 2000, 2003 Free Software Foundation, Inc.
    25.8 +
    25.9 +# This program is free software; you can redistribute it and/or modify
   25.10 +# it under the terms of the GNU General Public License as published by
   25.11 +# the Free Software Foundation; either version 2, or (at your option)
   25.12 +# any later version.
   25.13 +
   25.14 +# This program is distributed in the hope that it will be useful,
   25.15 +# but WITHOUT ANY WARRANTY; without even the implied warranty of
   25.16 +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
   25.17 +# GNU General Public License for more details.
   25.18 +
   25.19 +# You should have received a copy of the GNU General Public License
   25.20 +# along with this program; if not, write to the Free Software
   25.21 +# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
   25.22 +# 02111-1307, USA.
   25.23 +
   25.24 +# As a special exception to the GNU General Public License, if you
   25.25 +# distribute this file as part of a program that contains a
   25.26 +# configuration script generated by Autoconf, you may include it under
   25.27 +# the same distribution terms that you use for the rest of that program.
   25.28 +
   25.29 +# Originally written by Alexandre Oliva <oliva@dcc.unicamp.br>.
   25.30 +
   25.31 +if test -z "$depmode" || test -z "$source" || test -z "$object"; then
   25.32 +  echo "depcomp: Variables source, object and depmode must be set" 1>&2
   25.33 +  exit 1
   25.34 +fi
   25.35 +# `libtool' can also be set to `yes' or `no'.
   25.36 +
   25.37 +if test -z "$depfile"; then
   25.38 +   base=`echo "$object" | sed -e 's,^.*/,,' -e 's,\.\([^.]*\)$,.P\1,'`
   25.39 +   dir=`echo "$object" | sed 's,/.*$,/,'`
   25.40 +   if test "$dir" = "$object"; then
   25.41 +      dir=
   25.42 +   fi
   25.43 +   # FIXME: should be _deps on DOS.
   25.44 +   depfile="$dir.deps/$base"
   25.45 +fi
   25.46 +
   25.47 +tmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`}
   25.48 +
   25.49 +rm -f "$tmpdepfile"
   25.50 +
   25.51 +# Some modes work just like other modes, but use different flags.  We
   25.52 +# parameterize here, but still list the modes in the big case below,
   25.53 +# to make depend.m4 easier to write.  Note that we *cannot* use a case
   25.54 +# here, because this file can only contain one case statement.
   25.55 +if test "$depmode" = hp; then
   25.56 +  # HP compiler uses -M and no extra arg.
   25.57 +  gccflag=-M
   25.58 +  depmode=gcc
   25.59 +fi
   25.60 +
   25.61 +if test "$depmode" = dashXmstdout; then
   25.62 +   # This is just like dashmstdout with a different argument.
   25.63 +   dashmflag=-xM
   25.64 +   depmode=dashmstdout
   25.65 +fi
   25.66 +
   25.67 +case "$depmode" in
   25.68 +gcc3)
   25.69 +## gcc 3 implements dependency tracking that does exactly what
   25.70 +## we want.  Yay!  Note: for some reason libtool 1.4 doesn't like
   25.71 +## it if -MD -MP comes after the -MF stuff.  Hmm.
   25.72 +  "$@" -MT "$object" -MD -MP -MF "$tmpdepfile"
   25.73 +  stat=$?
   25.74 +  if test $stat -eq 0; then :
   25.75 +  else
   25.76 +    rm -f "$tmpdepfile"
   25.77 +    exit $stat
   25.78 +  fi
   25.79 +  mv "$tmpdepfile" "$depfile"
   25.80 +  ;;
   25.81 +
   25.82 +gcc)
   25.83 +## There are various ways to get dependency output from gcc.  Here's
   25.84 +## why we pick this rather obscure method:
   25.85 +## - Don't want to use -MD because we'd like the dependencies to end
   25.86 +##   up in a subdir.  Having to rename by hand is ugly.
   25.87 +##   (We might end up doing this anyway to support other compilers.)
   25.88 +## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like
   25.89 +##   -MM, not -M (despite what the docs say).
   25.90 +## - Using -M directly means running the compiler twice (even worse
   25.91 +##   than renaming).
   25.92 +  if test -z "$gccflag"; then
   25.93 +    gccflag=-MD,
   25.94 +  fi
   25.95 +  "$@" -Wp,"$gccflag$tmpdepfile"
   25.96 +  stat=$?
   25.97 +  if test $stat -eq 0; then :
   25.98 +  else
   25.99 +    rm -f "$tmpdepfile"
  25.100 +    exit $stat
  25.101 +  fi
  25.102 +  rm -f "$depfile"
  25.103 +  echo "$object : \\" > "$depfile"
  25.104 +  alpha=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz
  25.105 +## The second -e expression handles DOS-style file names with drive letters.
  25.106 +  sed -e 's/^[^:]*: / /' \
  25.107 +      -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile"
  25.108 +## This next piece of magic avoids the `deleted header file' problem.
  25.109 +## The problem is that when a header file which appears in a .P file
  25.110 +## is deleted, the dependency causes make to die (because there is
  25.111 +## typically no way to rebuild the header).  We avoid this by adding
  25.112 +## dummy dependencies for each header file.  Too bad gcc doesn't do
  25.113 +## this for us directly.
  25.114 +  tr ' ' '
  25.115 +' < "$tmpdepfile" |
  25.116 +## Some versions of gcc put a space before the `:'.  On the theory
  25.117 +## that the space means something, we add a space to the output as
  25.118 +## well.
  25.119 +## Some versions of the HPUX 10.20 sed can't process this invocation
  25.120 +## correctly.  Breaking it into two sed invocations is a workaround.
  25.121 +    sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
  25.122 +  rm -f "$tmpdepfile"
  25.123 +  ;;
  25.124 +
  25.125 +hp)
  25.126 +  # This case exists only to let depend.m4 do its work.  It works by
  25.127 +  # looking at the text of this script.  This case will never be run,
  25.128 +  # since it is checked for above.
  25.129 +  exit 1
  25.130 +  ;;
  25.131 +
  25.132 +sgi)
  25.133 +  if test "$libtool" = yes; then
  25.134 +    "$@" "-Wp,-MDupdate,$tmpdepfile"
  25.135 +  else
  25.136 +    "$@" -MDupdate "$tmpdepfile"
  25.137 +  fi
  25.138 +  stat=$?
  25.139 +  if test $stat -eq 0; then :
  25.140 +  else
  25.141 +    rm -f "$tmpdepfile"
  25.142 +    exit $stat
  25.143 +  fi
  25.144 +  rm -f "$depfile"
  25.145 +
  25.146 +  if test -f "$tmpdepfile"; then  # yes, the sourcefile depend on other files
  25.147 +    echo "$object : \\" > "$depfile"
  25.148 +
  25.149 +    # Clip off the initial element (the dependent).  Don't try to be
  25.150 +    # clever and replace this with sed code, as IRIX sed won't handle
  25.151 +    # lines with more than a fixed number of characters (4096 in
  25.152 +    # IRIX 6.2 sed, 8192 in IRIX 6.5).  We also remove comment lines;
  25.153 +    # the IRIX cc adds comments like `#:fec' to the end of the
  25.154 +    # dependency line.
  25.155 +    tr ' ' '
  25.156 +' < "$tmpdepfile" \
  25.157 +    | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' | \
  25.158 +    tr '
  25.159 +' ' ' >> $depfile
  25.160 +    echo >> $depfile
  25.161 +
  25.162 +    # The second pass generates a dummy entry for each header file.
  25.163 +    tr ' ' '
  25.164 +' < "$tmpdepfile" \
  25.165 +   | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \
  25.166 +   >> $depfile
  25.167 +  else
  25.168 +    # The sourcefile does not contain any dependencies, so just
  25.169 +    # store a dummy comment line, to avoid errors with the Makefile
  25.170 +    # "include basename.Plo" scheme.
  25.171 +    echo "#dummy" > "$depfile"
  25.172 +  fi
  25.173 +  rm -f "$tmpdepfile"
  25.174 +  ;;
  25.175 +
  25.176 +aix)
  25.177 +  # The C for AIX Compiler uses -M and outputs the dependencies
  25.178 +  # in a .u file.  In older versions, this file always lives in the
  25.179 +  # current directory.  Also, the AIX compiler puts `$object:' at the
  25.180 +  # start of each line; $object doesn't have directory information.
  25.181 +  # Version 6 uses the directory in both cases.
  25.182 +  stripped=`echo "$object" | sed 's/\(.*\)\..*$/\1/'`
  25.183 +  tmpdepfile="$stripped.u"
  25.184 +  if test "$libtool" = yes; then
  25.185 +    "$@" -Wc,-M
  25.186 +  else
  25.187 +    "$@" -M
  25.188 +  fi
  25.189 +  stat=$?
  25.190 +
  25.191 +  if test -f "$tmpdepfile"; then :
  25.192 +  else
  25.193 +    stripped=`echo "$stripped" | sed 's,^.*/,,'`
  25.194 +    tmpdepfile="$stripped.u"
  25.195 +  fi
  25.196 +
  25.197 +  if test $stat -eq 0; then :
  25.198 +  else
  25.199 +    rm -f "$tmpdepfile"
  25.200 +    exit $stat
  25.201 +  fi
  25.202 +
  25.203 +  if test -f "$tmpdepfile"; then
  25.204 +    outname="$stripped.o"
  25.205 +    # Each line is of the form `foo.o: dependent.h'.
  25.206 +    # Do two passes, one to just change these to
  25.207 +    # `$object: dependent.h' and one to simply `dependent.h:'.
  25.208 +    sed -e "s,^$outname:,$object :," < "$tmpdepfile" > "$depfile"
  25.209 +    sed -e "s,^$outname: \(.*\)$,\1:," < "$tmpdepfile" >> "$depfile"
  25.210 +  else
  25.211 +    # The sourcefile does not contain any dependencies, so just
  25.212 +    # store a dummy comment line, to avoid errors with the Makefile
  25.213 +    # "include basename.Plo" scheme.
  25.214 +    echo "#dummy" > "$depfile"
  25.215 +  fi
  25.216 +  rm -f "$tmpdepfile"
  25.217 +  ;;
  25.218 +
  25.219 +icc)
  25.220 +  # Intel's C compiler understands `-MD -MF file'.  However on
  25.221 +  #    icc -MD -MF foo.d -c -o sub/foo.o sub/foo.c
  25.222 +  # ICC 7.0 will fill foo.d with something like
  25.223 +  #    foo.o: sub/foo.c
  25.224 +  #    foo.o: sub/foo.h
  25.225 +  # which is wrong.  We want:
  25.226 +  #    sub/foo.o: sub/foo.c
  25.227 +  #    sub/foo.o: sub/foo.h
  25.228 +  #    sub/foo.c:
  25.229 +  #    sub/foo.h:
  25.230 +  # ICC 7.1 will output
  25.231 +  #    foo.o: sub/foo.c sub/foo.h
  25.232 +  # and will wrap long lines using \ :
  25.233 +  #    foo.o: sub/foo.c ... \
  25.234 +  #     sub/foo.h ... \
  25.235 +  #     ...
  25.236 +
  25.237 +  "$@" -MD -MF "$tmpdepfile"
  25.238 +  stat=$?
  25.239 +  if test $stat -eq 0; then :
  25.240 +  else
  25.241 +    rm -f "$tmpdepfile"
  25.242 +    exit $stat
  25.243 +  fi
  25.244 +  rm -f "$depfile"
  25.245 +  # Each line is of the form `foo.o: dependent.h',
  25.246 +  # or `foo.o: dep1.h dep2.h \', or ` dep3.h dep4.h \'.
  25.247 +  # Do two passes, one to just change these to
  25.248 +  # `$object: dependent.h' and one to simply `dependent.h:'.
  25.249 +  sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile"
  25.250 +  # Some versions of the HPUX 10.20 sed can't process this invocation
  25.251 +  # correctly.  Breaking it into two sed invocations is a workaround.
  25.252 +  sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" |
  25.253 +    sed -e 's/$/ :/' >> "$depfile"
  25.254 +  rm -f "$tmpdepfile"
  25.255 +  ;;
  25.256 +
  25.257 +tru64)
  25.258 +   # The Tru64 compiler uses -MD to generate dependencies as a side
  25.259 +   # effect.  `cc -MD -o foo.o ...' puts the dependencies into `foo.o.d'.
  25.260 +   # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put
  25.261 +   # dependencies in `foo.d' instead, so we check for that too.
  25.262 +   # Subdirectories are respected.
  25.263 +   dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`
  25.264 +   test "x$dir" = "x$object" && dir=
  25.265 +   base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'`
  25.266 +
  25.267 +   if test "$libtool" = yes; then
  25.268 +      tmpdepfile1="$dir.libs/$base.lo.d"
  25.269 +      tmpdepfile2="$dir.libs/$base.d"
  25.270 +      "$@" -Wc,-MD
  25.271 +   else
  25.272 +      tmpdepfile1="$dir$base.o.d"
  25.273 +      tmpdepfile2="$dir$base.d"
  25.274 +      "$@" -MD
  25.275 +   fi
  25.276 +
  25.277 +   stat=$?
  25.278 +   if test $stat -eq 0; then :
  25.279 +   else
  25.280 +      rm -f "$tmpdepfile1" "$tmpdepfile2"
  25.281 +      exit $stat
  25.282 +   fi
  25.283 +
  25.284 +   if test -f "$tmpdepfile1"; then
  25.285 +      tmpdepfile="$tmpdepfile1"
  25.286 +   else
  25.287 +      tmpdepfile="$tmpdepfile2"
  25.288 +   fi
  25.289 +   if test -f "$tmpdepfile"; then
  25.290 +      sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile"
  25.291 +      # That's a tab and a space in the [].
  25.292 +      sed -e 's,^.*\.[a-z]*:[	 ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile"
  25.293 +   else
  25.294 +      echo "#dummy" > "$depfile"
  25.295 +   fi
  25.296 +   rm -f "$tmpdepfile"
  25.297 +   ;;
  25.298 +
  25.299 +#nosideeffect)
  25.300 +  # This comment above is used by automake to tell side-effect
  25.301 +  # dependency tracking mechanisms from slower ones.
  25.302 +
  25.303 +dashmstdout)
  25.304 +  # Important note: in order to support this mode, a compiler *must*
  25.305 +  # always write the preprocessed file to stdout, regardless of -o.
  25.306 +  "$@" || exit $?
  25.307 +
  25.308 +  # Remove the call to Libtool.
  25.309 +  if test "$libtool" = yes; then
  25.310 +    while test $1 != '--mode=compile'; do
  25.311 +      shift
  25.312 +    done
  25.313 +    shift
  25.314 +  fi
  25.315 +
  25.316 +  # Remove `-o $object'.
  25.317 +  IFS=" "
  25.318 +  for arg
  25.319 +  do
  25.320 +    case $arg in
  25.321 +    -o)
  25.322 +      shift
  25.323 +      ;;
  25.324 +    $object)
  25.325 +      shift
  25.326 +      ;;
  25.327 +    *)
  25.328 +      set fnord "$@" "$arg"
  25.329 +      shift # fnord
  25.330 +      shift # $arg
  25.331 +      ;;
  25.332 +    esac
  25.333 +  done
  25.334 +
  25.335 +  test -z "$dashmflag" && dashmflag=-M
  25.336 +  # Require at least two characters before searching for `:'
  25.337 +  # in the target name.  This is to cope with DOS-style filenames:
  25.338 +  # a dependency such as `c:/foo/bar' could be seen as target `c' otherwise.
  25.339 +  "$@" $dashmflag |
  25.340 +    sed 's:^[  ]*[^: ][^:][^:]*\:[    ]*:'"$object"'\: :' > "$tmpdepfile"
  25.341 +  rm -f "$depfile"
  25.342 +  cat < "$tmpdepfile" > "$depfile"
  25.343 +  tr ' ' '
  25.344 +' < "$tmpdepfile" | \
  25.345 +## Some versions of the HPUX 10.20 sed can't process this invocation
  25.346 +## correctly.  Breaking it into two sed invocations is a workaround.
  25.347 +    sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
  25.348 +  rm -f "$tmpdepfile"
  25.349 +  ;;
  25.350 +
  25.351 +dashXmstdout)
  25.352 +  # This case only exists to satisfy depend.m4.  It is never actually
  25.353 +  # run, as this mode is specially recognized in the preamble.
  25.354 +  exit 1
  25.355 +  ;;
  25.356 +
  25.357 +makedepend)
  25.358 +  "$@" || exit $?
  25.359 +  # Remove any Libtool call
  25.360 +  if test "$libtool" = yes; then
  25.361 +    while test $1 != '--mode=compile'; do
  25.362 +      shift
  25.363 +    done
  25.364 +    shift
  25.365 +  fi
  25.366 +  # X makedepend
  25.367 +  shift
  25.368 +  cleared=no
  25.369 +  for arg in "$@"; do
  25.370 +    case $cleared in
  25.371 +    no)
  25.372 +      set ""; shift
  25.373 +      cleared=yes ;;
  25.374 +    esac
  25.375 +    case "$arg" in
  25.376 +    -D*|-I*)
  25.377 +      set fnord "$@" "$arg"; shift ;;
  25.378 +    # Strip any option that makedepend may not understand.  Remove
  25.379 +    # the object too, otherwise makedepend will parse it as a source file.
  25.380 +    -*|$object)
  25.381 +      ;;
  25.382 +    *)
  25.383 +      set fnord "$@" "$arg"; shift ;;
  25.384 +    esac
  25.385 +  done
  25.386 +  obj_suffix="`echo $object | sed 's/^.*\././'`"
  25.387 +  touch "$tmpdepfile"
  25.388 +  ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@"
  25.389 +  rm -f "$depfile"
  25.390 +  cat < "$tmpdepfile" > "$depfile"
  25.391 +  sed '1,2d' "$tmpdepfile" | tr ' ' '
  25.392 +' | \
  25.393 +## Some versions of the HPUX 10.20 sed can't process this invocation
  25.394 +## correctly.  Breaking it into two sed invocations is a workaround.
  25.395 +    sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
  25.396 +  rm -f "$tmpdepfile" "$tmpdepfile".bak
  25.397 +  ;;
  25.398 +
  25.399 +cpp)
  25.400 +  # Important note: in order to support this mode, a compiler *must*
  25.401 +  # always write the preprocessed file to stdout.
  25.402 +  "$@" || exit $?
  25.403 +
  25.404 +  # Remove the call to Libtool.
  25.405 +  if test "$libtool" = yes; then
  25.406 +    while test $1 != '--mode=compile'; do
  25.407 +      shift
  25.408 +    done
  25.409 +    shift
  25.410 +  fi
  25.411 +
  25.412 +  # Remove `-o $object'.
  25.413 +  IFS=" "
  25.414 +  for arg
  25.415 +  do
  25.416 +    case $arg in
  25.417 +    -o)
  25.418 +      shift
  25.419 +      ;;
  25.420 +    $object)
  25.421 +      shift
  25.422 +      ;;
  25.423 +    *)
  25.424 +      set fnord "$@" "$arg"
  25.425 +      shift # fnord
  25.426 +      shift # $arg
  25.427 +      ;;
  25.428 +    esac
  25.429 +  done
  25.430 +
  25.431 +  "$@" -E |
  25.432 +    sed -n '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' |
  25.433 +    sed '$ s: \\$::' > "$tmpdepfile"
  25.434 +  rm -f "$depfile"
  25.435 +  echo "$object : \\" > "$depfile"
  25.436 +  cat < "$tmpdepfile" >> "$depfile"
  25.437 +  sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile"
  25.438 +  rm -f "$tmpdepfile"
  25.439 +  ;;
  25.440 +
  25.441 +msvisualcpp)
  25.442 +  # Important note: in order to support this mode, a compiler *must*
  25.443 +  # always write the preprocessed file to stdout, regardless of -o,
  25.444 +  # because we must use -o when running libtool.
  25.445 +  "$@" || exit $?
  25.446 +  IFS=" "
  25.447 +  for arg
  25.448 +  do
  25.449 +    case "$arg" in
  25.450 +    "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI")
  25.451 +	set fnord "$@"
  25.452 +	shift
  25.453 +	shift
  25.454 +	;;
  25.455 +    *)
  25.456 +	set fnord "$@" "$arg"
  25.457 +	shift
  25.458 +	shift
  25.459 +	;;
  25.460 +    esac
  25.461 +  done
  25.462 +  "$@" -E |
  25.463 +  sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::echo "`cygpath -u \\"\1\\"`":p' | sort | uniq > "$tmpdepfile"
  25.464 +  rm -f "$depfile"
  25.465 +  echo "$object : \\" > "$depfile"
  25.466 +  . "$tmpdepfile" | sed 's% %\\ %g' | sed -n '/^\(.*\)$/ s::	\1 \\:p' >> "$depfile"
  25.467 +  echo "	" >> "$depfile"
  25.468 +  . "$tmpdepfile" | sed 's% %\\ %g' | sed -n '/^\(.*\)$/ s::\1\::p' >> "$depfile"
  25.469 +  rm -f "$tmpdepfile"
  25.470 +  ;;
  25.471 +
  25.472 +none)
  25.473 +  exec "$@"
  25.474 +  ;;
  25.475 +
  25.476 +*)
  25.477 +  echo "Unknown depmode $depmode" 1>&2
  25.478 +  exit 1
  25.479 +  ;;
  25.480 +esac
  25.481 +
  25.482 +exit 0
    26.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    26.2 +++ b/gnutella.spec	Sat Feb 20 21:18:28 2010 -0800
    26.3 @@ -0,0 +1,44 @@
    26.4 +%define  RELEASE 1
    26.5 +
    26.6 +Summary: Gnutella plugin for giFT
    26.7 +Name: gift-gnutella
    26.8 +Version: 0.0.11
    26.9 +Release: 1
   26.10 +Copyright: GPL
   26.11 +Group: Applications/Internet
   26.12 +URL: http://gift.sourceforge.net/
   26.13 +Source0: %{name}-%{version}.tar.gz
   26.14 +Buildroot: %_tmppath/%{name}-%{version}-root
   26.15 +Prefix: %{_prefix}
   26.16 +Requires: libgift >= 0.11.4 , libgiftproto >= 0.11.4
   26.17 +
   26.18 +%description
   26.19 +Use this package to connect to Gnutella networks using giFT
   26.20 +
   26.21 +%prep
   26.22 +%setup -q
   26.23 +
   26.24 +%build
   26.25 +%configure
   26.26 +%__make
   26.27 +
   26.28 +%install
   26.29 +%makeinstall
   26.30 +
   26.31 +%clean
   26.32 +make clean
   26.33 +[ "$RPM_BUILD_ROOT" != "/" ] && rm -rf "$RPM_BUILD_ROOT"
   26.34 +
   26.35 +%files
   26.36 +%defattr(-,root,root)
   26.37 +%_libdir/giFT/*
   26.38 +%_datadir/giFT/*
   26.39 +
   26.40 +%changelog
   26.41 +* Sat Feb 14 2004 Craig Barnes <hbelfaq@softhome.net>
   26.42 +- use %configure macro which should work properly now
   26.43 +- use %makeinstall macro
   26.44 +- remove build root when finished
   26.45 +
   26.46 +* Sun Sep 07 2003 Franco Catrin L. <fcatrin@tuxpan.com>
   26.47 +- updated to official package distribution
    27.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    27.2 +++ b/gnutella.spec.in	Sat Feb 20 21:18:28 2010 -0800
    27.3 @@ -0,0 +1,44 @@
    27.4 +%define  RELEASE 1
    27.5 +
    27.6 +Summary: Gnutella plugin for giFT
    27.7 +Name: @PACKAGE@
    27.8 +Version: @VERSION@
    27.9 +Release: 1
   27.10 +Copyright: GPL
   27.11 +Group: Applications/Internet
   27.12 +URL: http://gift.sourceforge.net/
   27.13 +Source0: %{name}-%{version}.tar.gz
   27.14 +Buildroot: %_tmppath/%{name}-%{version}-root
   27.15 +Prefix: %{_prefix}
   27.16 +Requires: libgift >= 0.11.4 , libgiftproto >= 0.11.4
   27.17 +
   27.18 +%description
   27.19 +Use this package to connect to Gnutella networks using giFT
   27.20 +
   27.21 +%prep
   27.22 +%setup -q
   27.23 +
   27.24 +%build
   27.25 +%configure
   27.26 +%__make
   27.27 +
   27.28 +%install
   27.29 +%makeinstall
   27.30 +
   27.31 +%clean
   27.32 +make clean
   27.33 +[ "$RPM_BUILD_ROOT" != "/" ] && rm -rf "$RPM_BUILD_ROOT"
   27.34 +
   27.35 +%files
   27.36 +%defattr(-,root,root)
   27.37 +%_libdir/giFT/*
   27.38 +%_datadir/giFT/*
   27.39 +
   27.40 +%changelog
   27.41 +* Sat Feb 14 2004 Craig Barnes <hbelfaq@softhome.net>
   27.42 +- use %configure macro which should work properly now
   27.43 +- use %makeinstall macro
   27.44 +- remove build root when finished
   27.45 +
   27.46 +* Sun Sep 07 2003 Franco Catrin L. <fcatrin@tuxpan.com>
   27.47 +- updated to official package distribution
    28.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    28.2 +++ b/install-sh	Sat Feb 20 21:18:28 2010 -0800
    28.3 @@ -0,0 +1,294 @@
    28.4 +#!/bin/sh
    28.5 +#
    28.6 +# install - install a program, script, or datafile
    28.7 +#
    28.8 +# This originates from X11R5 (mit/util/scripts/install.sh), which was
    28.9 +# later released in X11R6 (xc/config/util/install.sh) with the
   28.10 +# following copyright and license.
   28.11 +#
   28.12 +# Copyright (C) 1994 X Consortium
   28.13 +#
   28.14 +# Permission is hereby granted, free of charge, to any person obtaining a copy
   28.15 +# of this software and associated documentation files (the "Software"), to
   28.16 +# deal in the Software without restriction, including without limitation the
   28.17 +# rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
   28.18 +# sell copies of the Software, and to permit persons to whom the Software is
   28.19 +# furnished to do so, subject to the following conditions:
   28.20 +#
   28.21 +# The above copyright notice and this permission notice shall be included in
   28.22 +# all copies or substantial portions of the Software.
   28.23 +#
   28.24 +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
   28.25 +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
   28.26 +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE
   28.27 +# X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
   28.28 +# AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNEC-
   28.29 +# TION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
   28.30 +#
   28.31 +# Except as contained in this notice, the name of the X Consortium shall not
   28.32 +# be used in advertising or otherwise to promote the sale, use or other deal-
   28.33 +# ings in this Software without prior written authorization from the X Consor-
   28.34 +# tium.
   28.35 +#
   28.36 +#
   28.37 +# FSF changes to this file are in the public domain.
   28.38 +#
   28.39 +# Calling this script install-sh is preferred over install.sh, to prevent
   28.40 +# `make' implicit rules from creating a file called install from it
   28.41 +# when there is no Makefile.
   28.42 +#
   28.43 +# This script is compatible with the BSD install script, but was written
   28.44 +# from scratch.  It can only install one file at a time, a restriction
   28.45 +# shared with many OS's install programs.
   28.46 +
   28.47 +
   28.48 +# set DOITPROG to echo to test this script
   28.49 +
   28.50 +# Don't use :- since 4.3BSD and earlier shells don't like it.
   28.51 +doit="${DOITPROG-}"
   28.52 +
   28.53 +
   28.54 +# put in absolute paths if you don't have them in your path; or use env. vars.
   28.55 +
   28.56 +mvprog="${MVPROG-mv}"
   28.57 +cpprog="${CPPROG-cp}"
   28.58 +chmodprog="${CHMODPROG-chmod}"
   28.59 +chownprog="${CHOWNPROG-chown}"
   28.60 +chgrpprog="${CHGRPPROG-chgrp}"
   28.61 +stripprog="${STRIPPROG-strip}"
   28.62 +rmprog="${RMPROG-rm}"
   28.63 +mkdirprog="${MKDIRPROG-mkdir}"
   28.64 +
   28.65 +transformbasename=""
   28.66 +transform_arg=""
   28.67 +instcmd="$mvprog"
   28.68 +chmodcmd="$chmodprog 0755"
   28.69 +chowncmd=""
   28.70 +chgrpcmd=""
   28.71 +stripcmd=""
   28.72 +rmcmd="$rmprog -f"
   28.73 +mvcmd="$mvprog"
   28.74 +src=""
   28.75 +dst=""
   28.76 +dir_arg=""
   28.77 +
   28.78 +while [ x"$1" != x ]; do
   28.79 +    case $1 in
   28.80 +	-c) instcmd=$cpprog
   28.81 +	    shift
   28.82 +	    continue;;
   28.83 +
   28.84 +	-d) dir_arg=true
   28.85 +	    shift
   28.86 +	    continue;;
   28.87 +
   28.88 +	-m) chmodcmd="$chmodprog $2"
   28.89 +	    shift
   28.90 +	    shift
   28.91 +	    continue;;
   28.92 +
   28.93 +	-o) chowncmd="$chownprog $2"
   28.94 +	    shift
   28.95 +	    shift
   28.96 +	    continue;;
   28.97 +
   28.98 +	-g) chgrpcmd="$chgrpprog $2"
   28.99 +	    shift
  28.100 +	    shift
  28.101 +	    continue;;
  28.102 +
  28.103 +	-s) stripcmd=$stripprog
  28.104 +	    shift
  28.105 +	    continue;;
  28.106 +
  28.107 +	-t=*) transformarg=`echo $1 | sed 's/-t=//'`
  28.108 +	    shift
  28.109 +	    continue;;
  28.110 +
  28.111 +	-b=*) transformbasename=`echo $1 | sed 's/-b=//'`
  28.112 +	    shift
  28.113 +	    continue;;
  28.114 +
  28.115 +	*)  if [ x"$src" = x ]
  28.116 +	    then
  28.117 +		src=$1
  28.118 +	    else
  28.119 +		# this colon is to work around a 386BSD /bin/sh bug
  28.120 +		:
  28.121 +		dst=$1
  28.122 +	    fi
  28.123 +	    shift
  28.124 +	    continue;;
  28.125 +    esac
  28.126 +done
  28.127 +
  28.128 +if [ x"$src" = x ]
  28.129 +then
  28.130 +	echo "$0: no input file specified" >&2
  28.131 +	exit 1
  28.132 +else
  28.133 +	:
  28.134 +fi
  28.135 +
  28.136 +if [ x"$dir_arg" != x ]; then
  28.137 +	dst=$src
  28.138 +	src=""
  28.139 +
  28.140 +	if [ -d "$dst" ]; then
  28.141 +		instcmd=:
  28.142 +		chmodcmd=""
  28.143 +	else
  28.144 +		instcmd=$mkdirprog
  28.145 +	fi
  28.146 +else
  28.147 +
  28.148 +# Waiting for this to be detected by the "$instcmd $src $dsttmp" command
  28.149 +# might cause directories to be created, which would be especially bad
  28.150 +# if $src (and thus $dsttmp) contains '*'.
  28.151 +
  28.152 +	if [ -f "$src" ] || [ -d "$src" ]
  28.153 +	then
  28.154 +		:
  28.155 +	else
  28.156 +		echo "$0: $src does not exist" >&2
  28.157 +		exit 1
  28.158 +	fi
  28.159 +
  28.160 +	if [ x"$dst" = x ]
  28.161 +	then
  28.162 +		echo "$0: no destination specified" >&2
  28.163 +		exit 1
  28.164 +	else
  28.165 +		:
  28.166 +	fi
  28.167 +
  28.168 +# If destination is a directory, append the input filename; if your system
  28.169 +# does not like double slashes in filenames, you may need to add some logic
  28.170 +
  28.171 +	if [ -d "$dst" ]
  28.172 +	then
  28.173 +		dst=$dst/`basename "$src"`
  28.174 +	else
  28.175 +		:
  28.176 +	fi
  28.177 +fi
  28.178 +
  28.179 +## this sed command emulates the dirname command
  28.180 +dstdir=`echo "$dst" | sed -e 's,[^/]*$,,;s,/$,,;s,^$,.,'`
  28.181 +
  28.182 +# Make sure that the destination directory exists.
  28.183 +#  this part is taken from Noah Friedman's mkinstalldirs script
  28.184 +
  28.185 +# Skip lots of stat calls in the usual case.
  28.186 +if [ ! -d "$dstdir" ]; then
  28.187 +defaultIFS='
  28.188 +	'
  28.189 +IFS="${IFS-$defaultIFS}"
  28.190 +
  28.191 +oIFS=$IFS
  28.192 +# Some sh's can't handle IFS=/ for some reason.
  28.193 +IFS='%'
  28.194 +set - `echo "$dstdir" | sed -e 's@/@%@g' -e 's@^%@/@'`
  28.195 +IFS=$oIFS
  28.196 +
  28.197 +pathcomp=''
  28.198 +
  28.199 +while [ $# -ne 0 ] ; do
  28.200 +	pathcomp=$pathcomp$1
  28.201 +	shift
  28.202 +
  28.203 +	if [ ! -d "$pathcomp" ] ;
  28.204 +        then
  28.205 +		$mkdirprog "$pathcomp"
  28.206 +	else
  28.207 +		:
  28.208 +	fi
  28.209 +
  28.210 +	pathcomp=$pathcomp/
  28.211 +done
  28.212 +fi
  28.213 +
  28.214 +if [ x"$dir_arg" != x ]
  28.215 +then
  28.216 +	$doit $instcmd "$dst" &&
  28.217 +
  28.218 +	if [ x"$chowncmd" != x ]; then $doit $chowncmd "$dst"; else : ; fi &&
  28.219 +	if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd "$dst"; else : ; fi &&
  28.220 +	if [ x"$stripcmd" != x ]; then $doit $stripcmd "$dst"; else : ; fi &&
  28.221 +	if [ x"$chmodcmd" != x ]; then $doit $chmodcmd "$dst"; else : ; fi
  28.222 +else
  28.223 +
  28.224 +# If we're going to rename the final executable, determine the name now.
  28.225 +
  28.226 +	if [ x"$transformarg" = x ]
  28.227 +	then
  28.228 +		dstfile=`basename "$dst"`
  28.229 +	else
  28.230 +		dstfile=`basename "$dst" $transformbasename |
  28.231 +			sed $transformarg`$transformbasename
  28.232 +	fi
  28.233 +
  28.234 +# don't allow the sed command to completely eliminate the filename
  28.235 +
  28.236 +	if [ x"$dstfile" = x ]
  28.237 +	then
  28.238 +		dstfile=`basename "$dst"`
  28.239 +	else
  28.240 +		:
  28.241 +	fi
  28.242 +
  28.243 +# Make a couple of temp file names in the proper directory.
  28.244 +
  28.245 +	dsttmp=$dstdir/_inst.$$_
  28.246 +	rmtmp=$dstdir/_rm.$$_
  28.247 +
  28.248 +# Trap to clean up temp files at exit.
  28.249 +
  28.250 +	trap 'status=$?; rm -f "$dsttmp" "$rmtmp" && exit $status' 0
  28.251 +	trap '(exit $?); exit' 1 2 13 15
  28.252 +
  28.253 +# Move or copy the file name to the temp name
  28.254 +
  28.255 +	$doit $instcmd "$src" "$dsttmp" &&
  28.256 +
  28.257 +# and set any options; do chmod last to preserve setuid bits
  28.258 +
  28.259 +# If any of these fail, we abort the whole thing.  If we want to
  28.260 +# ignore errors from any of these, just make sure not to ignore
  28.261 +# errors from the above "$doit $instcmd $src $dsttmp" command.
  28.262 +
  28.263 +	if [ x"$chowncmd" != x ]; then $doit $chowncmd "$dsttmp"; else :;fi &&
  28.264 +	if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd "$dsttmp"; else :;fi &&
  28.265 +	if [ x"$stripcmd" != x ]; then $doit $stripcmd "$dsttmp"; else :;fi &&
  28.266 +	if [ x"$chmodcmd" != x ]; then $doit $chmodcmd "$dsttmp"; else :;fi &&
  28.267 +
  28.268 +# Now remove or move aside any old file at destination location.  We try this
  28.269 +# two ways since rm can't unlink itself on some systems and the destination
  28.270 +# file might be busy for other reasons.  In this case, the final cleanup
  28.271 +# might fail but the new file should still install successfully.
  28.272 +
  28.273 +{
  28.274 +	if [ -f "$dstdir/$dstfile" ]
  28.275 +	then
  28.276 +		$doit $rmcmd -f "$dstdir/$dstfile" 2>/dev/null ||
  28.277 +		$doit $mvcmd -f "$dstdir/$dstfile" "$rmtmp" 2>/dev/null ||
  28.278 +		{
  28.279 +		  echo "$0: cannot unlink or rename $dstdir/$dstfile" >&2
  28.280 +		  (exit 1); exit
  28.281 +		}
  28.282 +	else
  28.283 +		:
  28.284 +	fi
  28.285 +} &&
  28.286 +
  28.287 +# Now rename the file to the real destination.
  28.288 +
  28.289 +	$doit $mvcmd "$dsttmp" "$dstdir/$dstfile"
  28.290 +
  28.291 +fi &&
  28.292 +
  28.293 +# The final little trick to "correctly" pass the exit status to the exit trap.
  28.294 +
  28.295 +{
  28.296 +	(exit 0); exit
  28.297 +}
    29.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    29.2 +++ b/ltmain.sh	Sat Feb 20 21:18:28 2010 -0800
    29.3 @@ -0,0 +1,6871 @@
    29.4 +# ltmain.sh - Provide generalized library-building support services.
    29.5 +# NOTE: Changing this file will not affect anything until you rerun configure.
    29.6 +#
    29.7 +# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005
    29.8 +# Free Software Foundation, Inc.
    29.9 +# Originally by Gordon Matzigkeit <gord@gnu.ai.mit.edu>, 1996
   29.10 +#
   29.11 +# This program is free software; you can redistribute it and/or modify
   29.12 +# it under the terms of the GNU General Public License as published by
   29.13 +# the Free Software Foundation; either version 2 of the License, or
   29.14 +# (at your option) any later version.
   29.15 +#
   29.16 +# This program is distributed in the hope that it will be useful, but
   29.17 +# WITHOUT ANY WARRANTY; without even the implied warranty of
   29.18 +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
   29.19 +# General Public License for more details.
   29.20 +#
   29.21 +# You should have received a copy of the GNU General Public License
   29.22 +# along with this program; if not, write to the Free Software
   29.23 +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
   29.24 +#
   29.25 +# As a special exception to the GNU General Public License, if you
   29.26 +# distribute this file as part of a program that contains a
   29.27 +# configuration script generated by Autoconf, you may include it under
   29.28 +# the same distribution terms that you use for the rest of that program.
   29.29 +
   29.30 +basename="s,^.*/,,g"
   29.31 +
   29.32 +# Work around backward compatibility issue on IRIX 6.5. On IRIX 6.4+, sh
   29.33 +# is ksh but when the shell is invoked as "sh" and the current value of
   29.34 +# the _XPG environment variable is not equal to 1 (one), the special
   29.35 +# positional parameter $0, within a function call, is the name of the
   29.36 +# function.
   29.37 +progpath="$0"
   29.38 +
   29.39 +# The name of this program:
   29.40 +progname=`echo "$progpath" | $SED $basename`
   29.41 +modename="$progname"
   29.42 +
   29.43 +# Global variables:
   29.44 +EXIT_SUCCESS=0
   29.45 +EXIT_FAILURE=1
   29.46 +
   29.47 +PROGRAM=ltmain.sh
   29.48 +PACKAGE=libtool
   29.49 +VERSION="1.5.22 Debian 1.5.22-2"
   29.50 +TIMESTAMP=" (1.1220.2.365 2005/12/18 22:14:06)"
   29.51 +
   29.52 +# See if we are running on zsh, and set the options which allow our
   29.53 +# commands through without removal of \ escapes.
   29.54 +if test -n "${ZSH_VERSION+set}" ; then
   29.55 +  setopt NO_GLOB_SUBST
   29.56 +fi
   29.57 +
   29.58 +# Check that we have a working $echo.
   29.59 +if test "X$1" = X--no-reexec; then
   29.60 +  # Discard the --no-reexec flag, and continue.
   29.61 +  shift
   29.62 +elif test "X$1" = X--fallback-echo; then
   29.63 +  # Avoid inline document here, it may be left over
   29.64 +  :
   29.65 +elif test "X`($echo '\t') 2>/dev/null`" = 'X\t'; then
   29.66 +  # Yippee, $echo works!
   29.67 +  :
   29.68 +else
   29.69 +  # Restart under the correct shell, and then maybe $echo will work.
   29.70 +  exec $SHELL "$progpath" --no-reexec ${1+"$@"}
   29.71 +fi
   29.72 +
   29.73 +if test "X$1" = X--fallback-echo; then
   29.74 +  # used as fallback echo
   29.75 +  shift
   29.76 +  cat <<EOF
   29.77 +$*
   29.78 +EOF
   29.79 +  exit $EXIT_SUCCESS
   29.80 +fi
   29.81 +
   29.82 +default_mode=
   29.83 +help="Try \`$progname --help' for more information."
   29.84 +magic="%%%MAGIC variable%%%"
   29.85 +mkdir="mkdir"
   29.86 +mv="mv -f"
   29.87 +rm="rm -f"
   29.88 +
   29.89 +# Sed substitution that helps us do robust quoting.  It backslashifies
   29.90 +# metacharacters that are still active within double-quoted strings.
   29.91 +Xsed="${SED}"' -e 1s/^X//'
   29.92 +sed_quote_subst='s/\([\\`\\"$\\\\]\)/\\\1/g'
   29.93 +# test EBCDIC or ASCII
   29.94 +case `echo X|tr X '\101'` in
   29.95 + A) # ASCII based system
   29.96 +    # \n is not interpreted correctly by Solaris 8 /usr/ucb/tr
   29.97 +  SP2NL='tr \040 \012'
   29.98 +  NL2SP='tr \015\012 \040\040'
   29.99 +  ;;
  29.100 + *) # EBCDIC based system
  29.101 +  SP2NL='tr \100 \n'
  29.102 +  NL2SP='tr \r\n \100\100'
  29.103 +  ;;
  29.104 +esac
  29.105 +
  29.106 +# NLS nuisances.
  29.107 +# Only set LANG and LC_ALL to C if already set.
  29.108 +# These must not be set unconditionally because not all systems understand
  29.109 +# e.g. LANG=C (notably SCO).
  29.110 +# We save the old values to restore during execute mode.
  29.111 +if test "${LC_ALL+set}" = set; then
  29.112 +  save_LC_ALL="$LC_ALL"; LC_ALL=C; export LC_ALL
  29.113 +fi
  29.114 +if test "${LANG+set}" = set; then
  29.115 +  save_LANG="$LANG"; LANG=C; export LANG
  29.116 +fi
  29.117 +
  29.118 +# Make sure IFS has a sensible default
  29.119 +lt_nl='
  29.120 +'
  29.121 +IFS=" 	$lt_nl"
  29.122 +
  29.123 +if test "$build_libtool_libs" != yes && test "$build_old_libs" != yes; then
  29.124 +  $echo "$modename: not configured to build any kind of library" 1>&2
  29.125 +  $echo "Fatal configuration error.  See the $PACKAGE docs for more information." 1>&2
  29.126 +  exit $EXIT_FAILURE
  29.127 +fi
  29.128 +
  29.129 +# Global variables.
  29.130 +mode=$default_mode
  29.131 +nonopt=
  29.132 +prev=
  29.133 +prevopt=
  29.134 +run=
  29.135 +show="$echo"
  29.136 +show_help=
  29.137 +execute_dlfiles=
  29.138 +duplicate_deps=no
  29.139 +preserve_args=
  29.140 +lo2o="s/\\.lo\$/.${objext}/"
  29.141 +o2lo="s/\\.${objext}\$/.lo/"
  29.142 +
  29.143 +#####################################
  29.144 +# Shell function definitions:
  29.145 +# This seems to be the best place for them
  29.146 +
  29.147 +# func_mktempdir [string]
  29.148 +# Make a temporary directory that won't clash with other running
  29.149 +# libtool processes, and avoids race conditions if possible.  If
  29.150 +# given, STRING is the basename for that directory.
  29.151 +func_mktempdir ()
  29.152 +{
  29.153 +    my_template="${TMPDIR-/tmp}/${1-$progname}"
  29.154 +
  29.155 +    if test "$run" = ":"; then
  29.156 +      # Return a directory name, but don't create it in dry-run mode
  29.157 +      my_tmpdir="${my_template}-$$"
  29.158 +    else
  29.159 +
  29.160 +      # If mktemp works, use that first and foremost
  29.161 +      my_tmpdir=`mktemp -d "${my_template}-XXXXXXXX" 2>/dev/null`
  29.162 +
  29.163 +      if test ! -d "$my_tmpdir"; then
  29.164 +	# Failing that, at least try and use $RANDOM to avoid a race
  29.165 +	my_tmpdir="${my_template}-${RANDOM-0}$$"
  29.166 +
  29.167 +	save_mktempdir_umask=`umask`
  29.168 +	umask 0077
  29.169 +	$mkdir "$my_tmpdir"
  29.170 +	umask $save_mktempdir_umask
  29.171 +      fi
  29.172 +
  29.173 +      # If we're not in dry-run mode, bomb out on failure
  29.174 +      test -d "$my_tmpdir" || {
  29.175 +        $echo "cannot create temporary directory \`$my_tmpdir'" 1>&2
  29.176 +	exit $EXIT_FAILURE
  29.177 +      }
  29.178 +    fi
  29.179 +
  29.180 +    $echo "X$my_tmpdir" | $Xsed
  29.181 +}
  29.182 +
  29.183 +
  29.184 +# func_win32_libid arg
  29.185 +# return the library type of file 'arg'
  29.186 +#
  29.187 +# Need a lot of goo to handle *both* DLLs and import libs
  29.188 +# Has to be a shell function in order to 'eat' the argument
  29.189 +# that is supplied when $file_magic_command is called.
  29.190 +func_win32_libid ()
  29.191 +{
  29.192 +  win32_libid_type="unknown"
  29.193 +  win32_fileres=`file -L $1 2>/dev/null`
  29.194 +  case $win32_fileres in
  29.195 +  *ar\ archive\ import\ library*) # definitely import
  29.196 +    win32_libid_type="x86 archive import"
  29.197 +    ;;
  29.198 +  *ar\ archive*) # could be an import, or static
  29.199 +    if eval $OBJDUMP -f $1 | $SED -e '10q' 2>/dev/null | \
  29.200 +      $EGREP -e 'file format pe-i386(.*architecture: i386)?' >/dev/null ; then
  29.201 +      win32_nmres=`eval $NM -f posix -A $1 | \
  29.202 +	$SED -n -e '1,100{/ I /{s,.*,import,;p;q;};}'`
  29.203 +      case $win32_nmres in
  29.204 +      import*)  win32_libid_type="x86 archive import";;
  29.205 +      *)        win32_libid_type="x86 archive static";;
  29.206 +      esac
  29.207 +    fi
  29.208 +    ;;
  29.209 +  *DLL*)
  29.210 +    win32_libid_type="x86 DLL"
  29.211 +    ;;
  29.212 +  *executable*) # but shell scripts are "executable" too...
  29.213 +    case $win32_fileres in
  29.214 +    *MS\ Windows\ PE\ Intel*)
  29.215 +      win32_libid_type="x86 DLL"
  29.216 +      ;;
  29.217 +    esac
  29.218 +    ;;
  29.219 +  esac
  29.220 +  $echo $win32_libid_type
  29.221 +}
  29.222 +
  29.223 +
  29.224 +# func_infer_tag arg
  29.225 +# Infer tagged configuration to use if any are available and
  29.226 +# if one wasn't chosen via the "--tag" command line option.
  29.227 +# Only attempt this if the compiler in the base compile
  29.228 +# command doesn't match the default compiler.
  29.229 +# arg is usually of the form 'gcc ...'
  29.230 +func_infer_tag ()
  29.231 +{
  29.232 +    if test -n "$available_tags" && test -z "$tagname"; then
  29.233 +      CC_quoted=
  29.234 +      for arg in $CC; do
  29.235 +	case $arg in
  29.236 +	  *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \	]*|*]*|"")
  29.237 +	  arg="\"$arg\""
  29.238 +	  ;;
  29.239 +	esac
  29.240 +	CC_quoted="$CC_quoted $arg"
  29.241 +      done
  29.242 +      case $@ in
  29.243 +      # Blanks in the command may have been stripped by the calling shell,
  29.244 +      # but not from the CC environment variable when configure was run.
  29.245 +      " $CC "* | "$CC "* | " `$echo $CC` "* | "`$echo $CC` "* | " $CC_quoted"* | "$CC_quoted "* | " `$echo $CC_quoted` "* | "`$echo $CC_quoted` "*) ;;
  29.246 +      # Blanks at the start of $base_compile will cause this to fail
  29.247 +      # if we don't check for them as well.
  29.248 +      *)
  29.249 +	for z in $available_tags; do
  29.250 +	  if grep "^# ### BEGIN LIBTOOL TAG CONFIG: $z$" < "$progpath" > /dev/null; then
  29.251 +	    # Evaluate the configuration.
  29.252 +	    eval "`${SED} -n -e '/^# ### BEGIN LIBTOOL TAG CONFIG: '$z'$/,/^# ### END LIBTOOL TAG CONFIG: '$z'$/p' < $progpath`"
  29.253 +	    CC_quoted=
  29.254 +	    for arg in $CC; do
  29.255 +	    # Double-quote args containing other shell metacharacters.
  29.256 +	    case $arg in
  29.257 +	      *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \	]*|*]*|"")
  29.258 +	      arg="\"$arg\""
  29.259 +	      ;;
  29.260 +	    esac
  29.261 +	    CC_quoted="$CC_quoted $arg"
  29.262 +	  done
  29.263 +	    case "$@ " in
  29.264 +	      " $CC "* | "$CC "* | " `$echo $CC` "* | "`$echo $CC` "* | " $CC_quoted"* | "$CC_quoted "* | " `$echo $CC_quoted` "* | "`$echo $CC_quoted` "*)
  29.265 +	      # The compiler in the base compile command matches
  29.266 +	      # the one in the tagged configuration.
  29.267 +	      # Assume this is the tagged configuration we want.
  29.268 +	      tagname=$z
  29.269 +	      break
  29.270 +	      ;;
  29.271 +	    esac
  29.272 +	  fi
  29.273 +	done
  29.274 +	# If $tagname still isn't set, then no tagged configuration
  29.275 +	# was found and let the user know that the "--tag" command
  29.276 +	# line option must be used.
  29.277 +	if test -z "$tagname"; then
  29.278 +	  $echo "$modename: unable to infer tagged configuration"
  29.279 +	  $echo "$modename: specify a tag with \`--tag'" 1>&2
  29.280 +	  exit $EXIT_FAILURE
  29.281 +#        else
  29.282 +#          $echo "$modename: using $tagname tagged configuration"
  29.283 +	fi
  29.284 +	;;
  29.285 +      esac
  29.286 +    fi
  29.287 +}
  29.288 +
  29.289 +
  29.290 +# func_extract_an_archive dir oldlib
  29.291 +func_extract_an_archive ()
  29.292 +{
  29.293 +    f_ex_an_ar_dir="$1"; shift
  29.294 +    f_ex_an_ar_oldlib="$1"
  29.295 +
  29.296 +    $show "(cd $f_ex_an_ar_dir && $AR x $f_ex_an_ar_oldlib)"
  29.297 +    $run eval "(cd \$f_ex_an_ar_dir && $AR x \$f_ex_an_ar_oldlib)" || exit $?
  29.298 +    if ($AR t "$f_ex_an_ar_oldlib" | sort | sort -uc >/dev/null 2>&1); then
  29.299 +     :
  29.300 +    else
  29.301 +      $echo "$modename: ERROR: object name conflicts: $f_ex_an_ar_dir/$f_ex_an_ar_oldlib" 1>&2
  29.302 +      exit $EXIT_FAILURE
  29.303 +    fi
  29.304 +}
  29.305 +
  29.306 +# func_extract_archives gentop oldlib ...
  29.307 +func_extract_archives ()
  29.308 +{
  29.309 +    my_gentop="$1"; shift
  29.310 +    my_oldlibs=${1+"$@"}
  29.311 +    my_oldobjs=""
  29.312 +    my_xlib=""
  29.313 +    my_xabs=""
  29.314 +    my_xdir=""
  29.315 +    my_status=""
  29.316 +
  29.317 +    $show "${rm}r $my_gentop"
  29.318 +    $run ${rm}r "$my_gentop"
  29.319 +    $show "$mkdir $my_gentop"
  29.320 +    $run $mkdir "$my_gentop"
  29.321 +    my_status=$?
  29.322 +    if test "$my_status" -ne 0 && test ! -d "$my_gentop"; then
  29.323 +      exit $my_status
  29.324 +    fi
  29.325 +
  29.326 +    for my_xlib in $my_oldlibs; do
  29.327 +      # Extract the objects.
  29.328 +      case $my_xlib in
  29.329 +	[\\/]* | [A-Za-z]:[\\/]*) my_xabs="$my_xlib" ;;
  29.330 +	*) my_xabs=`pwd`"/$my_xlib" ;;
  29.331 +      esac
  29.332 +      my_xlib=`$echo "X$my_xlib" | $Xsed -e 's%^.*/%%'`
  29.333 +      my_xdir="$my_gentop/$my_xlib"
  29.334 +
  29.335 +      $show "${rm}r $my_xdir"
  29.336 +      $run ${rm}r "$my_xdir"
  29.337 +      $show "$mkdir $my_xdir"
  29.338 +      $run $mkdir "$my_xdir"
  29.339 +      exit_status=$?
  29.340 +      if test "$exit_status" -ne 0 && test ! -d "$my_xdir"; then
  29.341 +	exit $exit_status
  29.342 +      fi
  29.343 +      case $host in
  29.344 +      *-darwin*)
  29.345 +	$show "Extracting $my_xabs"
  29.346 +	# Do not bother doing anything if just a dry run
  29.347 +	if test -z "$run"; then
  29.348 +	  darwin_orig_dir=`pwd`
  29.349 +	  cd $my_xdir || exit $?
  29.350 +	  darwin_archive=$my_xabs
  29.351 +	  darwin_curdir=`pwd`
  29.352 +	  darwin_base_archive=`$echo "X$darwin_archive" | $Xsed -e 's%^.*/%%'`
  29.353 +	  darwin_arches=`lipo -info "$darwin_archive" 2>/dev/null | $EGREP Architectures 2>/dev/null`
  29.354 +	  if test -n "$darwin_arches"; then 
  29.355 +	    darwin_arches=`echo "$darwin_arches" | $SED -e 's/.*are://'`
  29.356 +	    darwin_arch=
  29.357 +	    $show "$darwin_base_archive has multiple architectures $darwin_arches"
  29.358 +	    for darwin_arch in  $darwin_arches ; do
  29.359 +	      mkdir -p "unfat-$$/${darwin_base_archive}-${darwin_arch}"
  29.360 +	      lipo -thin $darwin_arch -output "unfat-$$/${darwin_base_archive}-${darwin_arch}/${darwin_base_archive}" "${darwin_archive}"
  29.361 +	      cd "unfat-$$/${darwin_base_archive}-${darwin_arch}"
  29.362 +	      func_extract_an_archive "`pwd`" "${darwin_base_archive}"
  29.363 +	      cd "$darwin_curdir"
  29.364 +	      $rm "unfat-$$/${darwin_base_archive}-${darwin_arch}/${darwin_base_archive}"
  29.365 +	    done # $darwin_arches
  29.366 +      ## Okay now we have a bunch of thin objects, gotta fatten them up :)
  29.367 +	    darwin_filelist=`find unfat-$$ -type f -name \*.o -print -o -name \*.lo -print| xargs basename | sort -u | $NL2SP`
  29.368 +	    darwin_file=
  29.369 +	    darwin_files=
  29.370 +	    for darwin_file in $darwin_filelist; do
  29.371 +	      darwin_files=`find unfat-$$ -name $darwin_file -print | $NL2SP`
  29.372 +	      lipo -create -output "$darwin_file" $darwin_files
  29.373 +	    done # $darwin_filelist
  29.374 +	    ${rm}r unfat-$$
  29.375 +	    cd "$darwin_orig_dir"
  29.376 +	  else
  29.377 +	    cd "$darwin_orig_dir"
  29.378 + 	    func_extract_an_archive "$my_xdir" "$my_xabs"
  29.379 +	  fi # $darwin_arches
  29.380 +	fi # $run
  29.381 +	;;
  29.382 +      *)
  29.383 +        func_extract_an_archive "$my_xdir" "$my_xabs"
  29.384 +        ;;
  29.385 +      esac
  29.386 +      my_oldobjs="$my_oldobjs "`find $my_xdir -name \*.$objext -print -o -name \*.lo -print | $NL2SP`
  29.387 +    done
  29.388 +    func_extract_archives_result="$my_oldobjs"
  29.389 +}
  29.390 +# End of Shell function definitions
  29.391 +#####################################
  29.392 +
  29.393 +# Darwin sucks
  29.394 +eval std_shrext=\"$shrext_cmds\"
  29.395 +
  29.396 +disable_libs=no
  29.397 +
  29.398 +# Parse our command line options once, thoroughly.
  29.399 +while test "$#" -gt 0
  29.400 +do
  29.401 +  arg="$1"
  29.402 +  shift
  29.403 +
  29.404 +  case $arg in
  29.405 +  -*=*) optarg=`$echo "X$arg" | $Xsed -e 's/[-_a-zA-Z0-9]*=//'` ;;
  29.406 +  *) optarg= ;;
  29.407 +  esac
  29.408 +
  29.409 +  # If the previous option needs an argument, assign it.
  29.410 +  if test -n "$prev"; then
  29.411 +    case $prev in
  29.412 +    execute_dlfiles)
  29.413 +      execute_dlfiles="$execute_dlfiles $arg"
  29.414 +      ;;
  29.415 +    tag)
  29.416 +      tagname="$arg"
  29.417 +      preserve_args="${preserve_args}=$arg"
  29.418 +
  29.419 +      # Check whether tagname contains only valid characters
  29.420 +      case $tagname in
  29.421 +      *[!-_A-Za-z0-9,/]*)
  29.422 +	$echo "$progname: invalid tag name: $tagname" 1>&2
  29.423 +	exit $EXIT_FAILURE
  29.424 +	;;
  29.425 +      esac
  29.426 +
  29.427 +      case $tagname in
  29.428 +      CC)
  29.429 +	# Don't test for the "default" C tag, as we know, it's there, but
  29.430 +	# not specially marked.
  29.431 +	;;
  29.432 +      *)
  29.433 +	if grep "^# ### BEGIN LIBTOOL TAG CONFIG: $tagname$" < "$progpath" > /dev/null; then
  29.434 +	  taglist="$taglist $tagname"
  29.435 +	  # Evaluate the configuration.
  29.436 +	  eval "`${SED} -n -e '/^# ### BEGIN LIBTOOL TAG CONFIG: '$tagname'$/,/^# ### END LIBTOOL TAG CONFIG: '$tagname'$/p' < $progpath`"
  29.437 +	else
  29.438 +	  $echo "$progname: ignoring unknown tag $tagname" 1>&2
  29.439 +	fi
  29.440 +	;;
  29.441 +      esac
  29.442 +      ;;
  29.443 +    *)
  29.444 +      eval "$prev=\$arg"
  29.445 +      ;;
  29.446 +    esac
  29.447 +
  29.448 +    prev=
  29.449 +    prevopt=
  29.450 +    continue
  29.451 +  fi
  29.452 +
  29.453 +  # Have we seen a non-optional argument yet?
  29.454 +  case $arg in
  29.455 +  --help)
  29.456 +    show_help=yes
  29.457 +    ;;
  29.458 +
  29.459 +  --version)
  29.460 +    $echo "$PROGRAM (GNU $PACKAGE) $VERSION$TIMESTAMP"
  29.461 +    $echo
  29.462 +    $echo "Copyright (C) 2005  Free Software Foundation, Inc."
  29.463 +    $echo "This is free software; see the source for copying conditions.  There is NO"
  29.464 +    $echo "warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
  29.465 +    exit $?
  29.466 +    ;;
  29.467 +
  29.468 +  --config)
  29.469 +    ${SED} -e '1,/^# ### BEGIN LIBTOOL CONFIG/d' -e '/^# ### END LIBTOOL CONFIG/,$d' $progpath
  29.470 +    # Now print the configurations for the tags.
  29.471 +    for tagname in $taglist; do
  29.472 +      ${SED} -n -e "/^# ### BEGIN LIBTOOL TAG CONFIG: $tagname$/,/^# ### END LIBTOOL TAG CONFIG: $tagname$/p" < "$progpath"
  29.473 +    done
  29.474 +    exit $?
  29.475 +    ;;
  29.476 +
  29.477 +  --debug)
  29.478 +    $echo "$progname: enabling shell trace mode"
  29.479 +    set -x
  29.480 +    preserve_args="$preserve_args $arg"
  29.481 +    ;;
  29.482 +
  29.483 +  --dry-run | -n)
  29.484 +    run=:
  29.485 +    ;;
  29.486 +
  29.487 +  --features)
  29.488 +    $echo "host: $host"
  29.489 +    if test "$build_libtool_libs" = yes; then
  29.490 +      $echo "enable shared libraries"
  29.491 +    else
  29.492 +      $echo "disable shared libraries"
  29.493 +    fi
  29.494 +    if test "$build_old_libs" = yes; then
  29.495 +      $echo "enable static libraries"
  29.496 +    else
  29.497 +      $echo "disable static libraries"
  29.498 +    fi
  29.499 +    exit $?
  29.500 +    ;;
  29.501 +
  29.502 +  --finish) mode="finish" ;;
  29.503 +
  29.504 +  --mode) prevopt="--mode" prev=mode ;;
  29.505 +  --mode=*) mode="$optarg" ;;
  29.506 +
  29.507 +  --preserve-dup-deps) duplicate_deps="yes" ;;
  29.508 +
  29.509 +  --quiet | --silent)
  29.510 +    show=:
  29.511 +    preserve_args="$preserve_args $arg"
  29.512 +    ;;
  29.513 +
  29.514 +  --tag)
  29.515 +    prevopt="--tag"
  29.516 +    prev=tag
  29.517 +    preserve_args="$preserve_args --tag"
  29.518 +    ;;
  29.519 +  --tag=*)
  29.520 +    set tag "$optarg" ${1+"$@"}
  29.521 +    shift
  29.522 +    prev=tag
  29.523 +    preserve_args="$preserve_args --tag"
  29.524 +    ;;
  29.525 +
  29.526 +  -dlopen)
  29.527 +    prevopt="-dlopen"
  29.528 +    prev=execute_dlfiles
  29.529 +    ;;
  29.530 +
  29.531 +  -*)
  29.532 +    $echo "$modename: unrecognized option \`$arg'" 1>&2
  29.533 +    $echo "$help" 1>&2
  29.534 +    exit $EXIT_FAILURE
  29.535 +    ;;
  29.536 +
  29.537 +  *)
  29.538 +    nonopt="$arg"
  29.539 +    break
  29.540 +    ;;
  29.541 +  esac
  29.542 +done
  29.543 +
  29.544 +if test -n "$prevopt"; then
  29.545 +  $echo "$modename: option \`$prevopt' requires an argument" 1>&2
  29.546 +  $echo "$help" 1>&2
  29.547 +  exit $EXIT_FAILURE
  29.548 +fi
  29.549 +
  29.550 +case $disable_libs in
  29.551 +no) 
  29.552 +  ;;
  29.553 +shared)
  29.554 +  build_libtool_libs=no
  29.555 +  build_old_libs=yes
  29.556 +  ;;
  29.557 +static)
  29.558 +  build_old_libs=`case $build_libtool_libs in yes) echo no;; *) echo yes;; esac`
  29.559 +  ;;
  29.560 +esac
  29.561 +
  29.562 +# If this variable is set in any of the actions, the command in it
  29.563 +# will be execed at the end.  This prevents here-documents from being
  29.564 +# left over by shells.
  29.565 +exec_cmd=
  29.566 +
  29.567 +if test -z "$show_help"; then
  29.568 +
  29.569 +  # Infer the operation mode.
  29.570 +  if test -z "$mode"; then
  29.571 +    $echo "*** Warning: inferring the mode of operation is deprecated." 1>&2
  29.572 +    $echo "*** Future versions of Libtool will require --mode=MODE be specified." 1>&2
  29.573 +    case $nonopt in
  29.574 +    *cc | cc* | *++ | gcc* | *-gcc* | g++* | xlc*)
  29.575 +      mode=link
  29.576 +      for arg
  29.577 +      do
  29.578 +	case $arg in
  29.579 +	-c)
  29.580 +	   mode=compile
  29.581 +	   break
  29.582 +	   ;;
  29.583 +	esac
  29.584 +      done
  29.585 +      ;;
  29.586 +    *db | *dbx | *strace | *truss)
  29.587 +      mode=execute
  29.588 +      ;;
  29.589 +    *install*|cp|mv)
  29.590 +      mode=install
  29.591 +      ;;
  29.592 +    *rm)
  29.593 +      mode=uninstall
  29.594 +      ;;
  29.595 +    *)
  29.596 +      # If we have no mode, but dlfiles were specified, then do execute mode.
  29.597 +      test -n "$execute_dlfiles" && mode=execute
  29.598 +
  29.599 +      # Just use the default operation mode.
  29.600 +      if test -z "$mode"; then
  29.601 +	if test -n "$nonopt"; then
  29.602 +	  $echo "$modename: warning: cannot infer operation mode from \`$nonopt'" 1>&2
  29.603 +	else
  29.604 +	  $echo "$modename: warning: cannot infer operation mode without MODE-ARGS" 1>&2
  29.605 +	fi
  29.606 +      fi
  29.607 +      ;;
  29.608 +    esac
  29.609 +  fi
  29.610 +
  29.611 +  # Only execute mode is allowed to have -dlopen flags.
  29.612 +  if test -n "$execute_dlfiles" && test "$mode" != execute; then
  29.613 +    $echo "$modename: unrecognized option \`-dlopen'" 1>&2
  29.614 +    $echo "$help" 1>&2
  29.615 +    exit $EXIT_FAILURE
  29.616 +  fi
  29.617 +
  29.618 +  # Change the help message to a mode-specific one.
  29.619 +  generic_help="$help"
  29.620 +  help="Try \`$modename --help --mode=$mode' for more information."
  29.621 +
  29.622 +  # These modes are in order of execution frequency so that they run quickly.
  29.623 +  case $mode in
  29.624 +  # libtool compile mode
  29.625 +  compile)
  29.626 +    modename="$modename: compile"
  29.627 +    # Get the compilation command and the source file.
  29.628 +    base_compile=
  29.629 +    srcfile="$nonopt"  #  always keep a non-empty value in "srcfile"
  29.630 +    suppress_opt=yes
  29.631 +    suppress_output=
  29.632 +    arg_mode=normal
  29.633 +    libobj=
  29.634 +    later=
  29.635 +
  29.636 +    for arg
  29.637 +    do
  29.638 +      case $arg_mode in
  29.639 +      arg  )
  29.640 +	# do not "continue".  Instead, add this to base_compile
  29.641 +	lastarg="$arg"
  29.642 +	arg_mode=normal
  29.643 +	;;
  29.644 +
  29.645 +      target )
  29.646 +	libobj="$arg"
  29.647 +	arg_mode=normal
  29.648 +	continue
  29.649 +	;;
  29.650 +
  29.651 +      normal )
  29.652 +	# Accept any command-line options.
  29.653 +	case $arg in
  29.654 +	-o)
  29.655 +	  if test -n "$libobj" ; then
  29.656 +	    $echo "$modename: you cannot specify \`-o' more than once" 1>&2
  29.657 +	    exit $EXIT_FAILURE
  29.658 +	  fi
  29.659 +	  arg_mode=target
  29.660 +	  continue
  29.661 +	  ;;
  29.662 +
  29.663 +	-static | -prefer-pic | -prefer-non-pic)
  29.664 +	  later="$later $arg"
  29.665 +	  continue
  29.666 +	  ;;
  29.667 +
  29.668 +	-no-suppress)
  29.669 +	  suppress_opt=no
  29.670 +	  continue
  29.671 +	  ;;
  29.672 +
  29.673 +	-Xcompiler)
  29.674 +	  arg_mode=arg  #  the next one goes into the "base_compile" arg list
  29.675 +	  continue      #  The current "srcfile" will either be retained or
  29.676 +	  ;;            #  replaced later.  I would guess that would be a bug.
  29.677 +
  29.678 +	-Wc,*)
  29.679 +	  args=`$echo "X$arg" | $Xsed -e "s/^-Wc,//"`
  29.680 +	  lastarg=
  29.681 +	  save_ifs="$IFS"; IFS=','
  29.682 + 	  for arg in $args; do
  29.683 +	    IFS="$save_ifs"
  29.684 +
  29.685 +	    # Double-quote args containing other shell metacharacters.
  29.686 +	    # Many Bourne shells cannot handle close brackets correctly
  29.687 +	    # in scan sets, so we specify it separately.
  29.688 +	    case $arg in
  29.689 +	      *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \	]*|*]*|"")
  29.690 +	      arg="\"$arg\""
  29.691 +	      ;;
  29.692 +	    esac
  29.693 +	    lastarg="$lastarg $arg"
  29.694 +	  done
  29.695 +	  IFS="$save_ifs"
  29.696 +	  lastarg=`$echo "X$lastarg" | $Xsed -e "s/^ //"`
  29.697 +
  29.698 +	  # Add the arguments to base_compile.
  29.699 +	  base_compile="$base_compile $lastarg"
  29.700 +	  continue
  29.701 +	  ;;
  29.702 +
  29.703 +	* )
  29.704 +	  # Accept the current argument as the source file.
  29.705 +	  # The previous "srcfile" becomes the current argument.
  29.706 +	  #
  29.707 +	  lastarg="$srcfile"
  29.708 +	  srcfile="$arg"
  29.709 +	  ;;
  29.710 +	esac  #  case $arg
  29.711 +	;;
  29.712 +      esac    #  case $arg_mode
  29.713 +
  29.714 +      # Aesthetically quote the previous argument.
  29.715 +      lastarg=`$echo "X$lastarg" | $Xsed -e "$sed_quote_subst"`
  29.716 +
  29.717 +      case $lastarg in
  29.718 +      # Double-quote args containing other shell metacharacters.
  29.719 +      # Many Bourne shells cannot handle close brackets correctly
  29.720 +      # in scan sets, and some SunOS ksh mistreat backslash-escaping
  29.721 +      # in scan sets (worked around with variable expansion),
  29.722 +      # and furthermore cannot handle '|' '&' '(' ')' in scan sets 
  29.723 +      # at all, so we specify them separately.
  29.724 +      *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \	]*|*]*|"")
  29.725 +	lastarg="\"$lastarg\""
  29.726 +	;;
  29.727 +      esac
  29.728 +
  29.729 +      base_compile="$base_compile $lastarg"
  29.730 +    done # for arg
  29.731 +
  29.732 +    case $arg_mode in
  29.733 +    arg)
  29.734 +      $echo "$modename: you must specify an argument for -Xcompile"
  29.735 +      exit $EXIT_FAILURE
  29.736 +      ;;
  29.737 +    target)
  29.738 +      $echo "$modename: you must specify a target with \`-o'" 1>&2
  29.739 +      exit $EXIT_FAILURE
  29.740 +      ;;
  29.741 +    *)
  29.742 +      # Get the name of the library object.
  29.743 +      [ -z "$libobj" ] && libobj=`$echo "X$srcfile" | $Xsed -e 's%^.*/%%'`
  29.744 +      ;;
  29.745 +    esac
  29.746 +
  29.747 +    # Recognize several different file suffixes.
  29.748 +    # If the user specifies -o file.o, it is replaced with file.lo
  29.749 +    xform='[cCFSifmso]'
  29.750 +    case $libobj in
  29.751 +    *.ada) xform=ada ;;
  29.752 +    *.adb) xform=adb ;;
  29.753 +    *.ads) xform=ads ;;
  29.754 +    *.asm) xform=asm ;;
  29.755 +    *.c++) xform=c++ ;;
  29.756 +    *.cc) xform=cc ;;
  29.757 +    *.ii) xform=ii ;;
  29.758 +    *.class) xform=class ;;
  29.759 +    *.cpp) xform=cpp ;;
  29.760 +    *.cxx) xform=cxx ;;
  29.761 +    *.f90) xform=f90 ;;
  29.762 +    *.for) xform=for ;;
  29.763 +    *.java) xform=java ;;
  29.764 +    esac
  29.765 +
  29.766 +    libobj=`$echo "X$libobj" | $Xsed -e "s/\.$xform$/.lo/"`
  29.767 +
  29.768 +    case $libobj in
  29.769 +    *.lo) obj=`$echo "X$libobj" | $Xsed -e "$lo2o"` ;;
  29.770 +    *)
  29.771 +      $echo "$modename: cannot determine name of library object from \`$libobj'" 1>&2
  29.772 +      exit $EXIT_FAILURE
  29.773 +      ;;
  29.774 +    esac
  29.775 +
  29.776 +    func_infer_tag $base_compile
  29.777 +
  29.778 +    for arg in $later; do
  29.779 +      case $arg in
  29.780 +      -static)
  29.781 +	build_old_libs=yes
  29.782 +	continue
  29.783 +	;;
  29.784 +
  29.785 +      -prefer-pic)
  29.786 +	pic_mode=yes
  29.787 +	continue
  29.788 +	;;
  29.789 +
  29.790 +      -prefer-non-pic)
  29.791 +	pic_mode=no
  29.792 +	continue
  29.793 +	;;
  29.794 +      esac
  29.795 +    done
  29.796 +
  29.797 +    qlibobj=`$echo "X$libobj" | $Xsed -e "$sed_quote_subst"`
  29.798 +    case $qlibobj in
  29.799 +      *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \	]*|*]*|"")
  29.800 +	qlibobj="\"$qlibobj\"" ;;
  29.801 +    esac
  29.802 +    test "X$libobj" != "X$qlibobj" \
  29.803 +	&& $echo "X$libobj" | grep '[]~#^*{};<>?"'"'"' 	&()|`$[]' \
  29.804 +	&& $echo "$modename: libobj name \`$libobj' may not contain shell special characters."
  29.805 +    objname=`$echo "X$obj" | $Xsed -e 's%^.*/%%'`
  29.806 +    xdir=`$echo "X$obj" | $Xsed -e 's%/[^/]*$%%'`
  29.807 +    if test "X$xdir" = "X$obj"; then
  29.808 +      xdir=
  29.809 +    else
  29.810 +      xdir=$xdir/
  29.811 +    fi
  29.812 +    lobj=${xdir}$objdir/$objname
  29.813 +
  29.814 +    if test -z "$base_compile"; then
  29.815 +      $echo "$modename: you must specify a compilation command" 1>&2
  29.816 +      $echo "$help" 1>&2
  29.817 +      exit $EXIT_FAILURE
  29.818 +    fi
  29.819 +
  29.820 +    # Delete any leftover library objects.
  29.821 +    if test "$build_old_libs" = yes; then
  29.822 +      removelist="$obj $lobj $libobj ${libobj}T"
  29.823 +    else
  29.824 +      removelist="$lobj $libobj ${libobj}T"
  29.825 +    fi
  29.826 +
  29.827 +    $run $rm $removelist
  29.828 +    trap "$run $rm $removelist; exit $EXIT_FAILURE" 1 2 15
  29.829 +
  29.830 +    # On Cygwin there's no "real" PIC flag so we must build both object types
  29.831 +    case $host_os in
  29.832 +    cygwin* | mingw* | pw32* | os2*)
  29.833 +      pic_mode=default
  29.834 +      ;;
  29.835 +    esac
  29.836 +    if test "$pic_mode" = no && test "$deplibs_check_method" != pass_all; then
  29.837 +      # non-PIC code in shared libraries is not supported
  29.838 +      pic_mode=default
  29.839 +    fi
  29.840 +
  29.841 +    # Calculate the filename of the output object if compiler does
  29.842 +    # not support -o with -c
  29.843 +    if test "$compiler_c_o" = no; then
  29.844 +      output_obj=`$echo "X$srcfile" | $Xsed -e 's%^.*/%%' -e 's%\.[^.]*$%%'`.${objext}
  29.845 +      lockfile="$output_obj.lock"
  29.846 +      removelist="$removelist $output_obj $lockfile"
  29.847 +      trap "$run $rm $removelist; exit $EXIT_FAILURE" 1 2 15
  29.848 +    else
  29.849 +      output_obj=
  29.850 +      need_locks=no
  29.851 +      lockfile=
  29.852 +    fi
  29.853 +
  29.854 +    # Lock this critical section if it is needed
  29.855 +    # We use this script file to make the link, it avoids creating a new file
  29.856 +    if test "$need_locks" = yes; then
  29.857 +      until $run ln "$progpath" "$lockfile" 2>/dev/null; do
  29.858 +	$show "Waiting for $lockfile to be removed"
  29.859 +	sleep 2
  29.860 +      done
  29.861 +    elif test "$need_locks" = warn; then
  29.862 +      if test -f "$lockfile"; then
  29.863 +	$echo "\
  29.864 +*** ERROR, $lockfile exists and contains:
  29.865 +`cat $lockfile 2>/dev/null`
  29.866 +
  29.867 +This indicates that another process is trying to use the same
  29.868 +temporary object file, and libtool could not work around it because
  29.869 +your compiler does not support \`-c' and \`-o' together.  If you
  29.870 +repeat this compilation, it may succeed, by chance, but you had better
  29.871 +avoid parallel builds (make -j) in this platform, or get a better
  29.872 +compiler."
  29.873 +
  29.874 +	$run $rm $removelist
  29.875 +	exit $EXIT_FAILURE
  29.876 +      fi
  29.877 +      $echo "$srcfile" > "$lockfile"
  29.878 +    fi
  29.879 +
  29.880 +    if test -n "$fix_srcfile_path"; then
  29.881 +      eval srcfile=\"$fix_srcfile_path\"
  29.882 +    fi
  29.883 +    qsrcfile=`$echo "X$srcfile" | $Xsed -e "$sed_quote_subst"`
  29.884 +    case $qsrcfile in
  29.885 +      *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \	]*|*]*|"")
  29.886 +      qsrcfile="\"$qsrcfile\"" ;;
  29.887 +    esac
  29.888 +
  29.889 +    $run $rm "$libobj" "${libobj}T"
  29.890 +
  29.891 +    # Create a libtool object file (analogous to a ".la" file),
  29.892 +    # but don't create it if we're doing a dry run.
  29.893 +    test -z "$run" && cat > ${libobj}T <<EOF
  29.894 +# $libobj - a libtool object file
  29.895 +# Generated by $PROGRAM - GNU $PACKAGE $VERSION$TIMESTAMP
  29.896 +#
  29.897 +# Please DO NOT delete this file!
  29.898 +# It is necessary for linking the library.
  29.899 +
  29.900 +# Name of the PIC object.
  29.901 +EOF
  29.902 +
  29.903 +    # Only build a PIC object if we are building libtool libraries.
  29.904 +    if test "$build_libtool_libs" = yes; then
  29.905 +      # Without this assignment, base_compile gets emptied.
  29.906 +      fbsd_hideous_sh_bug=$base_compile
  29.907 +
  29.908 +      if test "$pic_mode" != no; then
  29.909 +	command="$base_compile $qsrcfile $pic_flag"
  29.910 +      else
  29.911 +	# Don't build PIC code
  29.912 +	command="$base_compile $qsrcfile"
  29.913 +      fi
  29.914 +
  29.915 +      if test ! -d "${xdir}$objdir"; then
  29.916 +	$show "$mkdir ${xdir}$objdir"
  29.917 +	$run $mkdir ${xdir}$objdir
  29.918 +	exit_status=$?
  29.919 +	if test "$exit_status" -ne 0 && test ! -d "${xdir}$objdir"; then
  29.920 +	  exit $exit_status
  29.921 +	fi
  29.922 +      fi
  29.923 +
  29.924 +      if test -z "$output_obj"; then
  29.925 +	# Place PIC objects in $objdir
  29.926 +	command="$command -o $lobj"
  29.927 +      fi
  29.928 +
  29.929 +      $run $rm "$lobj" "$output_obj"
  29.930 +
  29.931 +      $show "$command"
  29.932 +      if $run eval "$command"; then :
  29.933 +      else
  29.934 +	test -n "$output_obj" && $run $rm $removelist
  29.935 +	exit $EXIT_FAILURE
  29.936 +      fi
  29.937 +
  29.938 +      if test "$need_locks" = warn &&
  29.939 +	 test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then
  29.940 +	$echo "\
  29.941 +*** ERROR, $lockfile contains:
  29.942 +`cat $lockfile 2>/dev/null`
  29.943 +
  29.944 +but it should contain:
  29.945 +$srcfile
  29.946 +
  29.947 +This indicates that another process is trying to use the same
  29.948 +temporary object file, and libtool could not work around it because
  29.949 +your compiler does not support \`-c' and \`-o' together.  If you
  29.950 +repeat this compilation, it may succeed, by chance, but you had better
  29.951 +avoid parallel builds (make -j) in this platform, or get a better
  29.952 +compiler."
  29.953 +
  29.954 +	$run $rm $removelist
  29.955 +	exit $EXIT_FAILURE
  29.956 +      fi
  29.957 +
  29.958 +      # Just move the object if needed, then go on to compile the next one
  29.959 +      if test -n "$output_obj" && test "X$output_obj" != "X$lobj"; then
  29.960 +	$show "$mv $output_obj $lobj"
  29.961 +	if $run $mv $output_obj $lobj; then :
  29.962 +	else
  29.963 +	  error=$?
  29.964 +	  $run $rm $removelist
  29.965 +	  exit $error
  29.966 +	fi
  29.967 +      fi
  29.968 +
  29.969 +      # Append the name of the PIC object to the libtool object file.
  29.970 +      test -z "$run" && cat >> ${libobj}T <<EOF
  29.971 +pic_object='$objdir/$objname'
  29.972 +
  29.973 +EOF
  29.974 +
  29.975 +      # Allow error messages only from the first compilation.
  29.976 +      if test "$suppress_opt" = yes; then
  29.977 +        suppress_output=' >/dev/null 2>&1'
  29.978 +      fi
  29.979 +    else
  29.980 +      # No PIC object so indicate it doesn't exist in the libtool
  29.981 +      # object file.
  29.982 +      test -z "$run" && cat >> ${libobj}T <<EOF
  29.983 +pic_object=none
  29.984 +
  29.985 +EOF
  29.986 +    fi
  29.987 +
  29.988 +    # Only build a position-dependent object if we build old libraries.
  29.989 +    if test "$build_old_libs" = yes; then
  29.990 +      if test "$pic_mode" != yes; then
  29.991 +	# Don't build PIC code
  29.992 +	command="$base_compile $qsrcfile"
  29.993 +      else
  29.994 +	command="$base_compile $qsrcfile $pic_flag"
  29.995 +      fi
  29.996 +      if test "$compiler_c_o" = yes; then
  29.997 +	command="$command -o $obj"
  29.998 +      fi
  29.999 +
 29.1000 +      # Suppress compiler output if we already did a PIC compilation.
 29.1001 +      command="$command$suppress_output"
 29.1002 +      $run $rm "$obj" "$output_obj"
 29.1003 +      $show "$command"
 29.1004 +      if $run eval "$command"; then :
 29.1005 +      else
 29.1006 +	$run $rm $removelist
 29.1007 +	exit $EXIT_FAILURE
 29.1008 +      fi
 29.1009 +
 29.1010 +      if test "$need_locks" = warn &&
 29.1011 +	 test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then
 29.1012 +	$echo "\
 29.1013 +*** ERROR, $lockfile contains:
 29.1014 +`cat $lockfile 2>/dev/null`
 29.1015 +
 29.1016 +but it should contain:
 29.1017 +$srcfile
 29.1018 +
 29.1019 +This indicates that another process is trying to use the same
 29.1020 +temporary object file, and libtool could not work around it because
 29.1021 +your compiler does not support \`-c' and \`-o' together.  If you
 29.1022 +repeat this compilation, it may succeed, by chance, but you had better
 29.1023 +avoid parallel builds (make -j) in this platform, or get a better
 29.1024 +compiler."
 29.1025 +
 29.1026 +	$run $rm $removelist
 29.1027 +	exit $EXIT_FAILURE
 29.1028 +      fi
 29.1029 +
 29.1030 +      # Just move the object if needed
 29.1031 +      if test -n "$output_obj" && test "X$output_obj" != "X$obj"; then
 29.1032 +	$show "$mv $output_obj $obj"
 29.1033 +	if $run $mv $output_obj $obj; then :
 29.1034 +	else
 29.1035 +	  error=$?
 29.1036 +	  $run $rm $removelist
 29.1037 +	  exit $error
 29.1038 +	fi
 29.1039 +      fi
 29.1040 +
 29.1041 +      # Append the name of the non-PIC object the libtool object file.
 29.1042 +      # Only append if the libtool object file exists.
 29.1043 +      test -z "$run" && cat >> ${libobj}T <<EOF
 29.1044 +# Name of the non-PIC object.
 29.1045 +non_pic_object='$objname'
 29.1046 +
 29.1047 +EOF
 29.1048 +    else
 29.1049 +      # Append the name of the non-PIC object the libtool object file.
 29.1050 +      # Only append if the libtool object file exists.
 29.1051 +      test -z "$run" && cat >> ${libobj}T <<EOF
 29.1052 +# Name of the non-PIC object.
 29.1053 +non_pic_object=none
 29.1054 +
 29.1055 +EOF
 29.1056 +    fi
 29.1057 +
 29.1058 +    $run $mv "${libobj}T" "${libobj}"
 29.1059 +
 29.1060 +    # Unlock the critical section if it was locked
 29.1061 +    if test "$need_locks" != no; then
 29.1062 +      $run $rm "$lockfile"
 29.1063 +    fi
 29.1064 +
 29.1065 +    exit $EXIT_SUCCESS
 29.1066 +    ;;
 29.1067 +
 29.1068 +  # libtool link mode
 29.1069 +  link | relink)
 29.1070 +    modename="$modename: link"
 29.1071 +    case $host in
 29.1072 +    *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2*)
 29.1073 +      # It is impossible to link a dll without this setting, and
 29.1074 +      # we shouldn't force the makefile maintainer to figure out
 29.1075 +      # which system we are compiling for in order to pass an extra
 29.1076 +      # flag for every libtool invocation.
 29.1077 +      # allow_undefined=no
 29.1078 +
 29.1079 +      # FIXME: Unfortunately, there are problems with the above when trying
 29.1080 +      # to make a dll which has undefined symbols, in which case not
 29.1081 +      # even a static library is built.  For now, we need to specify
 29.1082 +      # -no-undefined on the libtool link line when we can be certain
 29.1083 +      # that all symbols are satisfied, otherwise we get a static library.
 29.1084 +      allow_undefined=yes
 29.1085 +      ;;
 29.1086 +    *)
 29.1087 +      allow_undefined=yes
 29.1088 +      ;;
 29.1089 +    esac
 29.1090 +    libtool_args="$nonopt"
 29.1091 +    base_compile="$nonopt $@"
 29.1092 +    compile_command="$nonopt"
 29.1093 +    finalize_command="$nonopt"
 29.1094 +
 29.1095 +    compile_rpath=
 29.1096 +    finalize_rpath=
 29.1097 +    compile_shlibpath=
 29.1098 +    finalize_shlibpath=
 29.1099 +    convenience=
 29.1100 +    old_convenience=
 29.1101 +    deplibs=
 29.1102 +    old_deplibs=
 29.1103 +    compiler_flags=
 29.1104 +    linker_flags=
 29.1105 +    dllsearchpath=
 29.1106 +    lib_search_path=`pwd`
 29.1107 +    inst_prefix_dir=
 29.1108 +
 29.1109 +    avoid_version=no
 29.1110 +    dlfiles=
 29.1111 +    dlprefiles=
 29.1112 +    dlself=no
 29.1113 +    export_dynamic=no
 29.1114 +    export_symbols=
 29.1115 +    export_symbols_regex=
 29.1116 +    generated=
 29.1117 +    libobjs=
 29.1118 +    ltlibs=
 29.1119 +    module=no
 29.1120 +    no_install=no
 29.1121 +    objs=
 29.1122 +    non_pic_objects=
 29.1123 +    notinst_path= # paths that contain not-installed libtool libraries
 29.1124 +    precious_files_regex=
 29.1125 +    prefer_static_libs=no
 29.1126 +    preload=no
 29.1127 +    prev=
 29.1128 +    prevarg=
 29.1129 +    release=
 29.1130 +    rpath=
 29.1131 +    xrpath=
 29.1132 +    perm_rpath=
 29.1133 +    temp_rpath=
 29.1134 +    thread_safe=no
 29.1135 +    vinfo=
 29.1136 +    vinfo_number=no
 29.1137 +
 29.1138 +    func_infer_tag $base_compile
 29.1139 +
 29.1140 +    # We need to know -static, to get the right output filenames.
 29.1141 +    for arg
 29.1142 +    do
 29.1143 +      case $arg in
 29.1144 +      -all-static | -static)
 29.1145 +	if test "X$arg" = "X-all-static"; then
 29.1146 +	  if test "$build_libtool_libs" = yes && test -z "$link_static_flag"; then
 29.1147 +	    $echo "$modename: warning: complete static linking is impossible in this configuration" 1>&2
 29.1148 +	  fi
 29.1149 +	  if test -n "$link_static_flag"; then
 29.1150 +	    dlopen_self=$dlopen_self_static
 29.1151 +	  fi
 29.1152 +	  prefer_static_libs=yes
 29.1153 +	else
 29.1154 +	  if test -z "$pic_flag" && test -n "$link_static_flag"; then
 29.1155 +	    dlopen_self=$dlopen_self_static
 29.1156 +	  fi
 29.1157 +	  prefer_static_libs=built
 29.1158 +	fi
 29.1159 +	build_libtool_libs=no
 29.1160 +	build_old_libs=yes
 29.1161 +	break
 29.1162 +	;;
 29.1163 +      esac
 29.1164 +    done
 29.1165 +
 29.1166 +    # See if our shared archives depend on static archives.
 29.1167 +    test -n "$old_archive_from_new_cmds" && build_old_libs=yes
 29.1168 +
 29.1169 +    # Go through the arguments, transforming them on the way.
 29.1170 +    while test "$#" -gt 0; do
 29.1171 +      arg="$1"
 29.1172 +      shift
 29.1173 +      case $arg in
 29.1174 +      *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \	]*|*]*|"")
 29.1175 +	qarg=\"`$echo "X$arg" | $Xsed -e "$sed_quote_subst"`\" ### testsuite: skip nested quoting test
 29.1176 +	;;
 29.1177 +      *) qarg=$arg ;;
 29.1178 +      esac
 29.1179 +      libtool_args="$libtool_args $qarg"
 29.1180 +
 29.1181 +      # If the previous option needs an argument, assign it.
 29.1182 +      if test -n "$prev"; then
 29.1183 +	case $prev in
 29.1184 +	output)
 29.1185 +	  compile_command="$compile_command @OUTPUT@"
 29.1186 +	  finalize_command="$finalize_command @OUTPUT@"
 29.1187 +	  ;;
 29.1188 +	esac
 29.1189 +
 29.1190 +	case $prev in
 29.1191 +	dlfiles|dlprefiles)
 29.1192 +	  if test "$preload" = no; then
 29.1193 +	    # Add the symbol object into the linking commands.
 29.1194 +	    compile_command="$compile_command @SYMFILE@"
 29.1195 +	    finalize_command="$finalize_command @SYMFILE@"
 29.1196 +	    preload=yes
 29.1197 +	  fi
 29.1198 +	  case $arg in
 29.1199 +	  *.la | *.lo) ;;  # We handle these cases below.
 29.1200 +	  force)
 29.1201 +	    if test "$dlself" = no; then
 29.1202 +	      dlself=needless
 29.1203 +	      export_dynamic=yes
 29.1204 +	    fi
 29.1205 +	    prev=
 29.1206 +	    continue
 29.1207 +	    ;;
 29.1208 +	  self)
 29.1209 +	    if test "$prev" = dlprefiles; then
 29.1210 +	      dlself=yes
 29.1211 +	    elif test "$prev" = dlfiles && test "$dlopen_self" != yes; then
 29.1212 +	      dlself=yes
 29.1213 +	    else
 29.1214 +	      dlself=needless
 29.1215 +	      export_dynamic=yes
 29.1216 +	    fi
 29.1217 +	    prev=
 29.1218 +	    continue
 29.1219 +	    ;;
 29.1220 +	  *)
 29.1221 +	    if test "$prev" = dlfiles; then
 29.1222 +	      dlfiles="$dlfiles $arg"
 29.1223 +	    else
 29.1224 +	      dlprefiles="$dlprefiles $arg"
 29.1225 +	    fi
 29.1226 +	    prev=
 29.1227 +	    continue
 29.1228 +	    ;;
 29.1229 +	  esac
 29.1230 +	  ;;
 29.1231 +	expsyms)
 29.1232 +	  export_symbols="$arg"
 29.1233 +	  if test ! -f "$arg"; then
 29.1234 +	    $echo "$modename: symbol file \`$arg' does not exist"
 29.1235 +	    exit $EXIT_FAILURE
 29.1236 +	  fi
 29.1237 +	  prev=
 29.1238 +	  continue
 29.1239 +	  ;;
 29.1240 +	expsyms_regex)
 29.1241 +	  export_symbols_regex="$arg"
 29.1242 +	  prev=
 29.1243 +	  continue
 29.1244 +	  ;;
 29.1245 +	inst_prefix)
 29.1246 +	  inst_prefix_dir="$arg"
 29.1247 +	  prev=
 29.1248 +	  continue
 29.1249 +	  ;;
 29.1250 +	precious_regex)
 29.1251 +	  precious_files_regex="$arg"
 29.1252 +	  prev=
 29.1253 +	  continue
 29.1254 +	  ;;
 29.1255 +	release)
 29.1256 +	  release="-$arg"
 29.1257 +	  prev=
 29.1258 +	  continue
 29.1259 +	  ;;
 29.1260 +	objectlist)
 29.1261 +	  if test -f "$arg"; then
 29.1262 +	    save_arg=$arg
 29.1263 +	    moreargs=
 29.1264 +	    for fil in `cat $save_arg`
 29.1265 +	    do
 29.1266 +#	      moreargs="$moreargs $fil"
 29.1267 +	      arg=$fil
 29.1268 +	      # A libtool-controlled object.
 29.1269 +
 29.1270 +	      # Check to see that this really is a libtool object.
 29.1271 +	      if (${SED} -e '2q' $arg | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then
 29.1272 +		pic_object=
 29.1273 +		non_pic_object=
 29.1274 +
 29.1275 +		# Read the .lo file
 29.1276 +		# If there is no directory component, then add one.
 29.1277 +		case $arg in
 29.1278 +		*/* | *\\*) . $arg ;;
 29.1279 +		*) . ./$arg ;;
 29.1280 +		esac
 29.1281 +
 29.1282 +		if test -z "$pic_object" || \
 29.1283 +		   test -z "$non_pic_object" ||
 29.1284 +		   test "$pic_object" = none && \
 29.1285 +		   test "$non_pic_object" = none; then
 29.1286 +		  $echo "$modename: cannot find name of object for \`$arg'" 1>&2
 29.1287 +		  exit $EXIT_FAILURE
 29.1288 +		fi
 29.1289 +
 29.1290 +		# Extract subdirectory from the argument.
 29.1291 +		xdir=`$echo "X$arg" | $Xsed -e 's%/[^/]*$%%'`
 29.1292 +		if test "X$xdir" = "X$arg"; then
 29.1293 +		  xdir=
 29.1294 +		else
 29.1295 +		  xdir="$xdir/"
 29.1296 +		fi
 29.1297 +
 29.1298 +		if test "$pic_object" != none; then
 29.1299 +		  # Prepend the subdirectory the object is found in.
 29.1300 +		  pic_object="$xdir$pic_object"
 29.1301 +
 29.1302 +		  if test "$prev" = dlfiles; then
 29.1303 +		    if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then
 29.1304 +		      dlfiles="$dlfiles $pic_object"
 29.1305 +		      prev=
 29.1306 +		      continue
 29.1307 +		    else
 29.1308 +		      # If libtool objects are unsupported, then we need to preload.
 29.1309 +		      prev=dlprefiles
 29.1310 +		    fi
 29.1311 +		  fi
 29.1312 +
 29.1313 +		  # CHECK ME:  I think I busted this.  -Ossama
 29.1314 +		  if test "$prev" = dlprefiles; then
 29.1315 +		    # Preload the old-style object.
 29.1316 +		    dlprefiles="$dlprefiles $pic_object"
 29.1317 +		    prev=
 29.1318 +		  fi
 29.1319 +
 29.1320 +		  # A PIC object.
 29.1321 +		  libobjs="$libobjs $pic_object"
 29.1322 +		  arg="$pic_object"
 29.1323 +		fi
 29.1324 +
 29.1325 +		# Non-PIC object.
 29.1326 +		if test "$non_pic_object" != none; then
 29.1327 +		  # Prepend the subdirectory the object is found in.
 29.1328 +		  non_pic_object="$xdir$non_pic_object"
 29.1329 +
 29.1330 +		  # A standard non-PIC object
 29.1331 +		  non_pic_objects="$non_pic_objects $non_pic_object"
 29.1332 +		  if test -z "$pic_object" || test "$pic_object" = none ; then
 29.1333 +		    arg="$non_pic_object"
 29.1334 +		  fi
 29.1335 +		else
 29.1336 +		  # If the PIC object exists, use it instead.
 29.1337 +		  # $xdir was prepended to $pic_object above.
 29.1338 +		  non_pic_object="$pic_object"
 29.1339 +		  non_pic_objects="$non_pic_objects $non_pic_object"
 29.1340 +		fi
 29.1341 +	      else
 29.1342 +		# Only an error if not doing a dry-run.
 29.1343 +		if test -z "$run"; then
 29.1344 +		  $echo "$modename: \`$arg' is not a valid libtool object" 1>&2
 29.1345 +		  exit $EXIT_FAILURE
 29.1346 +		else
 29.1347 +		  # Dry-run case.
 29.1348 +
 29.1349 +		  # Extract subdirectory from the argument.
 29.1350 +		  xdir=`$echo "X$arg" | $Xsed -e 's%/[^/]*$%%'`
 29.1351 +		  if test "X$xdir" = "X$arg"; then
 29.1352 +		    xdir=
 29.1353 +		  else
 29.1354 +		    xdir="$xdir/"
 29.1355 +		  fi
 29.1356 +
 29.1357 +		  pic_object=`$echo "X${xdir}${objdir}/${arg}" | $Xsed -e "$lo2o"`
 29.1358 +		  non_pic_object=`$echo "X${xdir}${arg}" | $Xsed -e "$lo2o"`
 29.1359 +		  libobjs="$libobjs $pic_object"
 29.1360 +		  non_pic_objects="$non_pic_objects $non_pic_object"
 29.1361 +		fi
 29.1362 +	      fi
 29.1363 +	    done
 29.1364 +	  else
 29.1365 +	    $echo "$modename: link input file \`$save_arg' does not exist"
 29.1366 +	    exit $EXIT_FAILURE
 29.1367 +	  fi
 29.1368 +	  arg=$save_arg
 29.1369 +	  prev=
 29.1370 +	  continue
 29.1371 +	  ;;
 29.1372 +	rpath | xrpath)
 29.1373 +	  # We need an absolute path.
 29.1374 +	  case $arg in
 29.1375 +	  [\\/]* | [A-Za-z]:[\\/]*) ;;
 29.1376 +	  *)
 29.1377 +	    $echo "$modename: only absolute run-paths are allowed" 1>&2
 29.1378 +	    exit $EXIT_FAILURE
 29.1379 +	    ;;
 29.1380 +	  esac
 29.1381 +	  if test "$prev" = rpath; then
 29.1382 +	    case "$rpath " in
 29.1383 +	    *" $arg "*) ;;
 29.1384 +	    *) rpath="$rpath $arg" ;;
 29.1385 +	    esac
 29.1386 +	  else
 29.1387 +	    case "$xrpath " in
 29.1388 +	    *" $arg "*) ;;
 29.1389 +	    *) xrpath="$xrpath $arg" ;;
 29.1390 +	    esac
 29.1391 +	  fi
 29.1392 +	  prev=
 29.1393 +	  continue
 29.1394 +	  ;;
 29.1395 +	xcompiler)
 29.1396 +	  compiler_flags="$compiler_flags $qarg"
 29.1397 +	  prev=
 29.1398 +	  compile_command="$compile_command $qarg"
 29.1399 +	  finalize_command="$finalize_command $qarg"
 29.1400 +	  continue
 29.1401 +	  ;;
 29.1402 +	xlinker)
 29.1403 +	  linker_flags="$linker_flags $qarg"
 29.1404 +	  compiler_flags="$compiler_flags $wl$qarg"
 29.1405 +	  prev=
 29.1406 +	  compile_command="$compile_command $wl$qarg"
 29.1407 +	  finalize_command="$finalize_command $wl$qarg"
 29.1408 +	  continue
 29.1409 +	  ;;
 29.1410 +	xcclinker)
 29.1411 +	  linker_flags="$linker_flags $qarg"
 29.1412 +	  compiler_flags="$compiler_flags $qarg"
 29.1413 +	  prev=
 29.1414 +	  compile_command="$compile_command $qarg"
 29.1415 +	  finalize_command="$finalize_command $qarg"
 29.1416 +	  continue
 29.1417 +	  ;;
 29.1418 +	shrext)
 29.1419 +  	  shrext_cmds="$arg"
 29.1420 +	  prev=
 29.1421 +	  continue
 29.1422 +	  ;;
 29.1423 +	darwin_framework|darwin_framework_skip)
 29.1424 +	  test "$prev" = "darwin_framework" && compiler_flags="$compiler_flags $arg"
 29.1425 +	  compile_command="$compile_command $arg"
 29.1426 +	  finalize_command="$finalize_command $arg"
 29.1427 +	  prev=
 29.1428 +	  continue
 29.1429 +	  ;;
 29.1430 +	*)
 29.1431 +	  eval "$prev=\"\$arg\""
 29.1432 +	  prev=
 29.1433 +	  continue
 29.1434 +	  ;;
 29.1435 +	esac
 29.1436 +      fi # test -n "$prev"
 29.1437 +
 29.1438 +      prevarg="$arg"
 29.1439 +
 29.1440 +      case $arg in
 29.1441 +      -all-static)
 29.1442 +	if test -n "$link_static_flag"; then
 29.1443 +	  compile_command="$compile_command $link_static_flag"
 29.1444 +	  finalize_command="$finalize_command $link_static_flag"
 29.1445 +	fi
 29.1446 +	continue
 29.1447 +	;;
 29.1448 +
 29.1449 +      -allow-undefined)
 29.1450 +	# FIXME: remove this flag sometime in the future.
 29.1451 +	$echo "$modename: \`-allow-undefined' is deprecated because it is the default" 1>&2
 29.1452 +	continue
 29.1453 +	;;
 29.1454 +
 29.1455 +      -avoid-version)
 29.1456 +	avoid_version=yes
 29.1457 +	continue
 29.1458 +	;;
 29.1459 +
 29.1460 +      -dlopen)
 29.1461 +	prev=dlfiles
 29.1462 +	continue
 29.1463 +	;;
 29.1464 +
 29.1465 +      -dlpreopen)
 29.1466 +	prev=dlprefiles
 29.1467 +	continue
 29.1468 +	;;
 29.1469 +
 29.1470 +      -export-dynamic)
 29.1471 +	export_dynamic=yes
 29.1472 +	continue
 29.1473 +	;;
 29.1474 +
 29.1475 +      -export-symbols | -export-symbols-regex)
 29.1476 +	if test -n "$export_symbols" || test -n "$export_symbols_regex"; then
 29.1477 +	  $echo "$modename: more than one -exported-symbols argument is not allowed"
 29.1478 +	  exit $EXIT_FAILURE
 29.1479 +	fi
 29.1480 +	if test "X$arg" = "X-export-symbols"; then
 29.1481 +	  prev=expsyms
 29.1482 +	else
 29.1483 +	  prev=expsyms_regex
 29.1484 +	fi
 29.1485 +	continue
 29.1486 +	;;
 29.1487 +
 29.1488 +      -framework|-arch|-isysroot)
 29.1489 +	case " $CC " in
 29.1490 +	  *" ${arg} ${1} "* | *" ${arg}	${1} "*) 
 29.1491 +		prev=darwin_framework_skip ;;
 29.1492 +	  *) compiler_flags="$compiler_flags $arg"
 29.1493 +	     prev=darwin_framework ;;
 29.1494 +	esac
 29.1495 +	compile_command="$compile_command $arg"
 29.1496 +	finalize_command="$finalize_command $arg"
 29.1497 +	continue
 29.1498 +	;;
 29.1499 +
 29.1500 +      -inst-prefix-dir)
 29.1501 +	prev=inst_prefix
 29.1502 +	continue
 29.1503 +	;;
 29.1504 +
 29.1505 +      # The native IRIX linker understands -LANG:*, -LIST:* and -LNO:*
 29.1506 +      # so, if we see these flags be careful not to treat them like -L
 29.1507 +      -L[A-Z][A-Z]*:*)
 29.1508 +	case $with_gcc/$host in
 29.1509 +	no/*-*-irix* | /*-*-irix*)
 29.1510 +	  compile_command="$compile_command $arg"
 29.1511 +	  finalize_command="$finalize_command $arg"
 29.1512 +	  ;;
 29.1513 +	esac
 29.1514 +	continue
 29.1515 +	;;
 29.1516 +
 29.1517 +      -L*)
 29.1518 +	dir=`$echo "X$arg" | $Xsed -e 's/^-L//'`
 29.1519 +	# We need an absolute path.
 29.1520 +	case $dir in
 29.1521 +	[\\/]* | [A-Za-z]:[\\/]*) ;;
 29.1522 +	*)
 29.1523 +	  absdir=`cd "$dir" && pwd`
 29.1524 +	  if test -z "$absdir"; then
 29.1525 +	    $echo "$modename: cannot determine absolute directory name of \`$dir'" 1>&2
 29.1526 +	    absdir="$dir"
 29.1527 +	    notinst_path="$notinst_path $dir"
 29.1528 +	  fi
 29.1529 +	  dir="$absdir"
 29.1530 +	  ;;
 29.1531 +	esac
 29.1532 +	case "$deplibs " in
 29.1533 +	*" -L$dir "*) ;;
 29.1534 +	*)
 29.1535 +	  deplibs="$deplibs -L$dir"
 29.1536 +	  lib_search_path="$lib_search_path $dir"
 29.1537 +	  ;;
 29.1538 +	esac
 29.1539 +	case $host in
 29.1540 +	*-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2*)
 29.1541 +	  testbindir=`$echo "X$dir" | $Xsed -e 's*/lib$*/bin*'`
 29.1542 +	  case :$dllsearchpath: in
 29.1543 +	  *":$dir:"*) ;;
 29.1544 +	  *) dllsearchpath="$dllsearchpath:$dir";;
 29.1545 +	  esac
 29.1546 +	  case :$dllsearchpath: in
 29.1547 +	  *":$testbindir:"*) ;;
 29.1548 +	  *) dllsearchpath="$dllsearchpath:$testbindir";;
 29.1549 +	  esac
 29.1550 +	  ;;
 29.1551 +	esac
 29.1552 +	continue
 29.1553 +	;;
 29.1554 +
 29.1555 +      -l*)
 29.1556 +	if test "X$arg" = "X-lc" || test "X$arg" = "X-lm"; then
 29.1557 +	  case $host in
 29.1558 +	  *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-beos*)
 29.1559 +	    # These systems don't actually have a C or math library (as such)
 29.1560 +	    continue
 29.1561 +	    ;;
 29.1562 +	  *-*-os2*)
 29.1563 +	    # These systems don't actually have a C library (as such)
 29.1564 +	    test "X$arg" = "X-lc" && continue
 29.1565 +	    ;;
 29.1566 +	  *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*)
 29.1567 +	    # Do not include libc due to us having libc/libc_r.
 29.1568 +	    test "X$arg" = "X-lc" && continue
 29.1569 +	    ;;
 29.1570 +	  *-*-rhapsody* | *-*-darwin1.[012])
 29.1571 +	    # Rhapsody C and math libraries are in the System framework
 29.1572 +	    deplibs="$deplibs -framework System"
 29.1573 +	    continue
 29.1574 +	    ;;
 29.1575 +	  *-*-sco3.2v5* | *-*-sco5v6*)
 29.1576 +	    # Causes problems with __ctype
 29.1577 +	    test "X$arg" = "X-lc" && continue
 29.1578 +	    ;;
 29.1579 +	  *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*)
 29.1580 +	    # Compiler inserts libc in the correct place for threads to work
 29.1581 +	    test "X$arg" = "X-lc" && continue
 29.1582 +	    ;;
 29.1583 +	  esac
 29.1584 +	elif test "X$arg" = "X-lc_r"; then
 29.1585 +	 case $host in
 29.1586 +	 *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*)
 29.1587 +	   # Do not include libc_r directly, use -pthread flag.
 29.1588 +	   continue
 29.1589 +	   ;;
 29.1590 +	 esac
 29.1591 +	fi
 29.1592 +	deplibs="$deplibs $arg"
 29.1593 +	continue
 29.1594 +	;;
 29.1595 +
 29.1596 +      # Tru64 UNIX uses -model [arg] to determine the layout of C++
 29.1597 +      # classes, name mangling, and exception handling.
 29.1598 +      -model)
 29.1599 +	compile_command="$compile_command $arg"
 29.1600 +	compiler_flags="$compiler_flags $arg"
 29.1601 +	finalize_command="$finalize_command $arg"
 29.1602 +	prev=xcompiler
 29.1603 +	continue
 29.1604 +	;;
 29.1605 +
 29.1606 +     -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe)
 29.1607 +	compiler_flags="$compiler_flags $arg"
 29.1608 +	compile_command="$compile_command $arg"
 29.1609 +	finalize_command="$finalize_command $arg"
 29.1610 +	continue
 29.1611 +	;;
 29.1612 +
 29.1613 +      -module)
 29.1614 +	module=yes
 29.1615 +	continue
 29.1616 +	;;
 29.1617 +
 29.1618 +      # -64, -mips[0-9] enable 64-bit mode on the SGI compiler
 29.1619 +      # -r[0-9][0-9]* specifies the processor on the SGI compiler
 29.1620 +      # -xarch=*, -xtarget=* enable 64-bit mode on the Sun compiler
 29.1621 +      # +DA*, +DD* enable 64-bit mode on the HP compiler
 29.1622 +      # -q* pass through compiler args for the IBM compiler
 29.1623 +      # -m* pass through architecture-specific compiler args for GCC
 29.1624 +      # -m*, -t[45]*, -txscale* pass through architecture-specific
 29.1625 +      # compiler args for GCC
 29.1626 +      # -pg pass through profiling flag for GCC
 29.1627 +      # @file GCC response files
 29.1628 +      -64|-mips[0-9]|-r[0-9][0-9]*|-xarch=*|-xtarget=*|+DA*|+DD*|-q*|-m*|-pg| \
 29.1629 +      -t[45]*|-txscale*|@*)
 29.1630 +
 29.1631 +	# Unknown arguments in both finalize_command and compile_command need
 29.1632 +	# to be aesthetically quoted because they are evaled later.
 29.1633 +	arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"`
 29.1634 +	case $arg in
 29.1635 +	*[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \	]*|*]*|"")
 29.1636 +	  arg="\"$arg\""
 29.1637 +	  ;;
 29.1638 +	esac
 29.1639 +        compile_command="$compile_command $arg"
 29.1640 +        finalize_command="$finalize_command $arg"
 29.1641 +        compiler_flags="$compiler_flags $arg"
 29.1642 +        continue
 29.1643 +        ;;
 29.1644 +
 29.1645 +      -shrext)
 29.1646 +	prev=shrext
 29.1647 +	continue
 29.1648 +	;;
 29.1649 +
 29.1650 +      -no-fast-install)
 29.1651 +	fast_install=no
 29.1652 +	continue
 29.1653 +	;;
 29.1654 +
 29.1655 +      -no-install)
 29.1656 +	case $host in
 29.1657 +	*-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2*)
 29.1658 +	  # The PATH hackery in wrapper scripts is required on Windows
 29.1659 +	  # in order for the loader to find any dlls it needs.
 29.1660 +	  $echo "$modename: warning: \`-no-install' is ignored for $host" 1>&2
 29.1661 +	  $echo "$modename: warning: assuming \`-no-fast-install' instead" 1>&2
 29.1662 +	  fast_install=no
 29.1663 +	  ;;
 29.1664 +	*) no_install=yes ;;
 29.1665 +	esac
 29.1666 +	continue
 29.1667 +	;;
 29.1668 +
 29.1669 +      -no-undefined)
 29.1670 +	allow_undefined=no
 29.1671 +	continue
 29.1672 +	;;
 29.1673 +
 29.1674 +      -objectlist)
 29.1675 +	prev=objectlist
 29.1676 +	continue
 29.1677 +	;;
 29.1678 +
 29.1679 +      -o) prev=output ;;
 29.1680 +
 29.1681 +      -precious-files-regex)
 29.1682 +	prev=precious_regex
 29.1683 +	continue
 29.1684 +	;;
 29.1685 +
 29.1686 +      -release)
 29.1687 +	prev=release
 29.1688 +	continue
 29.1689 +	;;
 29.1690 +
 29.1691 +      -rpath)
 29.1692 +	prev=rpath
 29.1693 +	continue
 29.1694 +	;;
 29.1695 +
 29.1696 +      -R)
 29.1697 +	prev=xrpath
 29.1698 +	continue
 29.1699 +	;;
 29.1700 +
 29.1701 +      -R*)
 29.1702 +	dir=`$echo "X$arg" | $Xsed -e 's/^-R//'`
 29.1703 +	# We need an absolute path.
 29.1704 +	case $dir in
 29.1705 +	[\\/]* | [A-Za-z]:[\\/]*) ;;
 29.1706 +	*)
 29.1707 +	  $echo "$modename: only absolute run-paths are allowed" 1>&2
 29.1708 +	  exit $EXIT_FAILURE
 29.1709 +	  ;;
 29.1710 +	esac
 29.1711 +	case "$xrpath " in
 29.1712 +	*" $dir "*) ;;
 29.1713 +	*) xrpath="$xrpath $dir" ;;
 29.1714 +	esac
 29.1715 +	continue
 29.1716 +	;;
 29.1717 +
 29.1718 +      -static)
 29.1719 +	# The effects of -static are defined in a previous loop.
 29.1720 +	# We used to do the same as -all-static on platforms that
 29.1721 +	# didn't have a PIC flag, but the assumption that the effects
 29.1722 +	# would be equivalent was wrong.  It would break on at least
 29.1723 +	# Digital Unix and AIX.
 29.1724 +	continue
 29.1725 +	;;
 29.1726 +
 29.1727 +      -thread-safe)
 29.1728 +	thread_safe=yes
 29.1729 +	continue
 29.1730 +	;;
 29.1731 +
 29.1732 +      -version-info)
 29.1733 +	prev=vinfo
 29.1734 +	continue
 29.1735 +	;;
 29.1736 +      -version-number)
 29.1737 +	prev=vinfo
 29.1738 +	vinfo_number=yes
 29.1739 +	continue
 29.1740 +	;;
 29.1741 +
 29.1742 +      -Wc,*)
 29.1743 +	args=`$echo "X$arg" | $Xsed -e "$sed_quote_subst" -e 's/^-Wc,//'`
 29.1744 +	arg=
 29.1745 +	save_ifs="$IFS"; IFS=','
 29.1746 +	for flag in $args; do
 29.1747 +	  IFS="$save_ifs"
 29.1748 +	  case $flag in
 29.1749 +	    *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \	]*|*]*|"")
 29.1750 +	    flag="\"$flag\""
 29.1751 +	    ;;
 29.1752 +	  esac
 29.1753 +	  arg="$arg $wl$flag"
 29.1754 +	  compiler_flags="$compiler_flags $flag"
 29.1755 +	done
 29.1756 +	IFS="$save_ifs"
 29.1757 +	arg=`$echo "X$arg" | $Xsed -e "s/^ //"`
 29.1758 +	;;
 29.1759 +
 29.1760 +      -Wl,*)
 29.1761 +	args=`$echo "X$arg" | $Xsed -e "$sed_quote_subst" -e 's/^-Wl,//'`
 29.1762 +	arg=
 29.1763 +	save_ifs="$IFS"; IFS=','
 29.1764 +	for flag in $args; do
 29.1765 +	  IFS="$save_ifs"
 29.1766 +	  case $flag in
 29.1767 +	    *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \	]*|*]*|"")
 29.1768 +	    flag="\"$flag\""
 29.1769 +	    ;;
 29.1770 +	  esac
 29.1771 +	  arg="$arg $wl$flag"
 29.1772 +	  compiler_flags="$compiler_flags $wl$flag"
 29.1773 +	  linker_flags="$linker_flags $flag"
 29.1774 +	done
 29.1775 +	IFS="$save_ifs"
 29.1776 +	arg=`$echo "X$arg" | $Xsed -e "s/^ //"`
 29.1777 +	;;
 29.1778 +
 29.1779 +      -Xcompiler)
 29.1780 +	prev=xcompiler
 29.1781 +	continue
 29.1782 +	;;
 29.1783 +
 29.1784 +      -Xlinker)
 29.1785 +	prev=xlinker
 29.1786 +	continue
 29.1787 +	;;
 29.1788 +
 29.1789 +      -XCClinker)
 29.1790 +	prev=xcclinker
 29.1791 +	continue
 29.1792 +	;;
 29.1793 +
 29.1794 +      # Some other compiler flag.
 29.1795 +      -* | +*)
 29.1796 +	# Unknown arguments in both finalize_command and compile_command need
 29.1797 +	# to be aesthetically quoted because they are evaled later.
 29.1798 +	arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"`
 29.1799 +	case $arg in
 29.1800 +	*[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \	]*|*]*|"")
 29.1801 +	  arg="\"$arg\""
 29.1802 +	  ;;
 29.1803 +	esac
 29.1804 +	;;
 29.1805 +
 29.1806 +      *.$objext)
 29.1807 +	# A standard object.
 29.1808 +	objs="$objs $arg"
 29.1809 +	;;
 29.1810 +
 29.1811 +      *.lo)
 29.1812 +	# A libtool-controlled object.
 29.1813 +
 29.1814 +	# Check to see that this really is a libtool object.
 29.1815 +	if (${SED} -e '2q' $arg | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then
 29.1816 +	  pic_object=
 29.1817 +	  non_pic_object=
 29.1818 +
 29.1819 +	  # Read the .lo file
 29.1820 +	  # If there is no directory component, then add one.
 29.1821 +	  case $arg in
 29.1822 +	  */* | *\\*) . $arg ;;
 29.1823 +	  *) . ./$arg ;;
 29.1824 +	  esac
 29.1825 +
 29.1826 +	  if test -z "$pic_object" || \
 29.1827 +	     test -z "$non_pic_object" ||
 29.1828 +	     test "$pic_object" = none && \
 29.1829 +	     test "$non_pic_object" = none; then
 29.1830 +	    $echo "$modename: cannot find name of object for \`$arg'" 1>&2
 29.1831 +	    exit $EXIT_FAILURE
 29.1832 +	  fi
 29.1833 +
 29.1834 +	  # Extract subdirectory from the argument.
 29.1835 +	  xdir=`$echo "X$arg" | $Xsed -e 's%/[^/]*$%%'`
 29.1836 +	  if test "X$xdir" = "X$arg"; then
 29.1837 +	    xdir=
 29.1838 + 	  else
 29.1839 +	    xdir="$xdir/"
 29.1840 +	  fi
 29.1841 +
 29.1842 +	  if test "$pic_object" != none; then
 29.1843 +	    # Prepend the subdirectory the object is found in.
 29.1844 +	    pic_object="$xdir$pic_object"
 29.1845 +
 29.1846 +	    if test "$prev" = dlfiles; then
 29.1847 +	      if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then
 29.1848 +		dlfiles="$dlfiles $pic_object"
 29.1849 +		prev=
 29.1850 +		continue
 29.1851 +	      else
 29.1852 +		# If libtool objects are unsupported, then we need to preload.
 29.1853 +		prev=dlprefiles
 29.1854 +	      fi
 29.1855 +	    fi
 29.1856 +
 29.1857 +	    # CHECK ME:  I think I busted this.  -Ossama
 29.1858 +	    if test "$prev" = dlprefiles; then
 29.1859 +	      # Preload the old-style object.
 29.1860 +	      dlprefiles="$dlprefiles $pic_object"
 29.1861 +	      prev=
 29.1862 +	    fi
 29.1863 +
 29.1864 +	    # A PIC object.
 29.1865 +	    libobjs="$libobjs $pic_object"
 29.1866 +	    arg="$pic_object"
 29.1867 +	  fi
 29.1868 +
 29.1869 +	  # Non-PIC object.
 29.1870 +	  if test "$non_pic_object" != none; then
 29.1871 +	    # Prepend the subdirectory the object is found in.
 29.1872 +	    non_pic_object="$xdir$non_pic_object"
 29.1873 +
 29.1874 +	    # A standard non-PIC object
 29.1875 +	    non_pic_objects="$non_pic_objects $non_pic_object"
 29.1876 +	    if test -z "$pic_object" || test "$pic_object" = none ; then
 29.1877 +	      arg="$non_pic_object"
 29.1878 +	    fi
 29.1879 +	  else
 29.1880 +	    # If the PIC object exists, use it instead.
 29.1881 +	    # $xdir was prepended to $pic_object above.
 29.1882 +	    non_pic_object="$pic_object"
 29.1883 +	    non_pic_objects="$non_pic_objects $non_pic_object"
 29.1884 +	  fi
 29.1885 +	else
 29.1886 +	  # Only an error if not doing a dry-run.
 29.1887 +	  if test -z "$run"; then
 29.1888 +	    $echo "$modename: \`$arg' is not a valid libtool object" 1>&2
 29.1889 +	    exit $EXIT_FAILURE
 29.1890 +	  else
 29.1891 +	    # Dry-run case.
 29.1892 +
 29.1893 +	    # Extract subdirectory from the argument.
 29.1894 +	    xdir=`$echo "X$arg" | $Xsed -e 's%/[^/]*$%%'`
 29.1895 +	    if test "X$xdir" = "X$arg"; then
 29.1896 +	      xdir=
 29.1897 +	    else
 29.1898 +	      xdir="$xdir/"
 29.1899 +	    fi
 29.1900 +
 29.1901 +	    pic_object=`$echo "X${xdir}${objdir}/${arg}" | $Xsed -e "$lo2o"`
 29.1902 +	    non_pic_object=`$echo "X${xdir}${arg}" | $Xsed -e "$lo2o"`
 29.1903 +	    libobjs="$libobjs $pic_object"
 29.1904 +	    non_pic_objects="$non_pic_objects $non_pic_object"
 29.1905 +	  fi
 29.1906 +	fi
 29.1907 +	;;
 29.1908 +
 29.1909 +      *.$libext)
 29.1910 +	# An archive.
 29.1911 +	deplibs="$deplibs $arg"
 29.1912 +	old_deplibs="$old_deplibs $arg"
 29.1913 +	continue
 29.1914 +	;;
 29.1915 +
 29.1916 +      *.la)
 29.1917 +	# A libtool-controlled library.
 29.1918 +
 29.1919 +	if test "$prev" = dlfiles; then
 29.1920 +	  # This library was specified with -dlopen.
 29.1921 +	  dlfiles="$dlfiles $arg"
 29.1922 +	  prev=
 29.1923 +	elif test "$prev" = dlprefiles; then
 29.1924 +	  # The library was specified with -dlpreopen.
 29.1925 +	  dlprefiles="$dlprefiles $arg"
 29.1926 +	  prev=
 29.1927 +	else
 29.1928 +	  deplibs="$deplibs $arg"
 29.1929 +	fi
 29.1930 +	continue
 29.1931 +	;;
 29.1932 +
 29.1933 +      # Some other compiler argument.
 29.1934 +      *)
 29.1935 +	# Unknown arguments in both finalize_command and compile_command need
 29.1936 +	# to be aesthetically quoted because they are evaled later.
 29.1937 +	arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"`
 29.1938 +	case $arg in
 29.1939 +	*[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \	]*|*]*|"")
 29.1940 +	  arg="\"$arg\""
 29.1941 +	  ;;
 29.1942 +	esac
 29.1943 +	;;
 29.1944 +      esac # arg
 29.1945 +
 29.1946 +      # Now actually substitute the argument into the commands.
 29.1947 +      if test -n "$arg"; then
 29.1948 +	compile_command="$compile_command $arg"
 29.1949 +	finalize_command="$finalize_command $arg"
 29.1950 +      fi
 29.1951 +    done # argument parsing loop
 29.1952 +
 29.1953 +    if test -n "$prev"; then
 29.1954 +      $echo "$modename: the \`$prevarg' option requires an argument" 1>&2
 29.1955 +      $echo "$help" 1>&2
 29.1956 +      exit $EXIT_FAILURE
 29.1957 +    fi
 29.1958 +
 29.1959 +    if test "$export_dynamic" = yes && test -n "$export_dynamic_flag_spec"; then
 29.1960 +      eval arg=\"$export_dynamic_flag_spec\"
 29.1961 +      compile_command="$compile_command $arg"
 29.1962 +      finalize_command="$finalize_command $arg"
 29.1963 +    fi
 29.1964 +
 29.1965 +    oldlibs=
 29.1966 +    # calculate the name of the file, without its directory
 29.1967 +    outputname=`$echo "X$output" | $Xsed -e 's%^.*/%%'`
 29.1968 +    libobjs_save="$libobjs"
 29.1969 +
 29.1970 +    if test -n "$shlibpath_var"; then
 29.1971 +      # get the directories listed in $shlibpath_var
 29.1972 +      eval shlib_search_path=\`\$echo \"X\${$shlibpath_var}\" \| \$Xsed -e \'s/:/ /g\'\`
 29.1973 +    else
 29.1974 +      shlib_search_path=
 29.1975 +    fi
 29.1976 +    eval sys_lib_search_path=\"$sys_lib_search_path_spec\"
 29.1977 +    eval sys_lib_dlsearch_path=\"$sys_lib_dlsearch_path_spec\"
 29.1978 +
 29.1979 +    output_objdir=`$echo "X$output" | $Xsed -e 's%/[^/]*$%%'`
 29.1980 +    if test "X$output_objdir" = "X$output"; then
 29.1981 +      output_objdir="$objdir"
 29.1982 +    else
 29.1983 +      output_objdir="$output_objdir/$objdir"
 29.1984 +    fi
 29.1985 +    # Create the object directory.
 29.1986 +    if test ! -d "$output_objdir"; then
 29.1987 +      $show "$mkdir $output_objdir"
 29.1988 +      $run $mkdir $output_objdir
 29.1989 +      exit_status=$?
 29.1990 +      if test "$exit_status" -ne 0 && test ! -d "$output_objdir"; then
 29.1991 +	exit $exit_status
 29.1992 +      fi
 29.1993 +    fi
 29.1994 +
 29.1995 +    # Determine the type of output
 29.1996 +    case $output in
 29.1997 +    "")
 29.1998 +      $echo "$modename: you must specify an output file" 1>&2
 29.1999 +      $echo "$help" 1>&2
 29.2000 +      exit $EXIT_FAILURE
 29.2001 +      ;;
 29.2002 +    *.$libext) linkmode=oldlib ;;
 29.2003 +    *.lo | *.$objext) linkmode=obj ;;
 29.2004 +    *.la) linkmode=lib ;;
 29.2005 +    *) linkmode=prog ;; # Anything else should be a program.
 29.2006 +    esac
 29.2007 +
 29.2008 +    case $host in
 29.2009 +    *cygwin* | *mingw* | *pw32*)
 29.2010 +      # don't eliminate duplications in $postdeps and $predeps
 29.2011 +      duplicate_compiler_generated_deps=yes
 29.2012 +      ;;
 29.2013 +    *)
 29.2014 +      duplicate_compiler_generated_deps=$duplicate_deps
 29.2015 +      ;;
 29.2016 +    esac
 29.2017 +    specialdeplibs=
 29.2018 +
 29.2019 +    libs=
 29.2020 +    # Find all interdependent deplibs by searching for libraries
 29.2021 +    # that are linked more than once (e.g. -la -lb -la)
 29.2022 +    for deplib in $deplibs; do
 29.2023 +      if test "X$duplicate_deps" = "Xyes" ; then
 29.2024 +	case "$libs " in
 29.2025 +	*" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;;
 29.2026 +	esac
 29.2027 +      fi
 29.2028 +      libs="$libs $deplib"
 29.2029 +    done
 29.2030 +
 29.2031 +    if test "$linkmode" = lib; then
 29.2032 +      libs="$predeps $libs $compiler_lib_search_path $postdeps"
 29.2033 +
 29.2034 +      # Compute libraries that are listed more than once in $predeps
 29.2035 +      # $postdeps and mark them as special (i.e., whose duplicates are
 29.2036 +      # not to be eliminated).
 29.2037 +      pre_post_deps=
 29.2038 +      if test "X$duplicate_compiler_generated_deps" = "Xyes" ; then
 29.2039 +	for pre_post_dep in $predeps $postdeps; do
 29.2040 +	  case "$pre_post_deps " in
 29.2041 +	  *" $pre_post_dep "*) specialdeplibs="$specialdeplibs $pre_post_deps" ;;
 29.2042 +	  esac
 29.2043 +	  pre_post_deps="$pre_post_deps $pre_post_dep"
 29.2044 +	done
 29.2045 +      fi
 29.2046 +      pre_post_deps=
 29.2047 +    fi
 29.2048 +
 29.2049 +    deplibs=
 29.2050 +    newdependency_libs=
 29.2051 +    newlib_search_path=
 29.2052 +    need_relink=no # whether we're linking any uninstalled libtool libraries
 29.2053 +    notinst_deplibs= # not-installed libtool libraries
 29.2054 +    case $linkmode in
 29.2055 +    lib)
 29.2056 +	passes="conv link"
 29.2057 +	for file in $dlfiles $dlprefiles; do
 29.2058 +	  case $file in
 29.2059 +	  *.la) ;;
 29.2060 +	  *)
 29.2061 +	    $echo "$modename: libraries can \`-dlopen' only libtool libraries: $file" 1>&2
 29.2062 +	    exit $EXIT_FAILURE
 29.2063 +	    ;;
 29.2064 +	  esac
 29.2065 +	done
 29.2066 +	;;
 29.2067 +    prog)
 29.2068 +	compile_deplibs=
 29.2069 +	finalize_deplibs=
 29.2070 +	alldeplibs=no
 29.2071 +	newdlfiles=
 29.2072 +	newdlprefiles=
 29.2073 +	passes="conv scan dlopen dlpreopen link"
 29.2074 +	;;
 29.2075 +    *)  passes="conv"
 29.2076 +	;;
 29.2077 +    esac
 29.2078 +    for pass in $passes; do
 29.2079 +      if test "$linkmode,$pass" = "lib,link" ||
 29.2080 +	 test "$linkmode,$pass" = "prog,scan"; then
 29.2081 +	libs="$deplibs"
 29.2082 +	deplibs=
 29.2083 +      fi
 29.2084 +      if test "$linkmode" = prog; then
 29.2085 +	case $pass in
 29.2086 +	dlopen) libs="$dlfiles" ;;
 29.2087 +	dlpreopen) libs="$dlprefiles" ;;
 29.2088 +	link)
 29.2089 +	  libs="$deplibs %DEPLIBS%"
 29.2090 +	  test "X$link_all_deplibs" != Xno && libs="$libs $dependency_libs"
 29.2091 +	  ;;
 29.2092 +	esac
 29.2093 +      fi
 29.2094 +      if test "$pass" = dlopen; then
 29.2095 +	# Collect dlpreopened libraries
 29.2096 +	save_deplibs="$deplibs"
 29.2097 +	deplibs=
 29.2098 +      fi
 29.2099 +      for deplib in $libs; do
 29.2100 +	lib=
 29.2101 +	found=no
 29.2102 +	case $deplib in
 29.2103 +	-mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe)
 29.2104 +	  if test "$linkmode,$pass" = "prog,link"; then
 29.2105 +	    compile_deplibs="$deplib $compile_deplibs"
 29.2106 +	    finalize_deplibs="$deplib $finalize_deplibs"
 29.2107 +	  else
 29.2108 +	    compiler_flags="$compiler_flags $deplib"
 29.2109 +	  fi
 29.2110 +	  continue
 29.2111 +	  ;;
 29.2112 +	-l*)
 29.2113 +	  if test "$linkmode" != lib && test "$linkmode" != prog; then
 29.2114 +	    $echo "$modename: warning: \`-l' is ignored for archives/objects" 1>&2
 29.2115 +	    continue
 29.2116 +	  fi
 29.2117 +	  name=`$echo "X$deplib" | $Xsed -e 's/^-l//'`
 29.2118 +	  for searchdir in $newlib_search_path $lib_search_path $sys_lib_search_path $shlib_search_path; do
 29.2119 +	    for search_ext in .la $std_shrext .so .a; do
 29.2120 +	      # Search the libtool library
 29.2121 +	      lib="$searchdir/lib${name}${search_ext}"
 29.2122 +	      if test -f "$lib"; then
 29.2123 +		if test "$search_ext" = ".la"; then
 29.2124 +		  found=yes
 29.2125 +		else
 29.2126 +		  found=no
 29.2127 +		fi
 29.2128 +		break 2
 29.2129 +	      fi
 29.2130 +	    done
 29.2131 +	  done
 29.2132 +	  if test "$found" != yes; then
 29.2133 +	    # deplib doesn't seem to be a libtool library
 29.2134 +	    if test "$linkmode,$pass" = "prog,link"; then
 29.2135 +	      compile_deplibs="$deplib $compile_deplibs"
 29.2136 +	      finalize_deplibs="$deplib $finalize_deplibs"
 29.2137 +	    else
 29.2138 +	      deplibs="$deplib $deplibs"
 29.2139 +	      test "$linkmode" = lib && newdependency_libs="$deplib $newdependency_libs"
 29.2140 +	    fi
 29.2141 +	    continue
 29.2142 +	  else # deplib is a libtool library
 29.2143 +	    # If $allow_libtool_libs_with_static_runtimes && $deplib is a stdlib,
 29.2144 +	    # We need to do some special things here, and not later.
 29.2145 +	    if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
 29.2146 +	      case " $predeps $postdeps " in
 29.2147 +	      *" $deplib "*)
 29.2148 +		if (${SED} -e '2q' $lib |
 29.2149 +                    grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then
 29.2150 +		  library_names=
 29.2151 +		  old_library=
 29.2152 +		  case $lib in
 29.2153 +		  */* | *\\*) . $lib ;;
 29.2154 +		  *) . ./$lib ;;
 29.2155 +		  esac
 29.2156 +		  for l in $old_library $library_names; do
 29.2157 +		    ll="$l"
 29.2158 +		  done
 29.2159 +		  if test "X$ll" = "X$old_library" ; then # only static version available
 29.2160 +		    found=no
 29.2161 +		    ladir=`$echo "X$lib" | $Xsed -e 's%/[^/]*$%%'`
 29.2162 +		    test "X$ladir" = "X$lib" && ladir="."
 29.2163 +		    lib=$ladir/$old_library
 29.2164 +		    if test "$linkmode,$pass" = "prog,link"; then
 29.2165 +		      compile_deplibs="$deplib $compile_deplibs"
 29.2166 +		      finalize_deplibs="$deplib $finalize_deplibs"
 29.2167 +		    else
 29.2168 +		      deplibs="$deplib $deplibs"
 29.2169 +		      test "$linkmode" = lib && newdependency_libs="$deplib $newdependency_libs"
 29.2170 +		    fi
 29.2171 +		    continue
 29.2172 +		  fi
 29.2173 +		fi
 29.2174 +	        ;;
 29.2175 +	      *) ;;
 29.2176 +	      esac
 29.2177 +	    fi
 29.2178 +	  fi
 29.2179 +	  ;; # -l
 29.2180 +	-L*)
 29.2181 +	  case $linkmode in
 29.2182 +	  lib)
 29.2183 +	    deplibs="$deplib $deplibs"
 29.2184 +	    test "$pass" = conv && continue
 29.2185 +	    newdependency_libs="$deplib $newdependency_libs"
 29.2186 +	    newlib_search_path="$newlib_search_path "`$echo "X$deplib" | $Xsed -e 's/^-L//'`
 29.2187 +	    ;;
 29.2188 +	  prog)
 29.2189 +	    if test "$pass" = conv; then
 29.2190 +	      deplibs="$deplib $deplibs"
 29.2191 +	      continue
 29.2192 +	    fi
 29.2193 +	    if test "$pass" = scan; then
 29.2194 +	      deplibs="$deplib $deplibs"
 29.2195 +	    else
 29.2196 +	      compile_deplibs="$deplib $compile_deplibs"
 29.2197 +	      finalize_deplibs="$deplib $finalize_deplibs"
 29.2198 +	    fi
 29.2199 +	    newlib_search_path="$newlib_search_path "`$echo "X$deplib" | $Xsed -e 's/^-L//'`
 29.2200 +	    ;;
 29.2201 +	  *)
 29.2202 +	    $echo "$modename: warning: \`-L' is ignored for archives/objects" 1>&2
 29.2203 +	    ;;
 29.2204 +	  esac # linkmode
 29.2205 +	  continue
 29.2206 +	  ;; # -L
 29.2207 +	-R*)
 29.2208 +	  if test "$pass" = link; then
 29.2209 +	    dir=`$echo "X$deplib" | $Xsed -e 's/^-R//'`
 29.2210 +	    # Make sure the xrpath contains only unique directories.
 29.2211 +	    case "$xrpath " in
 29.2212 +	    *" $dir "*) ;;
 29.2213 +	    *) xrpath="$xrpath $dir" ;;
 29.2214 +	    esac
 29.2215 +	  fi
 29.2216 +	  deplibs="$deplib $deplibs"
 29.2217 +	  continue
 29.2218 +	  ;;
 29.2219 +	*.la) lib="$deplib" ;;
 29.2220 +	*.$libext)
 29.2221 +	  if test "$pass" = conv; then
 29.2222 +	    deplibs="$deplib $deplibs"
 29.2223 +	    continue
 29.2224 +	  fi
 29.2225 +	  case $linkmode in
 29.2226 +	  lib)
 29.2227 +	    valid_a_lib=no
 29.2228 +	    case $deplibs_check_method in
 29.2229 +	      match_pattern*)
 29.2230 +		set dummy $deplibs_check_method
 29.2231 +	        match_pattern_regex=`expr "$deplibs_check_method" : "$2 \(.*\)"`
 29.2232 +		if eval $echo \"$deplib\" 2>/dev/null \
 29.2233 +		    | $SED 10q \
 29.2234 +		    | $EGREP "$match_pattern_regex" > /dev/null; then
 29.2235 +		  valid_a_lib=yes
 29.2236 +		fi
 29.2237 +		;;
 29.2238 +	      pass_all)
 29.2239 +		valid_a_lib=yes
 29.2240 +		;;
 29.2241 +            esac
 29.2242 +	    if test "$valid_a_lib" != yes; then
 29.2243 +	      $echo
 29.2244 +	      $echo "*** Warning: Trying to link with static lib archive $deplib."
 29.2245 +	      $echo "*** I have the capability to make that library automatically link in when"
 29.2246 +	      $echo "*** you link to this library.  But I can only do this if you have a"
 29.2247 +	      $echo "*** shared version of the library, which you do not appear to have"
 29.2248 +	      $echo "*** because the file extensions .$libext of this argument makes me believe"
 29.2249 +	      $echo "*** that it is just a static archive that I should not used here."
 29.2250 +	    else
 29.2251 +	      $echo
 29.2252 +	      $echo "*** Warning: Linking the shared library $output against the"
 29.2253 +	      $echo "*** static library $deplib is not portable!"
 29.2254 +	      deplibs="$deplib $deplibs"
 29.2255 +	    fi
 29.2256 +	    continue
 29.2257 +	    ;;
 29.2258 +	  prog)
 29.2259 +	    if test "$pass" != link; then
 29.2260 +	      deplibs="$deplib $deplibs"
 29.2261 +	    else
 29.2262 +	      compile_deplibs="$deplib $compile_deplibs"
 29.2263 +	      finalize_deplibs="$deplib $finalize_deplibs"
 29.2264 +	    fi
 29.2265 +	    continue
 29.2266 +	    ;;
 29.2267 +	  esac # linkmode
 29.2268 +	  ;; # *.$libext
 29.2269 +	*.lo | *.$objext)
 29.2270 +	  if test "$pass" = conv; then
 29.2271 +	    deplibs="$deplib $deplibs"
 29.2272 +	  elif test "$linkmode" = prog; then
 29.2273 +	    if test "$pass" = dlpreopen || test "$dlopen_support" != yes || test "$build_libtool_libs" = no; then
 29.2274 +	      # If there is no dlopen support or we're linking statically,
 29.2275 +	      # we need to preload.
 29.2276 +	      newdlprefiles="$newdlprefiles $deplib"
 29.2277 +	      compile_deplibs="$deplib $compile_deplibs"
 29.2278 +	      finalize_deplibs="$deplib $finalize_deplibs"
 29.2279 +	    else
 29.2280 +	      newdlfiles="$newdlfiles $deplib"
 29.2281 +	    fi
 29.2282 +	  fi
 29.2283 +	  continue
 29.2284 +	  ;;
 29.2285 +	%DEPLIBS%)
 29.2286 +	  alldeplibs=yes
 29.2287 +	  continue
 29.2288 +	  ;;
 29.2289 +	esac # case $deplib
 29.2290 +	if test "$found" = yes || test -f "$lib"; then :
 29.2291 +	else
 29.2292 +	  $echo "$modename: cannot find the library \`$lib' or unhandled argument \`$deplib'" 1>&2
 29.2293 +	  exit $EXIT_FAILURE
 29.2294 +	fi
 29.2295 +
 29.2296 +	# Check to see that this really is a libtool archive.
 29.2297 +	if (${SED} -e '2q' $lib | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then :
 29.2298 +	else
 29.2299 +	  $echo "$modename: \`$lib' is not a valid libtool archive" 1>&2
 29.2300 +	  exit $EXIT_FAILURE
 29.2301 +	fi
 29.2302 +
 29.2303 +	ladir=`$echo "X$lib" | $Xsed -e 's%/[^/]*$%%'`
 29.2304 +	test "X$ladir" = "X$lib" && ladir="."
 29.2305 +
 29.2306 +	dlname=
 29.2307 +	dlopen=
 29.2308 +	dlpreopen=
 29.2309 +	libdir=
 29.2310 +	library_names=
 29.2311 +	old_library=
 29.2312 +	# If the library was installed with an old release of libtool,
 29.2313 +	# it will not redefine variables installed, or shouldnotlink
 29.2314 +	installed=yes
 29.2315 +	shouldnotlink=no
 29.2316 +	avoidtemprpath=
 29.2317 +
 29.2318 +
 29.2319 +	# Read the .la file
 29.2320 +	case $lib in
 29.2321 +	*/* | *\\*) . $lib ;;
 29.2322 +	*) . ./$lib ;;
 29.2323 +	esac
 29.2324 +
 29.2325 +	if test "$linkmode,$pass" = "lib,link" ||
 29.2326 +	   test "$linkmode,$pass" = "prog,scan" ||
 29.2327 +	   { test "$linkmode" != prog && test "$linkmode" != lib; }; then
 29.2328 +	  test -n "$dlopen" && dlfiles="$dlfiles $dlopen"
 29.2329 +	  test -n "$dlpreopen" && dlprefiles="$dlprefiles $dlpreopen"
 29.2330 +	fi
 29.2331 +
 29.2332 +	if test "$pass" = conv; then
 29.2333 +	  # Only check for convenience libraries
 29.2334 +	  deplibs="$lib $deplibs"
 29.2335 +	  if test -z "$libdir"; then
 29.2336 +	    if test -z "$old_library"; then
 29.2337 +	      $echo "$modename: cannot find name of link library for \`$lib'" 1>&2
 29.2338 +	      exit $EXIT_FAILURE
 29.2339 +	    fi
 29.2340 +	    # It is a libtool convenience library, so add in its objects.
 29.2341 +	    convenience="$convenience $ladir/$objdir/$old_library"
 29.2342 +	    old_convenience="$old_convenience $ladir/$objdir/$old_library"
 29.2343 +	    tmp_libs=
 29.2344 +	    for deplib in $dependency_libs; do
 29.2345 +	      deplibs="$deplib $deplibs"
 29.2346 +              if test "X$duplicate_deps" = "Xyes" ; then
 29.2347 +	        case "$tmp_libs " in
 29.2348 +	        *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;;
 29.2349 +	        esac
 29.2350 +              fi
 29.2351 +	      tmp_libs="$tmp_libs $deplib"
 29.2352 +	    done
 29.2353 +	  elif test "$linkmode" != prog && test "$linkmode" != lib; then
 29.2354 +	    $echo "$modename: \`$lib' is not a convenience library" 1>&2
 29.2355 +	    exit $EXIT_FAILURE
 29.2356 +	  fi
 29.2357 +	  continue
 29.2358 +	fi # $pass = conv
 29.2359 +
 29.2360 +
 29.2361 +	# Get the name of the library we link against.
 29.2362 +	linklib=
 29.2363 +	for l in $old_library $library_names; do
 29.2364 +	  linklib="$l"
 29.2365 +	done
 29.2366 +	if test -z "$linklib"; then
 29.2367 +	  $echo "$modename: cannot find name of link library for \`$lib'" 1>&2
 29.2368 +	  exit $EXIT_FAILURE
 29.2369 +	fi
 29.2370 +
 29.2371 +	# This library was specified with -dlopen.
 29.2372 +	if test "$pass" = dlopen; then
 29.2373 +	  if test -z "$libdir"; then
 29.2374 +	    $echo "$modename: cannot -dlopen a convenience library: \`$lib'" 1>&2
 29.2375 +	    exit $EXIT_FAILURE
 29.2376 +	  fi
 29.2377 +	  if test -z "$dlname" ||
 29.2378 +	     test "$dlopen_support" != yes ||
 29.2379 +	     test "$build_libtool_libs" = no; then
 29.2380 +	    # If there is no dlname, no dlopen support or we're linking
 29.2381 +	    # statically, we need to preload.  We also need to preload any
 29.2382 +	    # dependent libraries so libltdl's deplib preloader doesn't
 29.2383 +	    # bomb out in the load deplibs phase.
 29.2384 +	    dlprefiles="$dlprefiles $lib $dependency_libs"
 29.2385 +	  else
 29.2386 +	    newdlfiles="$newdlfiles $lib"
 29.2387 +	  fi
 29.2388 +	  continue
 29.2389 +	fi # $pass = dlopen
 29.2390 +
 29.2391 +	# We need an absolute path.
 29.2392 +	case $ladir in
 29.2393 +	[\\/]* | [A-Za-z]:[\\/]*) abs_ladir="$ladir" ;;
 29.2394 +	*)
 29.2395 +	  abs_ladir=`cd "$ladir" && pwd`
 29.2396 +	  if test -z "$abs_ladir"; then
 29.2397 +	    $echo "$modename: warning: cannot determine absolute directory name of \`$ladir'" 1>&2
 29.2398 +	    $echo "$modename: passing it literally to the linker, although it might fail" 1>&2
 29.2399 +	    abs_ladir="$ladir"
 29.2400 +	  fi
 29.2401 +	  ;;
 29.2402 +	esac
 29.2403 +	laname=`$echo "X$lib" | $Xsed -e 's%^.*/%%'`
 29.2404 +
 29.2405 +	# Find the relevant object directory and library name.
 29.2406 +	if test "X$installed" = Xyes; then
 29.2407 +	  if test ! -f "$libdir/$linklib" && test -f "$abs_ladir/$linklib"; then
 29.2408 +	    $echo "$modename: warning: library \`$lib' was moved." 1>&2
 29.2409 +	    dir="$ladir"
 29.2410 +	    absdir="$abs_ladir"
 29.2411 +	    libdir="$abs_ladir"
 29.2412 +	  else
 29.2413 +	    dir="$libdir"
 29.2414 +	    absdir="$libdir"
 29.2415 +	  fi
 29.2416 +	  test "X$hardcode_automatic" = Xyes && avoidtemprpath=yes
 29.2417 +	else
 29.2418 +	  if test ! -f "$ladir/$objdir/$linklib" && test -f "$abs_ladir/$linklib"; then
 29.2419 +	    dir="$ladir"
 29.2420 +	    absdir="$abs_ladir"
 29.2421 +	    # Remove this search path later
 29.2422 +	    notinst_path="$notinst_path $abs_ladir"
 29.2423 +	  else
 29.2424 +	    dir="$ladir/$objdir"
 29.2425 +	    absdir="$abs_ladir/$objdir"
 29.2426 +	    # Remove this search path later
 29.2427 +	    notinst_path="$notinst_path $abs_ladir"
 29.2428 +	  fi
 29.2429 +	fi # $installed = yes
 29.2430 +	name=`$echo "X$laname" | $Xsed -e 's/\.la$//' -e 's/^lib//'`
 29.2431 +
 29.2432 +	# This library was specified with -dlpreopen.
 29.2433 +	if test "$pass" = dlpreopen; then
 29.2434 +	  if test -z "$libdir"; then
 29.2435 +	    $echo "$modename: cannot -dlpreopen a convenience library: \`$lib'" 1>&2
 29.2436 +	    exit $EXIT_FAILURE
 29.2437 +	  fi
 29.2438 +	  # Prefer using a static library (so that no silly _DYNAMIC symbols
 29.2439 +	  # are required to link).
 29.2440 +	  if test -n "$old_library"; then
 29.2441 +	    newdlprefiles="$newdlprefiles $dir/$old_library"
 29.2442 +	  # Otherwise, use the dlname, so that lt_dlopen finds it.
 29.2443 +	  elif test -n "$dlname"; then
 29.2444 +	    newdlprefiles="$newdlprefiles $dir/$dlname"
 29.2445 +	  else
 29.2446 +	    newdlprefiles="$newdlprefiles $dir/$linklib"
 29.2447 +	  fi
 29.2448 +	fi # $pass = dlpreopen
 29.2449 +
 29.2450 +	if test -z "$libdir"; then
 29.2451 +	  # Link the convenience library
 29.2452 +	  if test "$linkmode" = lib; then
 29.2453 +	    deplibs="$dir/$old_library $deplibs"
 29.2454 +	  elif test "$linkmode,$pass" = "prog,link"; then
 29.2455 +	    compile_deplibs="$dir/$old_library $compile_deplibs"
 29.2456 +	    finalize_deplibs="$dir/$old_library $finalize_deplibs"
 29.2457 +	  else
 29.2458 +	    deplibs="$lib $deplibs" # used for prog,scan pass
 29.2459 +	  fi
 29.2460 +	  continue
 29.2461 +	fi
 29.2462 +
 29.2463 +
 29.2464 +	if test "$linkmode" = prog && test "$pass" != link; then
 29.2465 +	  newlib_search_path="$newlib_search_path $ladir"
 29.2466 +	  deplibs="$lib $deplibs"
 29.2467 +
 29.2468 +	  linkalldeplibs=no
 29.2469 +	  if test "$link_all_deplibs" != no || test -z "$library_names" ||
 29.2470 +	     test "$build_libtool_libs" = no; then
 29.2471 +	    linkalldeplibs=yes
 29.2472 +	  fi
 29.2473 +
 29.2474 +	  tmp_libs=
 29.2475 +	  for deplib in $dependency_libs; do
 29.2476 +	    case $deplib in
 29.2477 +	    -L*) newlib_search_path="$newlib_search_path "`$echo "X$deplib" | $Xsed -e 's/^-L//'`;; ### testsuite: skip nested quoting test
 29.2478 +	    esac
 29.2479 +	    # Need to link against all dependency_libs?
 29.2480 +	    if test "$linkalldeplibs" = yes; then
 29.2481 +	      deplibs="$deplib $deplibs"
 29.2482 +	    else
 29.2483 +	      # Need to hardcode shared library paths
 29.2484 +	      # or/and link against static libraries
 29.2485 +	      newdependency_libs="$deplib $newdependency_libs"
 29.2486 +	    fi
 29.2487 +	    if test "X$duplicate_deps" = "Xyes" ; then
 29.2488 +	      case "$tmp_libs " in
 29.2489 +	      *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;;
 29.2490 +	      esac
 29.2491 +	    fi
 29.2492 +	    tmp_libs="$tmp_libs $deplib"
 29.2493 +	  done # for deplib
 29.2494 +	  continue
 29.2495 +	fi # $linkmode = prog...
 29.2496 +
 29.2497 +	if test "$linkmode,$pass" = "prog,link"; then
 29.2498 +	  if test -n "$library_names" &&
 29.2499 +	     { test "$prefer_static_libs" = no || test -z "$old_library"; }; then
 29.2500 +	    # We need to hardcode the library path
 29.2501 +	    if test -n "$shlibpath_var" && test -z "$avoidtemprpath" ; then
 29.2502 +	      # Make sure the rpath contains only unique directories.
 29.2503 +	      case "$temp_rpath " in
 29.2504 +	      *" $dir "*) ;;
 29.2505 +	      *" $absdir "*) ;;
 29.2506 +	      *) temp_rpath="$temp_rpath $absdir" ;;
 29.2507 +	      esac
 29.2508 +	    fi
 29.2509 +
 29.2510 +	    # Hardcode the library path.
 29.2511 +	    # Skip directories that are in the system default run-time
 29.2512 +	    # search path.
 29.2513 +	    case " $sys_lib_dlsearch_path " in
 29.2514 +	    *" $absdir "*) ;;
 29.2515 +	    *)
 29.2516 +	      case "$compile_rpath " in
 29.2517 +	      *" $absdir "*) ;;
 29.2518 +	      *) compile_rpath="$compile_rpath $absdir"
 29.2519 +	      esac
 29.2520 +	      ;;
 29.2521 +	    esac
 29.2522 +	    case " $sys_lib_dlsearch_path " in
 29.2523 +	    *" $libdir "*) ;;
 29.2524 +	    *)
 29.2525 +	      case "$finalize_rpath " in
 29.2526 +	      *" $libdir "*) ;;
 29.2527 +	      *) finalize_rpath="$finalize_rpath $libdir"
 29.2528 +	      esac
 29.2529 +	      ;;
 29.2530 +	    esac
 29.2531 +	  fi # $linkmode,$pass = prog,link...
 29.2532 +
 29.2533 +	  if test "$alldeplibs" = yes &&
 29.2534 +	     { test "$deplibs_check_method" = pass_all ||
 29.2535 +	       { test "$build_libtool_libs" = yes &&
 29.2536 +		 test -n "$library_names"; }; }; then
 29.2537 +	    # We only need to search for static libraries
 29.2538 +	    continue
 29.2539 +	  fi
 29.2540 +	fi
 29.2541 +
 29.2542 +	link_static=no # Whether the deplib will be linked statically
 29.2543 +	use_static_libs=$prefer_static_libs
 29.2544 +	if test "$use_static_libs" = built && test "$installed" = yes ; then
 29.2545 +	  use_static_libs=no
 29.2546 +	fi
 29.2547 +	if test -n "$library_names" &&
 29.2548 +	   { test "$use_static_libs" = no || test -z "$old_library"; }; then
 29.2549 +	  if test "$installed" = no; then
 29.2550 +	    notinst_deplibs="$notinst_deplibs $lib"
 29.2551 +	    need_relink=yes
 29.2552 +	  fi
 29.2553 +	  # This is a shared library
 29.2554 +
 29.2555 +	  # Warn about portability, can't link against -module's on
 29.2556 +	  # some systems (darwin)
 29.2557 +	  if test "$shouldnotlink" = yes && test "$pass" = link ; then
 29.2558 +	    $echo
 29.2559 +	    if test "$linkmode" = prog; then
 29.2560 +	      $echo "*** Warning: Linking the executable $output against the loadable module"
 29.2561 +	    else
 29.2562 +	      $echo "*** Warning: Linking the shared library $output against the loadable module"
 29.2563 +	    fi
 29.2564 +	    $echo "*** $linklib is not portable!"
 29.2565 +	  fi
 29.2566 +	  if test "$linkmode" = lib &&
 29.2567 +	     test "$hardcode_into_libs" = yes; then
 29.2568 +	    # Hardcode the library path.
 29.2569 +	    # Skip directories that are in the system default run-time
 29.2570 +	    # search path.
 29.2571 +	    case " $sys_lib_dlsearch_path " in
 29.2572 +	    *" $absdir "*) ;;
 29.2573 +	    *)
 29.2574 +	      case "$compile_rpath " in
 29.2575 +	      *" $absdir "*) ;;
 29.2576 +	      *) compile_rpath="$compile_rpath $absdir"
 29.2577 +	      esac
 29.2578 +	      ;;
 29.2579 +	    esac
 29.2580 +	    case " $sys_lib_dlsearch_path " in
 29.2581 +	    *" $libdir "*) ;;
 29.2582 +	    *)
 29.2583 +	      case "$finalize_rpath " in
 29.2584 +	      *" $libdir "*) ;;
 29.2585 +	      *) finalize_rpath="$finalize_rpath $libdir"
 29.2586 +	      esac
 29.2587 +	      ;;
 29.2588 +	    esac
 29.2589 +	  fi
 29.2590 +
 29.2591 +	  if test -n "$old_archive_from_expsyms_cmds"; then
 29.2592 +	    # figure out the soname
 29.2593 +	    set dummy $library_names
 29.2594 +	    realname="$2"
 29.2595 +	    shift; shift
 29.2596 +	    libname=`eval \\$echo \"$libname_spec\"`
 29.2597 +	    # use dlname if we got it. it's perfectly good, no?
 29.2598 +	    if test -n "$dlname"; then
 29.2599 +	      soname="$dlname"
 29.2600 +	    elif test -n "$soname_spec"; then
 29.2601 +	      # bleh windows
 29.2602 +	      case $host in
 29.2603 +	      *cygwin* | mingw*)
 29.2604 +		major=`expr $current - $age`
 29.2605 +		versuffix="-$major"
 29.2606 +		;;
 29.2607 +	      esac
 29.2608 +	      eval soname=\"$soname_spec\"
 29.2609 +	    else
 29.2610 +	      soname="$realname"
 29.2611 +	    fi
 29.2612 +
 29.2613 +	    # Make a new name for the extract_expsyms_cmds to use
 29.2614 +	    soroot="$soname"
 29.2615 +	    soname=`$echo $soroot | ${SED} -e 's/^.*\///'`
 29.2616 +	    newlib="libimp-`$echo $soname | ${SED} 's/^lib//;s/\.dll$//'`.a"
 29.2617 +
 29.2618 +	    # If the library has no export list, then create one now
 29.2619 +	    if test -f "$output_objdir/$soname-def"; then :
 29.2620 +	    else
 29.2621 +	      $show "extracting exported symbol list from \`$soname'"
 29.2622 +	      save_ifs="$IFS"; IFS='~'
 29.2623 +	      cmds=$extract_expsyms_cmds
 29.2624 +	      for cmd in $cmds; do
 29.2625 +		IFS="$save_ifs"
 29.2626 +		eval cmd=\"$cmd\"
 29.2627 +		$show "$cmd"
 29.2628 +		$run eval "$cmd" || exit $?
 29.2629 +	      done
 29.2630 +	      IFS="$save_ifs"
 29.2631 +	    fi
 29.2632 +
 29.2633 +	    # Create $newlib
 29.2634 +	    if test -f "$output_objdir/$newlib"; then :; else
 29.2635 +	      $show "generating import library for \`$soname'"
 29.2636 +	      save_ifs="$IFS"; IFS='~'
 29.2637 +	      cmds=$old_archive_from_expsyms_cmds
 29.2638 +	      for cmd in $cmds; do
 29.2639 +		IFS="$save_ifs"
 29.2640 +		eval cmd=\"$cmd\"
 29.2641 +		$show "$cmd"
 29.2642 +		$run eval "$cmd" || exit $?
 29.2643 +	      done
 29.2644 +	      IFS="$save_ifs"
 29.2645 +	    fi
 29.2646 +	    # make sure the library variables are pointing to the new library
 29.2647 +	    dir=$output_objdir
 29.2648 +	    linklib=$newlib
 29.2649 +	  fi # test -n "$old_archive_from_expsyms_cmds"
 29.2650 +
 29.2651 +	  if test "$linkmode" = prog || test "$mode" != relink; then
 29.2652 +	    add_shlibpath=
 29.2653 +	    add_dir=
 29.2654 +	    add=
 29.2655 +	    lib_linked=yes
 29.2656 +	    case $hardcode_action in
 29.2657 +	    immediate | unsupported)
 29.2658 +	      if test "$hardcode_direct" = no; then
 29.2659 +		add="$dir/$linklib"
 29.2660 +		case $host in
 29.2661 +		  *-*-sco3.2v5.0.[024]*) add_dir="-L$dir" ;;
 29.2662 +		  *-*-sysv4*uw2*) add_dir="-L$dir" ;;
 29.2663 +		  *-*-sysv5OpenUNIX* | *-*-sysv5UnixWare7.[01].[10]* | \
 29.2664 +		    *-*-unixware7*) add_dir="-L$dir" ;;
 29.2665 +		  *-*-darwin* )
 29.2666 +		    # if the lib is a module then we can not link against
 29.2667 +		    # it, someone is ignoring the new warnings I added
 29.2668 +		    if /usr/bin/file -L $add 2> /dev/null |
 29.2669 +                      $EGREP ": [^:]* bundle" >/dev/null ; then
 29.2670 +		      $echo "** Warning, lib $linklib is a module, not a shared library"
 29.2671 +		      if test -z "$old_library" ; then
 29.2672 +		        $echo
 29.2673 +		        $echo "** And there doesn't seem to be a static archive available"
 29.2674 +		        $echo "** The link will probably fail, sorry"
 29.2675 +		      else
 29.2676 +		        add="$dir/$old_library"
 29.2677 +		      fi
 29.2678 +		    fi
 29.2679 +		esac
 29.2680 +	      elif test "$hardcode_minus_L" = no; then
 29.2681 +		case $host in
 29.2682 +		*-*-sunos*) add_shlibpath="$dir" ;;
 29.2683 +		esac
 29.2684 +		add_dir="-L$dir"
 29.2685 +		add="-l$name"
 29.2686 +	      elif test "$hardcode_shlibpath_var" = no; then
 29.2687 +		add_shlibpath="$dir"
 29.2688 +		add="-l$name"
 29.2689 +	      else
 29.2690 +		lib_linked=no
 29.2691 +	      fi
 29.2692 +	      ;;
 29.2693 +	    relink)
 29.2694 +	      if test "$hardcode_direct" = yes; then
 29.2695 +		add="$dir/$linklib"
 29.2696 +	      elif test "$hardcode_minus_L" = yes; then
 29.2697 +		add_dir="-L$dir"
 29.2698 +		# Try looking first in the location we're being installed to.
 29.2699 +		if test -n "$inst_prefix_dir"; then
 29.2700 +		  case $libdir in
 29.2701 +		    [\\/]*)
 29.2702 +		      add_dir="$add_dir -L$inst_prefix_dir$libdir"
 29.2703 +		      ;;
 29.2704 +		  esac
 29.2705 +		fi
 29.2706 +		add="-l$name"
 29.2707 +	      elif test "$hardcode_shlibpath_var" = yes; then
 29.2708 +		add_shlibpath="$dir"
 29.2709 +		add="-l$name"
 29.2710 +	      else
 29.2711 +		lib_linked=no
 29.2712 +	      fi
 29.2713 +	      ;;
 29.2714 +	    *) lib_linked=no ;;
 29.2715 +	    esac
 29.2716 +
 29.2717 +	    if test "$lib_linked" != yes; then
 29.2718 +	      $echo "$modename: configuration error: unsupported hardcode properties"
 29.2719 +	      exit $EXIT_FAILURE
 29.2720 +	    fi
 29.2721 +
 29.2722 +	    if test -n "$add_shlibpath"; then
 29.2723 +	      case :$compile_shlibpath: in
 29.2724 +	      *":$add_shlibpath:"*) ;;
 29.2725 +	      *) compile_shlibpath="$compile_shlibpath$add_shlibpath:" ;;
 29.2726 +	      esac
 29.2727 +	    fi
 29.2728 +	    if test "$linkmode" = prog; then
 29.2729 +	      test -n "$add_dir" && compile_deplibs="$add_dir $compile_deplibs"
 29.2730 +	      test -n "$add" && compile_deplibs="$add $compile_deplibs"
 29.2731 +	    else
 29.2732 +	      test -n "$add_dir" && deplibs="$add_dir $deplibs"
 29.2733 +	      test -n "$add" && deplibs="$add $deplibs"
 29.2734 +	      if test "$hardcode_direct" != yes && \
 29.2735 +		 test "$hardcode_minus_L" != yes && \
 29.2736 +		 test "$hardcode_shlibpath_var" = yes; then
 29.2737 +		case :$finalize_shlibpath: in
 29.2738 +		*":$libdir:"*) ;;
 29.2739 +		*) finalize_shlibpath="$finalize_shlibpath$libdir:" ;;
 29.2740 +		esac
 29.2741 +	      fi
 29.2742 +	    fi
 29.2743 +	  fi
 29.2744 +
 29.2745 +	  if test "$linkmode" = prog || test "$mode" = relink; then
 29.2746 +	    add_shlibpath=
 29.2747 +	    add_dir=
 29.2748 +	    add=
 29.2749 +	    # Finalize command for both is simple: just hardcode it.
 29.2750 +	    if test "$hardcode_direct" = yes; then
 29.2751 +	      add="$libdir/$linklib"
 29.2752 +	    elif test "$hardcode_minus_L" = yes; then
 29.2753 +	      add_dir="-L$libdir"
 29.2754 +	      add="-l$name"
 29.2755 +	    elif test "$hardcode_shlibpath_var" = yes; then
 29.2756 +	      case :$finalize_shlibpath: in
 29.2757 +	      *":$libdir:"*) ;;
 29.2758 +	      *) finalize_shlibpath="$finalize_shlibpath$libdir:" ;;
 29.2759 +	      esac
 29.2760 +	      add="-l$name"
 29.2761 +	    elif test "$hardcode_automatic" = yes; then
 29.2762 +	      if test -n "$inst_prefix_dir" &&
 29.2763 +		 test -f "$inst_prefix_dir$libdir/$linklib" ; then
 29.2764 +	        add="$inst_prefix_dir$libdir/$linklib"
 29.2765 +	      else
 29.2766 +	        add="$libdir/$linklib"
 29.2767 +	      fi
 29.2768 +	    else
 29.2769 +	      # We cannot seem to hardcode it, guess we'll fake it.
 29.2770 +	      add_dir="-L$libdir"
 29.2771 +	      # Try looking first in the location we're being installed to.
 29.2772 +	      if test -n "$inst_prefix_dir"; then
 29.2773 +		case $libdir in
 29.2774 +		  [\\/]*)
 29.2775 +		    add_dir="$add_dir -L$inst_prefix_dir$libdir"
 29.2776 +		    ;;
 29.2777 +		esac
 29.2778 +	      fi
 29.2779 +	      add="-l$name"
 29.2780 +	    fi
 29.2781 +
 29.2782 +	    if test "$linkmode" = prog; then
 29.2783 +	      test -n "$add_dir" && finalize_deplibs="$add_dir $finalize_deplibs"
 29.2784 +	      test -n "$add" && finalize_deplibs="$add $finalize_deplibs"
 29.2785 +	    else
 29.2786 +	      test -n "$add_dir" && deplibs="$add_dir $deplibs"
 29.2787 +	      test -n "$add" && deplibs="$add $deplibs"
 29.2788 +	    fi
 29.2789 +	  fi
 29.2790 +	elif test "$linkmode" = prog; then
 29.2791 +	  # Here we assume that one of hardcode_direct or hardcode_minus_L
 29.2792 +	  # is not unsupported.  This is valid on all known static and
 29.2793 +	  # shared platforms.
 29.2794 +	  if test "$hardcode_direct" != unsupported; then
 29.2795 +	    test -n "$old_library" && linklib="$old_library"
 29.2796 +	    compile_deplibs="$dir/$linklib $compile_deplibs"
 29.2797 +	    finalize_deplibs="$dir/$linklib $finalize_deplibs"
 29.2798 +	  else
 29.2799 +	    compile_deplibs="-l$name -L$dir $compile_deplibs"
 29.2800 +	    finalize_deplibs="-l$name -L$dir $finalize_deplibs"
 29.2801 +	  fi
 29.2802 +	elif test "$build_libtool_libs" = yes; then
 29.2803 +	  # Not a shared library
 29.2804 +	  if test "$deplibs_check_method" != pass_all; then
 29.2805 +	    # We're trying link a shared library against a static one
 29.2806 +	    # but the system doesn't support it.
 29.2807 +
 29.2808 +	    # Just print a warning and add the library to dependency_libs so
 29.2809 +	    # that the program can be linked against the static library.
 29.2810 +	    $echo
 29.2811 +	    $echo "*** Warning: This system can not link to static lib archive $lib."
 29.2812 +	    $echo "*** I have the capability to make that library automatically link in when"
 29.2813 +	    $echo "*** you link to this library.  But I can only do this if you have a"
 29.2814 +	    $echo "*** shared version of the library, which you do not appear to have."
 29.2815 +	    if test "$module" = yes; then
 29.2816 +	      $echo "*** But as you try to build a module library, libtool will still create "
 29.2817 +	      $echo "*** a static module, that should work as long as the dlopening application"
 29.2818 +	      $echo "*** is linked with the -dlopen flag to resolve symbols at runtime."
 29.2819 +	      if test -z "$global_symbol_pipe"; then
 29.2820 +		$echo
 29.2821 +		$echo "*** However, this would only work if libtool was able to extract symbol"
 29.2822 +		$echo "*** lists from a program, using \`nm' or equivalent, but libtool could"
 29.2823 +		$echo "*** not find such a program.  So, this module is probably useless."
 29.2824 +		$echo "*** \`nm' from GNU binutils and a full rebuild may help."
 29.2825 +	      fi
 29.2826 +	      if test "$build_old_libs" = no; then
 29.2827 +		build_libtool_libs=module
 29.2828 +		build_old_libs=yes
 29.2829 +	      else
 29.2830 +		build_libtool_libs=no
 29.2831 +	      fi
 29.2832 +	    fi
 29.2833 +	  else
 29.2834 +	    deplibs="$dir/$old_library $deplibs"
 29.2835 +	    link_static=yes
 29.2836 +	  fi
 29.2837 +	fi # link shared/static library?
 29.2838 +
 29.2839 +	if test "$linkmode" = lib; then
 29.2840 +	  if test -n "$dependency_libs" &&
 29.2841 +	     { test "$hardcode_into_libs" != yes ||
 29.2842 +	       test "$build_old_libs" = yes ||
 29.2843 +	       test "$link_static" = yes; }; then
 29.2844 +	    # Extract -R from dependency_libs
 29.2845 +	    temp_deplibs=
 29.2846 +	    for libdir in $dependency_libs; do
 29.2847 +	      case $libdir in
 29.2848 +	      -R*) temp_xrpath=`$echo "X$libdir" | $Xsed -e 's/^-R//'`
 29.2849 +		   case " $xrpath " in
 29.2850 +		   *" $temp_xrpath "*) ;;
 29.2851 +		   *) xrpath="$xrpath $temp_xrpath";;
 29.2852 +		   esac;;
 29.2853 +	      *) temp_deplibs="$temp_deplibs $libdir";;
 29.2854 +	      esac
 29.2855 +	    done
 29.2856 +	    dependency_libs="$temp_deplibs"
 29.2857 +	  fi
 29.2858 +
 29.2859 +	  newlib_search_path="$newlib_search_path $absdir"
 29.2860 +	  # Link against this library
 29.2861 +	  test "$link_static" = no && newdependency_libs="$abs_ladir/$laname $newdependency_libs"
 29.2862 +	  # ... and its dependency_libs
 29.2863 +	  tmp_libs=
 29.2864 +	  for deplib in $dependency_libs; do
 29.2865 +	    newdependency_libs="$deplib $newdependency_libs"
 29.2866 +	    if test "X$duplicate_deps" = "Xyes" ; then
 29.2867 +	      case "$tmp_libs " in
 29.2868 +	      *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;;
 29.2869 +	      esac
 29.2870 +	    fi
 29.2871 +	    tmp_libs="$tmp_libs $deplib"
 29.2872 +	  done
 29.2873 +
 29.2874 +	  if test "$link_all_deplibs" != no; then
 29.2875 +	    # Add the search paths of all dependency libraries
 29.2876 +	    for deplib in $dependency_libs; do
 29.2877 +	      case $deplib in
 29.2878 +	      -L*) path="$deplib" ;;
 29.2879 +	      *.la)
 29.2880 +		dir=`$echo "X$deplib" | $Xsed -e 's%/[^/]*$%%'`
 29.2881 +		test "X$dir" = "X$deplib" && dir="."
 29.2882 +		# We need an absolute path.
 29.2883 +		case $dir in
 29.2884 +		[\\/]* | [A-Za-z]:[\\/]*) absdir="$dir" ;;
 29.2885 +		*)
 29.2886 +		  absdir=`cd "$dir" && pwd`
 29.2887 +		  if test -z "$absdir"; then
 29.2888 +		    $echo "$modename: warning: cannot determine absolute directory name of \`$dir'" 1>&2
 29.2889 +		    absdir="$dir"
 29.2890 +		  fi
 29.2891 +		  ;;
 29.2892 +		esac
 29.2893 +		if grep "^installed=no" $deplib > /dev/null; then
 29.2894 +		  path="$absdir/$objdir"
 29.2895 +		else
 29.2896 +		  eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $deplib`
 29.2897 +		  if test -z "$libdir"; then
 29.2898 +		    $echo "$modename: \`$deplib' is not a valid libtool archive" 1>&2
 29.2899 +		    exit $EXIT_FAILURE
 29.2900 +		  fi
 29.2901 +		  if test "$absdir" != "$libdir"; then
 29.2902 +		    $echo "$modename: warning: \`$deplib' seems to be moved" 1>&2
 29.2903 +		  fi
 29.2904 +		  path="$absdir"
 29.2905 +		fi
 29.2906 +		depdepl=
 29.2907 +		case $host in
 29.2908 +		*-*-darwin*)
 29.2909 +		  # we do not want to link against static libs,
 29.2910 +		  # but need to link against shared
 29.2911 +		  eval deplibrary_names=`${SED} -n -e 's/^library_names=\(.*\)$/\1/p' $deplib`
 29.2912 +		  if test -n "$deplibrary_names" ; then
 29.2913 +		    for tmp in $deplibrary_names ; do
 29.2914 +		      depdepl=$tmp
 29.2915 +		    done
 29.2916 +		    if test -f "$path/$depdepl" ; then
 29.2917 +		      depdepl="$path/$depdepl"
 29.2918 +		    fi
 29.2919 +		    # do not add paths which are already there
 29.2920 +		    case " $newlib_search_path " in
 29.2921 +		    *" $path "*) ;;
 29.2922 +		    *) newlib_search_path="$newlib_search_path $path";;
 29.2923 +		    esac
 29.2924 +		  fi
 29.2925 +		  path=""
 29.2926 +		  ;;
 29.2927 +		*)
 29.2928 +		  path="-L$path"
 29.2929 +		  ;;
 29.2930 +		esac
 29.2931 +		;;
 29.2932 +	      -l*)
 29.2933 +		case $host in
 29.2934 +		*-*-darwin*)
 29.2935 +		  # Again, we only want to link against shared libraries
 29.2936 +		  eval tmp_libs=`$echo "X$deplib" | $Xsed -e "s,^\-l,,"`
 29.2937 +		  for tmp in $newlib_search_path ; do
 29.2938 +		    if test -f "$tmp/lib$tmp_libs.dylib" ; then
 29.2939 +		      eval depdepl="$tmp/lib$tmp_libs.dylib"
 29.2940 +		      break
 29.2941 +		    fi
 29.2942 +		  done
 29.2943 +		  path=""
 29.2944 +		  ;;
 29.2945 +		*) continue ;;
 29.2946 +		esac
 29.2947 +		;;
 29.2948 +	      *) continue ;;
 29.2949 +	      esac
 29.2950 +	      case " $deplibs " in
 29.2951 +	      *" $path "*) ;;
 29.2952 +	      *) deplibs="$path $deplibs" ;;
 29.2953 +	      esac
 29.2954 +	      case " $deplibs " in
 29.2955 +	      *" $depdepl "*) ;;
 29.2956 +	      *) deplibs="$depdepl $deplibs" ;;
 29.2957 +	      esac
 29.2958 +	    done
 29.2959 +	  fi # link_all_deplibs != no
 29.2960 +	fi # linkmode = lib
 29.2961 +      done # for deplib in $libs
 29.2962 +      dependency_libs="$newdependency_libs"
 29.2963 +      if test "$pass" = dlpreopen; then
 29.2964 +	# Link the dlpreopened libraries before other libraries
 29.2965 +	for deplib in $save_deplibs; do
 29.2966 +	  deplibs="$deplib $deplibs"
 29.2967 +	done
 29.2968 +      fi
 29.2969 +      if test "$pass" != dlopen; then
 29.2970 +	if test "$pass" != conv; then
 29.2971 +	  # Make sure lib_search_path contains only unique directories.
 29.2972 +	  lib_search_path=
 29.2973 +	  for dir in $newlib_search_path; do
 29.2974 +	    case "$lib_search_path " in
 29.2975 +	    *" $dir "*) ;;
 29.2976 +	    *) lib_search_path="$lib_search_path $dir" ;;
 29.2977 +	    esac
 29.2978 +	  done
 29.2979 +	  newlib_search_path=
 29.2980 +	fi
 29.2981 +
 29.2982 +	if test "$linkmode,$pass" != "prog,link"; then
 29.2983 +	  vars="deplibs"
 29.2984 +	else
 29.2985 +	  vars="compile_deplibs finalize_deplibs"
 29.2986 +	fi
 29.2987 +	for var in $vars dependency_libs; do
 29.2988 +	  # Add libraries to $var in reverse order
 29.2989 +	  eval tmp_libs=\"\$$var\"
 29.2990 +	  new_libs=
 29.2991 +	  for deplib in $tmp_libs; do
 29.2992 +	    # FIXME: Pedantically, this is the right thing to do, so
 29.2993 +	    #        that some nasty dependency loop isn't accidentally
 29.2994 +	    #        broken:
 29.2995 +	    #new_libs="$deplib $new_libs"
 29.2996 +	    # Pragmatically, this seems to cause very few problems in
 29.2997 +	    # practice:
 29.2998 +	    case $deplib in
 29.2999 +	    -L*) new_libs="$deplib $new_libs" ;;
 29.3000 +	    -R*) ;;
 29.3001 +	    *)
 29.3002 +	      # And here is the reason: when a library appears more
 29.3003 +	      # than once as an explicit dependence of a library, or
 29.3004 +	      # is implicitly linked in more than once by the
 29.3005 +	      # compiler, it is considered special, and multiple
 29.3006 +	      # occurrences thereof are not removed.  Compare this
 29.3007 +	      # with having the same library being listed as a
 29.3008 +	      # dependency of multiple other libraries: in this case,
 29.3009 +	      # we know (pedantically, we assume) the library does not
 29.3010 +	      # need to be listed more than once, so we keep only the
 29.3011 +	      # last copy.  This is not always right, but it is rare
 29.3012 +	      # enough that we require users that really mean to play
 29.3013 +	      # such unportable linking tricks to link the library
 29.3014 +	      # using -Wl,-lname, so that libtool does not consider it
 29.3015 +	      # for duplicate removal.
 29.3016 +	      case " $specialdeplibs " in
 29.3017 +	      *" $deplib "*) new_libs="$deplib $new_libs" ;;
 29.3018 +	      *)
 29.3019 +		case " $new_libs " in
 29.3020 +		*" $deplib "*) ;;
 29.3021 +		*) new_libs="$deplib $new_libs" ;;
 29.3022 +		esac
 29.3023 +		;;
 29.3024 +	      esac
 29.3025 +	      ;;
 29.3026 +	    esac
 29.3027 +	  done
 29.3028 +	  tmp_libs=
 29.3029 +	  for deplib in $new_libs; do
 29.3030 +	    case $deplib in
 29.3031 +	    -L*)
 29.3032 +	      case " $tmp_libs " in
 29.3033 +	      *" $deplib "*) ;;
 29.3034 +	      *) tmp_libs="$tmp_libs $deplib" ;;
 29.3035 +	      esac
 29.3036 +	      ;;
 29.3037 +	    *) tmp_libs="$tmp_libs $deplib" ;;
 29.3038 +	    esac
 29.3039 +	  done
 29.3040 +	  eval $var=\"$tmp_libs\"
 29.3041 +	done # for var
 29.3042 +      fi
 29.3043 +      # Last step: remove runtime libs from dependency_libs
 29.3044 +      # (they stay in deplibs)
 29.3045 +      tmp_libs=
 29.3046 +      for i in $dependency_libs ; do
 29.3047 +	case " $predeps $postdeps $compiler_lib_search_path " in
 29.3048 +	*" $i "*)
 29.3049 +	  i=""
 29.3050 +	  ;;
 29.3051 +	esac
 29.3052 +	if test -n "$i" ; then
 29.3053 +	  tmp_libs="$tmp_libs $i"
 29.3054 +	fi
 29.3055 +      done
 29.3056 +      dependency_libs=$tmp_libs
 29.3057 +    done # for pass
 29.3058 +    if test "$linkmode" = prog; then
 29.3059 +      dlfiles="$newdlfiles"
 29.3060 +      dlprefiles="$newdlprefiles"
 29.3061 +    fi
 29.3062 +
 29.3063 +    case $linkmode in
 29.3064 +    oldlib)
 29.3065 +      if test -n "$deplibs"; then
 29.3066 +	$echo "$modename: warning: \`-l' and \`-L' are ignored for archives" 1>&2
 29.3067 +      fi
 29.3068 +
 29.3069 +      if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then
 29.3070 +	$echo "$modename: warning: \`-dlopen' is ignored for archives" 1>&2
 29.3071 +      fi
 29.3072 +
 29.3073 +      if test -n "$rpath"; then
 29.3074 +	$echo "$modename: warning: \`-rpath' is ignored for archives" 1>&2
 29.3075 +      fi
 29.3076 +
 29.3077 +      if test -n "$xrpath"; then
 29.3078 +	$echo "$modename: warning: \`-R' is ignored for archives" 1>&2
 29.3079 +      fi
 29.3080 +
 29.3081 +      if test -n "$vinfo"; then
 29.3082 +	$echo "$modename: warning: \`-version-info/-version-number' is ignored for archives" 1>&2
 29.3083 +      fi
 29.3084 +
 29.3085 +      if test -n "$release"; then
 29.3086 +	$echo "$modename: warning: \`-release' is ignored for archives" 1>&2
 29.3087 +      fi
 29.3088 +
 29.3089 +      if test -n "$export_symbols" || test -n "$export_symbols_regex"; then
 29.3090 +	$echo "$modename: warning: \`-export-symbols' is ignored for archives" 1>&2
 29.3091 +      fi
 29.3092 +
 29.3093 +      # Now set the variables for building old libraries.
 29.3094 +      build_libtool_libs=no
 29.3095 +      oldlibs="$output"
 29.3096 +      objs="$objs$old_deplibs"
 29.3097 +      ;;
 29.3098 +
 29.3099 +    lib)
 29.3100 +      # Make sure we only generate libraries of the form `libNAME.la'.
 29.3101 +      case $outputname in
 29.3102 +      lib*)
 29.3103 +	name=`$echo "X$outputname" | $Xsed -e 's/\.la$//' -e 's/^lib//'`
 29.3104 +	eval shared_ext=\"$shrext_cmds\"
 29.3105 +	eval libname=\"$libname_spec\"
 29.3106 +	;;
 29.3107 +      *)
 29.3108 +	if test "$module" = no; then
 29.3109 +	  $echo "$modename: libtool library \`$output' must begin with \`lib'" 1>&2
 29.3110 +	  $echo "$help" 1>&2
 29.3111 +	  exit $EXIT_FAILURE
 29.3112 +	fi
 29.3113 +	if test "$need_lib_prefix" != no; then
 29.3114 +	  # Add the "lib" prefix for modules if required
 29.3115 +	  name=`$echo "X$outputname" | $Xsed -e 's/\.la$//'`
 29.3116 +	  eval shared_ext=\"$shrext_cmds\"
 29.3117 +	  eval libname=\"$libname_spec\"
 29.3118 +	else
 29.3119 +	  libname=`$echo "X$outputname" | $Xsed -e 's/\.la$//'`
 29.3120 +	fi
 29.3121 +	;;
 29.3122 +      esac
 29.3123 +
 29.3124 +      if test -n "$objs"; then
 29.3125 +	if test "$deplibs_check_method" != pass_all; then
 29.3126 +	  $echo "$modename: cannot build libtool library \`$output' from non-libtool objects on this host:$objs" 2>&1
 29.3127 +	  exit $EXIT_FAILURE
 29.3128 +	else
 29.3129 +	  $echo
 29.3130 +	  $echo "*** Warning: Linking the shared library $output against the non-libtool"
 29.3131 +	  $echo "*** objects $objs is not portable!"
 29.3132 +	  libobjs="$libobjs $objs"
 29.3133 +	fi
 29.3134 +      fi
 29.3135 +
 29.3136 +      if test "$dlself" != no; then
 29.3137 +	$echo "$modename: warning: \`-dlopen self' is ignored for libtool libraries" 1>&2
 29.3138 +      fi
 29.3139 +
 29.3140 +      set dummy $rpath
 29.3141 +      if test "$#" -gt 2; then
 29.3142 +	$echo "$modename: warning: ignoring multiple \`-rpath's for a libtool library" 1>&2
 29.3143 +      fi
 29.3144 +      install_libdir="$2"
 29.3145 +
 29.3146 +      oldlibs=
 29.3147 +      if test -z "$rpath"; then
 29.3148 +	if test "$build_libtool_libs" = yes; then
 29.3149 +	  # Building a libtool convenience library.
 29.3150 +	  # Some compilers have problems with a `.al' extension so
 29.3151 +	  # convenience libraries should have the same extension an
 29.3152 +	  # archive normally would.
 29.3153 +	  oldlibs="$output_objdir/$libname.$libext $oldlibs"
 29.3154 +	  build_libtool_libs=convenience
 29.3155 +	  build_old_libs=yes
 29.3156 +	fi
 29.3157 +
 29.3158 +	if test -n "$vinfo"; then
 29.3159 +	  $echo "$modename: warning: \`-version-info/-version-number' is ignored for convenience libraries" 1>&2
 29.3160 +	fi
 29.3161 +
 29.3162 +	if test -n "$release"; then
 29.3163 +	  $echo "$modename: warning: \`-release' is ignored for convenience libraries" 1>&2
 29.3164 +	fi
 29.3165 +      else
 29.3166 +
 29.3167 +	# Parse the version information argument.
 29.3168 +	save_ifs="$IFS"; IFS=':'
 29.3169 +	set dummy $vinfo 0 0 0
 29.3170 +	IFS="$save_ifs"
 29.3171 +
 29.3172 +	if test -n "$8"; then
 29.3173 +	  $echo "$modename: too many parameters to \`-version-info'" 1>&2
 29.3174 +	  $echo "$help" 1>&2
 29.3175 +	  exit $EXIT_FAILURE
 29.3176 +	fi
 29.3177 +
 29.3178 +	# convert absolute version numbers to libtool ages
 29.3179 +	# this retains compatibility with .la files and attempts
 29.3180 +	# to make the code below a bit more comprehensible
 29.3181 +
 29.3182 +	case $vinfo_number in
 29.3183 +	yes)
 29.3184 +	  number_major="$2"
 29.3185 +	  number_minor="$3"
 29.3186 +	  number_revision="$4"
 29.3187 +	  #
 29.3188 +	  # There are really only two kinds -- those that
 29.3189 +	  # use the current revision as the major version
 29.3190 +	  # and those that subtract age and use age as
 29.3191 +	  # a minor version.  But, then there is irix
 29.3192 +	  # which has an extra 1 added just for fun
 29.3193 +	  #
 29.3194 +	  case $version_type in
 29.3195 +	  darwin|linux|osf|windows)
 29.3196 +	    current=`expr $number_major + $number_minor`
 29.3197 +	    age="$number_minor"
 29.3198 +	    revision="$number_revision"
 29.3199 +	    ;;
 29.3200 +	  freebsd-aout|freebsd-elf|sunos)
 29.3201 +	    current="$number_major"
 29.3202 +	    revision="$number_minor"
 29.3203 +	    age="0"
 29.3204 +	    ;;
 29.3205 +	  irix|nonstopux)
 29.3206 +	    current=`expr $number_major + $number_minor - 1`
 29.3207 +	    age="$number_minor"
 29.3208 +	    revision="$number_minor"
 29.3209 +	    ;;
 29.3210 +	  *)
 29.3211 +	    $echo "$modename: unknown library version type \`$version_type'" 1>&2
 29.3212 +	    $echo "Fatal configuration error.  See the $PACKAGE docs for more information." 1>&2
 29.3213 +	    exit $EXIT_FAILURE
 29.3214 +	    ;;
 29.3215 +	  esac
 29.3216 +	  ;;
 29.3217 +	no)
 29.3218 +	  current="$2"
 29.3219 +	  revision="$3"
 29.3220 +	  age="$4"
 29.3221 +	  ;;
 29.3222 +	esac
 29.3223 +
 29.3224 +	# Check that each of the things are valid numbers.
 29.3225 +	case $current in
 29.3226 +	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]) ;;
 29.3227 +	*)
 29.3228 +	  $echo "$modename: CURRENT \`$current' must be a nonnegative integer" 1>&2
 29.3229 +	  $echo "$modename: \`$vinfo' is not valid version information" 1>&2
 29.3230 +	  exit $EXIT_FAILURE
 29.3231 +	  ;;
 29.3232 +	esac
 29.3233 +
 29.3234 +	case $revision in
 29.3235 +	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]) ;;
 29.3236 +	*)
 29.3237 +	  $echo "$modename: REVISION \`$revision' must be a nonnegative integer" 1>&2
 29.3238 +	  $echo "$modename: \`$vinfo' is not valid version information" 1>&2
 29.3239 +	  exit $EXIT_FAILURE
 29.3240 +	  ;;
 29.3241 +	esac
 29.3242 +
 29.3243 +	case $age in
 29.3244 +	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]) ;;
 29.3245 +	*)
 29.3246 +	  $echo "$modename: AGE \`$age' must be a nonnegative integer" 1>&2
 29.3247 +	  $echo "$modename: \`$vinfo' is not valid version information" 1>&2
 29.3248 +	  exit $EXIT_FAILURE
 29.3249 +	  ;;
 29.3250 +	esac
 29.3251 +
 29.3252 +	if test "$age" -gt "$current"; then
 29.3253 +	  $echo "$modename: AGE \`$age' is greater than the current interface number \`$current'" 1>&2
 29.3254 +	  $echo "$modename: \`$vinfo' is not valid version information" 1>&2
 29.3255 +	  exit $EXIT_FAILURE
 29.3256 +	fi
 29.3257 +
 29.3258 +	# Calculate the version variables.
 29.3259 +	major=
 29.3260 +	versuffix=
 29.3261 +	verstring=
 29.3262 +	case $version_type in
 29.3263 +	none) ;;
 29.3264 +
 29.3265 +	darwin)
 29.3266 +	  # Like Linux, but with the current version available in
 29.3267 +	  # verstring for coding it into the library header
 29.3268 +	  major=.`expr $current - $age`
 29.3269 +	  versuffix="$major.$age.$revision"
 29.3270 +	  # Darwin ld doesn't like 0 for these options...
 29.3271 +	  minor_current=`expr $current + 1`
 29.3272 +	  verstring="${wl}-compatibility_version ${wl}$minor_current ${wl}-current_version ${wl}$minor_current.$revision"
 29.3273 +	  ;;
 29.3274 +
 29.3275 +	freebsd-aout)
 29.3276 +	  major=".$current"
 29.3277 +	  versuffix=".$current.$revision";
 29.3278 +	  ;;
 29.3279 +
 29.3280 +	freebsd-elf)
 29.3281 +	  major=".$current"
 29.3282 +	  versuffix=".$current";
 29.3283 +	  ;;
 29.3284 +
 29.3285 +	irix | nonstopux)
 29.3286 +	  major=`expr $current - $age + 1`
 29.3287 +
 29.3288 +	  case $version_type in
 29.3289 +	    nonstopux) verstring_prefix=nonstopux ;;
 29.3290 +	    *)         verstring_prefix=sgi ;;
 29.3291 +	  esac
 29.3292 +	  verstring="$verstring_prefix$major.$revision"
 29.3293 +
 29.3294 +	  # Add in all the interfaces that we are compatible with.
 29.3295 +	  loop=$revision
 29.3296 +	  while test "$loop" -ne 0; do
 29.3297 +	    iface=`expr $revision - $loop`
 29.3298 +	    loop=`expr $loop - 1`
 29.3299 +	    verstring="$verstring_prefix$major.$iface:$verstring"
 29.3300 +	  done
 29.3301 +
 29.3302 +	  # Before this point, $major must not contain `.'.
 29.3303 +	  major=.$major
 29.3304 +	  versuffix="$major.$revision"
 29.3305 +	  ;;
 29.3306 +
 29.3307 +	linux)
 29.3308 +	  major=.`expr $current - $age`
 29.3309 +	  versuffix="$major.$age.$revision"
 29.3310 +	  ;;
 29.3311 +
 29.3312 +	osf)
 29.3313 +	  major=.`expr $current - $age`
 29.3314 +	  versuffix=".$current.$age.$revision"
 29.3315 +	  verstring="$current.$age.$revision"
 29.3316 +
 29.3317 +	  # Add in all the interfaces that we are compatible with.
 29.3318 +	  loop=$age
 29.3319 +	  while test "$loop" -ne 0; do
 29.3320 +	    iface=`expr $current - $loop`
 29.3321 +	    loop=`expr $loop - 1`
 29.3322 +	    verstring="$verstring:${iface}.0"
 29.3323 +	  done
 29.3324 +
 29.3325 +	  # Make executables depend on our current version.
 29.3326 +	  verstring="$verstring:${current}.0"
 29.3327 +	  ;;
 29.3328 +
 29.3329 +	sunos)
 29.3330 +	  major=".$current"
 29.3331 +	  versuffix=".$current.$revision"
 29.3332 +	  ;;
 29.3333 +
 29.3334 +	windows)
 29.3335 +	  # Use '-' rather than '.', since we only want one
 29.3336 +	  # extension on DOS 8.3 filesystems.
 29.3337 +	  major=`expr $current - $age`
 29.3338 +	  versuffix="-$major"
 29.3339 +	  ;;
 29.3340 +
 29.3341 +	*)
 29.3342 +	  $echo "$modename: unknown library version type \`$version_type'" 1>&2
 29.3343 +	  $echo "Fatal configuration error.  See the $PACKAGE docs for more information." 1>&2
 29.3344 +	  exit $EXIT_FAILURE
 29.3345 +	  ;;
 29.3346 +	esac
 29.3347 +
 29.3348 +	# Clear the version info if we defaulted, and they specified a release.
 29.3349 +	if test -z "$vinfo" && test -n "$release"; then
 29.3350 +	  major=
 29.3351 +	  case $version_type in
 29.3352 +	  darwin)
 29.3353 +	    # we can't check for "0.0" in archive_cmds due to quoting
 29.3354 +	    # problems, so we reset it completely
 29.3355 +	    verstring=
 29.3356 +	    ;;
 29.3357 +	  *)
 29.3358 +	    verstring="0.0"
 29.3359 +	    ;;
 29.3360 +	  esac
 29.3361 +	  if test "$need_version" = no; then
 29.3362 +	    versuffix=
 29.3363 +	  else
 29.3364 +	    versuffix=".0.0"
 29.3365 +	  fi
 29.3366 +	fi
 29.3367 +
 29.3368 +	# Remove version info from name if versioning should be avoided
 29.3369 +	if test "$avoid_version" = yes && test "$need_version" = no; then
 29.3370 +	  major=
 29.3371 +	  versuffix=
 29.3372 +	  verstring=""
 29.3373 +	fi
 29.3374 +
 29.3375 +	# Check to see if the archive will have undefined symbols.
 29.3376 +	if test "$allow_undefined" = yes; then
 29.3377 +	  if test "$allow_undefined_flag" = unsupported; then
 29.3378 +	    $echo "$modename: warning: undefined symbols not allowed in $host shared libraries" 1>&2
 29.3379 +	    build_libtool_libs=no
 29.3380 +	    build_old_libs=yes
 29.3381 +	  fi
 29.3382 +	else
 29.3383 +	  # Don't allow undefined symbols.
 29.3384 +	  allow_undefined_flag="$no_undefined_flag"
 29.3385 +	fi
 29.3386 +      fi
 29.3387 +
 29.3388 +      if test "$mode" != relink; then
 29.3389 +	# Remove our outputs, but don't remove object files since they
 29.3390 +	# may have been created when compiling PIC objects.
 29.3391 +	removelist=
 29.3392 +	tempremovelist=`$echo "$output_objdir/*"`
 29.3393 +	for p in $tempremovelist; do
 29.3394 +	  case $p in
 29.3395 +	    *.$objext)
 29.3396 +	       ;;
 29.3397 +	    $output_objdir/$outputname | $output_objdir/$libname.* | $output_objdir/${libname}${release}.*)
 29.3398 +	       if test "X$precious_files_regex" != "X"; then
 29.3399 +	         if echo $p | $EGREP -e "$precious_files_regex" >/dev/null 2>&1
 29.3400 +	         then
 29.3401 +		   continue
 29.3402 +		 fi
 29.3403 +	       fi
 29.3404 +	       removelist="$removelist $p"
 29.3405 +	       ;;
 29.3406 +	    *) ;;
 29.3407 +	  esac
 29.3408 +	done
 29.3409 +	if test -n "$removelist"; then
 29.3410 +	  $show "${rm}r $removelist"
 29.3411 +	  $run ${rm}r $removelist
 29.3412 +	fi
 29.3413 +      fi
 29.3414 +
 29.3415 +      # Now set the variables for building old libraries.
 29.3416 +      if test "$build_old_libs" = yes && test "$build_libtool_libs" != convenience ; then
 29.3417 +	oldlibs="$oldlibs $output_objdir/$libname.$libext"
 29.3418 +
 29.3419 +	# Transform .lo files to .o files.
 29.3420 +	oldobjs="$objs "`$echo "X$libobjs" | $SP2NL | $Xsed -e '/\.'${libext}'$/d' -e "$lo2o" | $NL2SP`
 29.3421 +      fi
 29.3422 +
 29.3423 +      # Eliminate all temporary directories.
 29.3424 +      for path in $notinst_path; do
 29.3425 +	lib_search_path=`$echo "$lib_search_path " | ${SED} -e "s% $path % %g"`
 29.3426 +	deplibs=`$echo "$deplibs " | ${SED} -e "s% -L$path % %g"`
 29.3427 +	dependency_libs=`$echo "$dependency_libs " | ${SED} -e "s% -L$path % %g"`
 29.3428 +      done
 29.3429 +
 29.3430 +      if test -n "$xrpath"; then
 29.3431 +	# If the user specified any rpath flags, then add them.
 29.3432 +	temp_xrpath=
 29.3433 +	for libdir in $xrpath; do
 29.3434 +	  temp_xrpath="$temp_xrpath -R$libdir"
 29.3435 +	  case "$finalize_rpath " in
 29.3436 +	  *" $libdir "*) ;;
 29.3437 +	  *) finalize_rpath="$finalize_rpath $libdir" ;;
 29.3438 +	  esac
 29.3439 +	done
 29.3440 +	if test "$hardcode_into_libs" != yes || test "$build_old_libs" = yes; then
 29.3441 +	  dependency_libs="$temp_xrpath $dependency_libs"
 29.3442 +	fi
 29.3443 +      fi
 29.3444 +
 29.3445 +      # Make sure dlfiles contains only unique files that won't be dlpreopened
 29.3446 +      old_dlfiles="$dlfiles"
 29.3447 +      dlfiles=
 29.3448 +      for lib in $old_dlfiles; do
 29.3449 +	case " $dlprefiles $dlfiles " in
 29.3450 +	*" $lib "*) ;;
 29.3451 +	*) dlfiles="$dlfiles $lib" ;;
 29.3452 +	esac
 29.3453 +      done
 29.3454 +
 29.3455 +      # Make sure dlprefiles contains only unique files
 29.3456 +      old_dlprefiles="$dlprefiles"
 29.3457 +      dlprefiles=
 29.3458 +      for lib in $old_dlprefiles; do
 29.3459 +	case "$dlprefiles " in
 29.3460 +	*" $lib "*) ;;
 29.3461 +	*) dlprefiles="$dlprefiles $lib" ;;
 29.3462 +	esac
 29.3463 +      done
 29.3464 +
 29.3465 +      if test "$build_libtool_libs" = yes; then
 29.3466 +	if test -n "$rpath"; then
 29.3467 +	  case $host in
 29.3468 +	  *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-beos*)
 29.3469 +	    # these systems don't actually have a c library (as such)!
 29.3470 +	    ;;
 29.3471 +	  *-*-rhapsody* | *-*-darwin1.[012])
 29.3472 +	    # Rhapsody C library is in the System framework
 29.3473 +	    deplibs="$deplibs -framework System"
 29.3474 +	    ;;
 29.3475 +	  *-*-netbsd*)
 29.3476 +	    # Don't link with libc until the a.out ld.so is fixed.
 29.3477 +	    ;;
 29.3478 +	  *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*)
 29.3479 +	    # Do not include libc due to us having libc/libc_r.
 29.3480 +	    ;;
 29.3481 +	  *-*-sco3.2v5* | *-*-sco5v6*)
 29.3482 +	    # Causes problems with __ctype
 29.3483 +	    ;;
 29.3484 +	  *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*)
 29.3485 +	    # Compiler inserts libc in the correct place for threads to work
 29.3486 +	    ;;
 29.3487 + 	  *)
 29.3488 +	    # Add libc to deplibs on all other systems if necessary.
 29.3489 +	    if test "$build_libtool_need_lc" = "yes"; then
 29.3490 +	      deplibs="$deplibs -lc"
 29.3491 +	    fi
 29.3492 +	    ;;
 29.3493 +	  esac
 29.3494 +	fi
 29.3495 +
 29.3496 +	# Transform deplibs into only deplibs that can be linked in shared.
 29.3497 +	name_save=$name
 29.3498 +	libname_save=$libname
 29.3499 +	release_save=$release
 29.3500 +	versuffix_save=$versuffix
 29.3501 +	major_save=$major
 29.3502 +	# I'm not sure if I'm treating the release correctly.  I think
 29.3503 +	# release should show up in the -l (ie -lgmp5) so we don't want to
 29.3504 +	# add it in twice.  Is that correct?
 29.3505 +	release=""
 29.3506 +	versuffix=""
 29.3507 +	major=""
 29.3508 +	newdeplibs=
 29.3509 +	droppeddeps=no
 29.3510 +	case $deplibs_check_method in
 29.3511 +	pass_all)
 29.3512 +	  # Don't check for shared/static.  Everything works.
 29.3513 +	  # This might be a little naive.  We might want to check
 29.3514 +	  # whether the library exists or not.  But this is on
 29.3515 +	  # osf3 & osf4 and I'm not really sure... Just
 29.3516 +	  # implementing what was already the behavior.
 29.3517 +	  newdeplibs=$deplibs
 29.3518 +	  ;;
 29.3519 +	test_compile)
 29.3520 +	  # This code stresses the "libraries are programs" paradigm to its
 29.3521 +	  # limits. Maybe even breaks it.  We compile a program, linking it
 29.3522 +	  # against the deplibs as a proxy for the library.  Then we can check
 29.3523 +	  # whether they linked in statically or dynamically with ldd.
 29.3524 +	  $rm conftest.c
 29.3525 +	  cat > conftest.c <<EOF
 29.3526 +	  int main() { return 0; }
 29.3527 +EOF
 29.3528 +	  $rm conftest
 29.3529 +	  $LTCC $LTCFLAGS -o conftest conftest.c $deplibs
 29.3530 +	  if test "$?" -eq 0 ; then
 29.3531 +	    ldd_output=`ldd conftest`
 29.3532 +	    for i in $deplibs; do
 29.3533 +	      name=`expr $i : '-l\(.*\)'`
 29.3534 +	      # If $name is empty we are operating on a -L argument.
 29.3535 +              if test "$name" != "" && test "$name" -ne "0"; then
 29.3536 +		if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
 29.3537 +		  case " $predeps $postdeps " in
 29.3538 +		  *" $i "*)
 29.3539 +		    newdeplibs="$newdeplibs $i"
 29.3540 +		    i=""
 29.3541 +		    ;;
 29.3542 +		  esac
 29.3543 +	        fi
 29.3544 +		if test -n "$i" ; then
 29.3545 +		  libname=`eval \\$echo \"$libname_spec\"`
 29.3546 +		  deplib_matches=`eval \\$echo \"$library_names_spec\"`
 29.3547 +		  set dummy $deplib_matches
 29.3548 +		  deplib_match=$2
 29.3549 +		  if test `expr "$ldd_output" : ".*$deplib_match"` -ne 0 ; then
 29.3550 +		    newdeplibs="$newdeplibs $i"
 29.3551 +		  else
 29.3552 +		    droppeddeps=yes
 29.3553 +		    $echo
 29.3554 +		    $echo "*** Warning: dynamic linker does not accept needed library $i."
 29.3555 +		    $echo "*** I have the capability to make that library automatically link in when"
 29.3556 +		    $echo "*** you link to this library.  But I can only do this if you have a"
 29.3557 +		    $echo "*** shared version of the library, which I believe you do not have"
 29.3558 +		    $echo "*** because a test_compile did reveal that the linker did not use it for"
 29.3559 +		    $echo "*** its dynamic dependency list that programs get resolved with at runtime."
 29.3560 +		  fi
 29.3561 +		fi
 29.3562 +	      else
 29.3563 +		newdeplibs="$newdeplibs $i"
 29.3564 +	      fi
 29.3565 +	    done
 29.3566 +	  else
 29.3567 +	    # Error occurred in the first compile.  Let's try to salvage
 29.3568 +	    # the situation: Compile a separate program for each library.
 29.3569 +	    for i in $deplibs; do
 29.3570 +	      name=`expr $i : '-l\(.*\)'`
 29.3571 +	      # If $name is empty we are operating on a -L argument.
 29.3572 +              if test "$name" != "" && test "$name" != "0"; then
 29.3573 +		$rm conftest
 29.3574 +		$LTCC $LTCFLAGS -o conftest conftest.c $i
 29.3575 +		# Did it work?
 29.3576 +		if test "$?" -eq 0 ; then
 29.3577 +		  ldd_output=`ldd conftest`
 29.3578 +		  if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
 29.3579 +		    case " $predeps $postdeps " in
 29.3580 +		    *" $i "*)
 29.3581 +		      newdeplibs="$newdeplibs $i"
 29.3582 +		      i=""
 29.3583 +		      ;;
 29.3584 +		    esac
 29.3585 +		  fi
 29.3586 +		  if test -n "$i" ; then
 29.3587 +		    libname=`eval \\$echo \"$libname_spec\"`
 29.3588 +		    deplib_matches=`eval \\$echo \"$library_names_spec\"`
 29.3589 +		    set dummy $deplib_matches
 29.3590 +		    deplib_match=$2
 29.3591 +		    if test `expr "$ldd_output" : ".*$deplib_match"` -ne 0 ; then
 29.3592 +		      newdeplibs="$newdeplibs $i"
 29.3593 +		    else
 29.3594 +		      droppeddeps=yes
 29.3595 +		      $echo
 29.3596 +		      $echo "*** Warning: dynamic linker does not accept needed library $i."
 29.3597 +		      $echo "*** I have the capability to make that library automatically link in when"
 29.3598 +		      $echo "*** you link to this library.  But I can only do this if you have a"
 29.3599 +		      $echo "*** shared version of the library, which you do not appear to have"
 29.3600 +		      $echo "*** because a test_compile did reveal that the linker did not use this one"
 29.3601 +		      $echo "*** as a dynamic dependency that programs can get resolved with at runtime."
 29.3602 +		    fi
 29.3603 +		  fi
 29.3604 +		else
 29.3605 +		  droppeddeps=yes
 29.3606 +		  $echo
 29.3607 +		  $echo "*** Warning!  Library $i is needed by this library but I was not able to"
 29.3608 +		  $echo "***  make it link in!  You will probably need to install it or some"
 29.3609 +		  $echo "*** library that it depends on before this library will be fully"
 29.3610 +		  $echo "*** functional.  Installing it before continuing would be even better."
 29.3611 +		fi
 29.3612 +	      else
 29.3613 +		newdeplibs="$newdeplibs $i"
 29.3614 +	      fi
 29.3615 +	    done
 29.3616 +	  fi
 29.3617 +	  ;;
 29.3618 +	file_magic*)
 29.3619 +	  set dummy $deplibs_check_method
 29.3620 +	  file_magic_regex=`expr "$deplibs_check_method" : "$2 \(.*\)"`
 29.3621 +	  for a_deplib in $deplibs; do
 29.3622 +	    name=`expr $a_deplib : '-l\(.*\)'`
 29.3623 +	    # If $name is empty we are operating on a -L argument.
 29.3624 +            if test "$name" != "" && test  "$name" != "0"; then
 29.3625 +	      if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
 29.3626 +		case " $predeps $postdeps " in
 29.3627 +		*" $a_deplib "*)
 29.3628 +		  newdeplibs="$newdeplibs $a_deplib"
 29.3629 +		  a_deplib=""
 29.3630 +		  ;;
 29.3631 +		esac
 29.3632 +	      fi
 29.3633 +	      if test -n "$a_deplib" ; then
 29.3634 +		libname=`eval \\$echo \"$libname_spec\"`
 29.3635 +		for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do
 29.3636 +		  potential_libs=`ls $i/$libname[.-]* 2>/dev/null`
 29.3637 +		  for potent_lib in $potential_libs; do
 29.3638 +		      # Follow soft links.
 29.3639 +		      if ls -lLd "$potent_lib" 2>/dev/null \
 29.3640 +			 | grep " -> " >/dev/null; then
 29.3641 +			continue
 29.3642 +		      fi
 29.3643 +		      # The statement above tries to avoid entering an
 29.3644 +		      # endless loop below, in case of cyclic links.
 29.3645 +		      # We might still enter an endless loop, since a link
 29.3646 +		      # loop can be closed while we follow links,
 29.3647 +		      # but so what?
 29.3648 +		      potlib="$potent_lib"
 29.3649 +		      while test -h "$potlib" 2>/dev/null; do
 29.3650 +			potliblink=`ls -ld $potlib | ${SED} 's/.* -> //'`
 29.3651 +			case $potliblink in
 29.3652 +			[\\/]* | [A-Za-z]:[\\/]*) potlib="$potliblink";;
 29.3653 +			*) potlib=`$echo "X$potlib" | $Xsed -e 's,[^/]*$,,'`"$potliblink";;
 29.3654 +			esac
 29.3655 +		      done
 29.3656 +		      if eval $file_magic_cmd \"\$potlib\" 2>/dev/null \
 29.3657 +			 | ${SED} 10q \
 29.3658 +			 | $EGREP "$file_magic_regex" > /dev/null; then
 29.3659 +			newdeplibs="$newdeplibs $a_deplib"
 29.3660 +			a_deplib=""
 29.3661 +			break 2
 29.3662 +		      fi
 29.3663 +		  done
 29.3664 +		done
 29.3665 +	      fi
 29.3666 +	      if test -n "$a_deplib" ; then
 29.3667 +		droppeddeps=yes
 29.3668 +		$echo
 29.3669 +		$echo "*** Warning: linker path does not have real file for library $a_deplib."
 29.3670 +		$echo "*** I have the capability to make that library automatically link in when"
 29.3671 +		$echo "*** you link to this library.  But I can only do this if you have a"
 29.3672 +		$echo "*** shared version of the library, which you do not appear to have"
 29.3673 +		$echo "*** because I did check the linker path looking for a file starting"
 29.3674 +		if test -z "$potlib" ; then
 29.3675 +		  $echo "*** with $libname but no candidates were found. (...for file magic test)"
 29.3676 +		else
 29.3677 +		  $echo "*** with $libname and none of the candidates passed a file format test"
 29.3678 +		  $echo "*** using a file magic. Last file checked: $potlib"
 29.3679 +		fi
 29.3680 +	      fi
 29.3681 +	    else
 29.3682 +	      # Add a -L argument.
 29.3683 +	      newdeplibs="$newdeplibs $a_deplib"
 29.3684 +	    fi
 29.3685 +	  done # Gone through all deplibs.
 29.3686 +	  ;;
 29.3687 +	match_pattern*)
 29.3688 +	  set dummy $deplibs_check_method
 29.3689 +	  match_pattern_regex=`expr "$deplibs_check_method" : "$2 \(.*\)"`
 29.3690 +	  for a_deplib in $deplibs; do
 29.3691 +	    name=`expr $a_deplib : '-l\(.*\)'`
 29.3692 +	    # If $name is empty we are operating on a -L argument.
 29.3693 +	    if test -n "$name" && test "$name" != "0"; then
 29.3694 +	      if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
 29.3695 +		case " $predeps $postdeps " in
 29.3696 +		*" $a_deplib "*)
 29.3697 +		  newdeplibs="$newdeplibs $a_deplib"
 29.3698 +		  a_deplib=""
 29.3699 +		  ;;
 29.3700 +		esac
 29.3701 +	      fi
 29.3702 +	      if test -n "$a_deplib" ; then
 29.3703 +		libname=`eval \\$echo \"$libname_spec\"`
 29.3704 +		for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do
 29.3705 +		  potential_libs=`ls $i/$libname[.-]* 2>/dev/null`
 29.3706 +		  for potent_lib in $potential_libs; do
 29.3707 +		    potlib="$potent_lib" # see symlink-check above in file_magic test
 29.3708 +		    if eval $echo \"$potent_lib\" 2>/dev/null \
 29.3709 +		        | ${SED} 10q \
 29.3710 +		        | $EGREP "$match_pattern_regex" > /dev/null; then
 29.3711 +		      newdeplibs="$newdeplibs $a_deplib"
 29.3712 +		      a_deplib=""
 29.3713 +		      break 2
 29.3714 +		    fi
 29.3715 +		  done
 29.3716 +		done
 29.3717 +	      fi
 29.3718 +	      if test -n "$a_deplib" ; then
 29.3719 +		droppeddeps=yes
 29.3720 +		$echo
 29.3721 +		$echo "*** Warning: linker path does not have real file for library $a_deplib."
 29.3722 +		$echo "*** I have the capability to make that library automatically link in when"
 29.3723 +		$echo "*** you link to this library.  But I can only do this if you have a"
 29.3724 +		$echo "*** shared version of the library, which you do not appear to have"
 29.3725 +		$echo "*** because I did check the linker path looking for a file starting"
 29.3726 +		if test -z "$potlib" ; then
 29.3727 +		  $echo "*** with $libname but no candidates were found. (...for regex pattern test)"
 29.3728 +		else
 29.3729 +		  $echo "*** with $libname and none of the candidates passed a file format test"
 29.3730 +		  $echo "*** using a regex pattern. Last file checked: $potlib"
 29.3731 +		fi
 29.3732 +	      fi
 29.3733 +	    else
 29.3734 +	      # Add a -L argument.
 29.3735 +	      newdeplibs="$newdeplibs $a_deplib"
 29.3736 +	    fi
 29.3737 +	  done # Gone through all deplibs.
 29.3738 +	  ;;
 29.3739 +	none | unknown | *)
 29.3740 +	  newdeplibs=""
 29.3741 +	  tmp_deplibs=`$echo "X $deplibs" | $Xsed -e 's/ -lc$//' \
 29.3742 +	    -e 's/ -[LR][^ ]*//g'`
 29.3743 +	  if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
 29.3744 +	    for i in $predeps $postdeps ; do
 29.3745 +	      # can't use Xsed below, because $i might contain '/'
 29.3746 +	      tmp_deplibs=`$echo "X $tmp_deplibs" | ${SED} -e "1s,^X,," -e "s,$i,,"`
 29.3747 +	    done
 29.3748 +	  fi
 29.3749 +	  if $echo "X $tmp_deplibs" | $Xsed -e 's/[ 	]//g' \
 29.3750 +	    | grep . >/dev/null; then
 29.3751 +	    $echo
 29.3752 +	    if test "X$deplibs_check_method" = "Xnone"; then
 29.3753 +	      $echo "*** Warning: inter-library dependencies are not supported in this platform."
 29.3754 +	    else
 29.3755 +	      $echo "*** Warning: inter-library dependencies are not known to be supported."
 29.3756 +	    fi
 29.3757 +	    $echo "*** All declared inter-library dependencies are being dropped."
 29.3758 +	    droppeddeps=yes
 29.3759 +	  fi
 29.3760 +	  ;;
 29.3761 +	esac
 29.3762 +	versuffix=$versuffix_save
 29.3763 +	major=$major_save
 29.3764 +	release=$release_save
 29.3765 +	libname=$libname_save
 29.3766 +	name=$name_save
 29.3767 +
 29.3768 +	case $host in
 29.3769 +	*-*-rhapsody* | *-*-darwin1.[012])
 29.3770 +	  # On Rhapsody replace the C library is the System framework
 29.3771 +	  newdeplibs=`$echo "X $newdeplibs" | $Xsed -e 's/ -lc / -framework System /'`
 29.3772 +	  ;;
 29.3773 +	esac
 29.3774 +
 29.3775 +	if test "$droppeddeps" = yes; then
 29.3776 +	  if test "$module" = yes; then
 29.3777 +	    $echo
 29.3778 +	    $echo "*** Warning: libtool could not satisfy all declared inter-library"
 29.3779 +	    $echo "*** dependencies of module $libname.  Therefore, libtool will create"
 29.3780 +	    $echo "*** a static module, that should work as long as the dlopening"
 29.3781 +	    $echo "*** application is linked with the -dlopen flag."
 29.3782 +	    if test -z "$global_symbol_pipe"; then
 29.3783 +	      $echo
 29.3784 +	      $echo "*** However, this would only work if libtool was able to extract symbol"
 29.3785 +	      $echo "*** lists from a program, using \`nm' or equivalent, but libtool could"
 29.3786 +	      $echo "*** not find such a program.  So, this module is probably useless."
 29.3787 +	      $echo "*** \`nm' from GNU binutils and a full rebuild may help."
 29.3788 +	    fi
 29.3789 +	    if test "$build_old_libs" = no; then
 29.3790 +	      oldlibs="$output_objdir/$libname.$libext"
 29.3791 +	      build_libtool_libs=module
 29.3792 +	      build_old_libs=yes
 29.3793 +	    else
 29.3794 +	      build_libtool_libs=no
 29.3795 +	    fi
 29.3796 +	  else
 29.3797 +	    $echo "*** The inter-library dependencies that have been dropped here will be"
 29.3798 +	    $echo "*** automatically added whenever a program is linked with this library"
 29.3799 +	    $echo "*** or is declared to -dlopen it."
 29.3800 +
 29.3801 +	    if test "$allow_undefined" = no; then
 29.3802 +	      $echo
 29.3803 +	      $echo "*** Since this library must not contain undefined symbols,"
 29.3804 +	      $echo "*** because either the platform does not support them or"
 29.3805 +	      $echo "*** it was explicitly requested with -no-undefined,"
 29.3806 +	      $echo "*** libtool will only create a static version of it."
 29.3807 +	      if test "$build_old_libs" = no; then
 29.3808 +		oldlibs="$output_objdir/$libname.$libext"
 29.3809 +		build_libtool_libs=module
 29.3810 +		build_old_libs=yes
 29.3811 +	      else
 29.3812 +		build_libtool_libs=no
 29.3813 +	      fi
 29.3814 +	    fi
 29.3815 +	  fi
 29.3816 +	fi
 29.3817 +	# Done checking deplibs!
 29.3818 +	deplibs=$newdeplibs
 29.3819 +      fi
 29.3820 +
 29.3821 +
 29.3822 +      # move library search paths that coincide with paths to not yet
 29.3823 +      # installed libraries to the beginning of the library search list
 29.3824 +      new_libs=
 29.3825 +      for path in $notinst_path; do
 29.3826 +	case " $new_libs " in
 29.3827 +	*" -L$path/$objdir "*) ;;
 29.3828 +	*)
 29.3829 +	  case " $deplibs " in
 29.3830 +	  *" -L$path/$objdir "*)
 29.3831 +	    new_libs="$new_libs -L$path/$objdir" ;;
 29.3832 +	  esac
 29.3833 +	  ;;
 29.3834 +	esac
 29.3835 +      done
 29.3836 +      for deplib in $deplibs; do
 29.3837 +	case $deplib in
 29.3838 +	-L*)
 29.3839 +	  case " $new_libs " in
 29.3840 +	  *" $deplib "*) ;;
 29.3841 +	  *) new_libs="$new_libs $deplib" ;;
 29.3842 +	  esac
 29.3843 +	  ;;
 29.3844 +	*) new_libs="$new_libs $deplib" ;;
 29.3845 +	esac
 29.3846 +      done
 29.3847 +      deplibs="$new_libs"
 29.3848 +
 29.3849 +
 29.3850 +      # All the library-specific variables (install_libdir is set above).
 29.3851 +      library_names=
 29.3852 +      old_library=
 29.3853 +      dlname=
 29.3854 +
 29.3855 +      # Test again, we may have decided not to build it any more
 29.3856 +      if test "$build_libtool_libs" = yes; then
 29.3857 +	if test "$hardcode_into_libs" = yes; then
 29.3858 +	  # Hardcode the library paths
 29.3859 +	  hardcode_libdirs=
 29.3860 +	  dep_rpath=
 29.3861 +	  rpath="$finalize_rpath"
 29.3862 +	  test "$mode" != relink && rpath="$compile_rpath$rpath"
 29.3863 +	  for libdir in $rpath; do
 29.3864 +	    if test -n "$hardcode_libdir_flag_spec"; then
 29.3865 +	      if test -n "$hardcode_libdir_separator"; then
 29.3866 +		if test -z "$hardcode_libdirs"; then
 29.3867 +		  hardcode_libdirs="$libdir"
 29.3868 +		else
 29.3869 +		  # Just accumulate the unique libdirs.
 29.3870 +		  case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in
 29.3871 +		  *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*)
 29.3872 +		    ;;
 29.3873 +		  *)
 29.3874 +		    hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir"
 29.3875 +		    ;;
 29.3876 +		  esac
 29.3877 +		fi
 29.3878 +	      else
 29.3879 +		eval flag=\"$hardcode_libdir_flag_spec\"
 29.3880 +		dep_rpath="$dep_rpath $flag"
 29.3881 +	      fi
 29.3882 +	    elif test -n "$runpath_var"; then
 29.3883 +	      case "$perm_rpath " in
 29.3884 +	      *" $libdir "*) ;;
 29.3885 +	      *) perm_rpath="$perm_rpath $libdir" ;;
 29.3886 +	      esac
 29.3887 +	    fi
 29.3888 +	  done
 29.3889 +	  # Substitute the hardcoded libdirs into the rpath.
 29.3890 +	  if test -n "$hardcode_libdir_separator" &&
 29.3891 +	     test -n "$hardcode_libdirs"; then
 29.3892 +	    libdir="$hardcode_libdirs"
 29.3893 +	    if test -n "$hardcode_libdir_flag_spec_ld"; then
 29.3894 +	      eval dep_rpath=\"$hardcode_libdir_flag_spec_ld\"
 29.3895 +	    else
 29.3896 +	      eval dep_rpath=\"$hardcode_libdir_flag_spec\"
 29.3897 +	    fi
 29.3898 +	  fi
 29.3899 +	  if test -n "$runpath_var" && test -n "$perm_rpath"; then
 29.3900 +	    # We should set the runpath_var.
 29.3901 +	    rpath=
 29.3902 +	    for dir in $perm_rpath; do
 29.3903 +	      rpath="$rpath$dir:"
 29.3904 +	    done
 29.3905 +	    eval "$runpath_var='$rpath\$$runpath_var'; export $runpath_var"
 29.3906 +	  fi
 29.3907 +	  test -n "$dep_rpath" && deplibs="$dep_rpath $deplibs"
 29.3908 +	fi
 29.3909 +
 29.3910 +	shlibpath="$finalize_shlibpath"
 29.3911 +	test "$mode" != relink && shlibpath="$compile_shlibpath$shlibpath"
 29.3912 +	if test -n "$shlibpath"; then
 29.3913 +	  eval "$shlibpath_var='$shlibpath\$$shlibpath_var'; export $shlibpath_var"
 29.3914 +	fi
 29.3915 +
 29.3916 +	# Get the real and link names of the library.
 29.3917 +	eval shared_ext=\"$shrext_cmds\"
 29.3918 +	eval library_names=\"$library_names_spec\"
 29.3919 +	set dummy $library_names
 29.3920 +	realname="$2"
 29.3921 +	shift; shift
 29.3922 +
 29.3923 +	if test -n "$soname_spec"; then
 29.3924 +	  eval soname=\"$soname_spec\"
 29.3925 +	else
 29.3926 +	  soname="$realname"
 29.3927 +	fi
 29.3928 +	if test -z "$dlname"; then
 29.3929 +	  dlname=$soname
 29.3930 +	fi
 29.3931 +
 29.3932 +	lib="$output_objdir/$realname"
 29.3933 +	linknames=
 29.3934 +	for link
 29.3935 +	do
 29.3936 +	  linknames="$linknames $link"
 29.3937 +	done
 29.3938 +
 29.3939 +	# Use standard objects if they are pic
 29.3940 +	test -z "$pic_flag" && libobjs=`$echo "X$libobjs" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP`
 29.3941 +
 29.3942 +	# Prepare the list of exported symbols
 29.3943 +	if test -z "$export_symbols"; then
 29.3944 +	  if test "$always_export_symbols" = yes || test -n "$export_symbols_regex"; then
 29.3945 +	    $show "generating symbol list for \`$libname.la'"
 29.3946 +	    export_symbols="$output_objdir/$libname.exp"
 29.3947 +	    $run $rm $export_symbols
 29.3948 +	    cmds=$export_symbols_cmds
 29.3949 +	    save_ifs="$IFS"; IFS='~'
 29.3950 +	    for cmd in $cmds; do
 29.3951 +	      IFS="$save_ifs"
 29.3952 +	      eval cmd=\"$cmd\"
 29.3953 +	      if len=`expr "X$cmd" : ".*"` &&
 29.3954 +	       test "$len" -le "$max_cmd_len" || test "$max_cmd_len" -le -1; then
 29.3955 +	        $show "$cmd"
 29.3956 +	        $run eval "$cmd" || exit $?
 29.3957 +	        skipped_export=false
 29.3958 +	      else
 29.3959 +	        # The command line is too long to execute in one step.
 29.3960 +	        $show "using reloadable object file for export list..."
 29.3961 +	        skipped_export=:
 29.3962 +		# Break out early, otherwise skipped_export may be
 29.3963 +		# set to false by a later but shorter cmd.
 29.3964 +		break
 29.3965 +	      fi
 29.3966 +	    done
 29.3967 +	    IFS="$save_ifs"
 29.3968 +	    if test -n "$export_symbols_regex"; then
 29.3969 +	      $show "$EGREP -e \"$export_symbols_regex\" \"$export_symbols\" > \"${export_symbols}T\""
 29.3970 +	      $run eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"'
 29.3971 +	      $show "$mv \"${export_symbols}T\" \"$export_symbols\""
 29.3972 +	      $run eval '$mv "${export_symbols}T" "$export_symbols"'
 29.3973 +	    fi
 29.3974 +	  fi
 29.3975 +	fi
 29.3976 +
 29.3977 +	if test -n "$export_symbols" && test -n "$include_expsyms"; then
 29.3978 +	  $run eval '$echo "X$include_expsyms" | $SP2NL >> "$export_symbols"'
 29.3979 +	fi
 29.3980 +
 29.3981 +	tmp_deplibs=
 29.3982 +	for test_deplib in $deplibs; do
 29.3983 +		case " $convenience " in
 29.3984 +		*" $test_deplib "*) ;;
 29.3985 +		*)
 29.3986 +			tmp_deplibs="$tmp_deplibs $test_deplib"
 29.3987 +			;;
 29.3988 +		esac
 29.3989 +	done
 29.3990 +	deplibs="$tmp_deplibs"
 29.3991 +
 29.3992 +	if test -n "$convenience"; then
 29.3993 +	  if test -n "$whole_archive_flag_spec"; then
 29.3994 +	    save_libobjs=$libobjs
 29.3995 +	    eval libobjs=\"\$libobjs $whole_archive_flag_spec\"
 29.3996 +	  else
 29.3997 +	    gentop="$output_objdir/${outputname}x"
 29.3998 +	    generated="$generated $gentop"
 29.3999 +
 29.4000 +	    func_extract_archives $gentop $convenience
 29.4001 +	    libobjs="$libobjs $func_extract_archives_result"
 29.4002 +	  fi
 29.4003 +	fi
 29.4004 +	
 29.4005 +	if test "$thread_safe" = yes && test -n "$thread_safe_flag_spec"; then
 29.4006 +	  eval flag=\"$thread_safe_flag_spec\"
 29.4007 +	  linker_flags="$linker_flags $flag"
 29.4008 +	fi
 29.4009 +
 29.4010 +	# Make a backup of the uninstalled library when relinking
 29.4011 +	if test "$mode" = relink; then
 29.4012 +	  $run eval '(cd $output_objdir && $rm ${realname}U && $mv $realname ${realname}U)' || exit $?
 29.4013 +	fi
 29.4014 +
 29.4015 +	# Do each of the archive commands.
 29.4016 +	if test "$module" = yes && test -n "$module_cmds" ; then
 29.4017 +	  if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then
 29.4018 +	    eval test_cmds=\"$module_expsym_cmds\"
 29.4019 +	    cmds=$module_expsym_cmds
 29.4020 +	  else
 29.4021 +	    eval test_cmds=\"$module_cmds\"
 29.4022 +	    cmds=$module_cmds
 29.4023 +	  fi
 29.4024 +	else
 29.4025 +	if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then
 29.4026 +	  eval test_cmds=\"$archive_expsym_cmds\"
 29.4027 +	  cmds=$archive_expsym_cmds
 29.4028 +	else
 29.4029 +	  eval test_cmds=\"$archive_cmds\"
 29.4030 +	  cmds=$archive_cmds
 29.4031 +	  fi
 29.4032 +	fi
 29.4033 +
 29.4034 +	if test "X$skipped_export" != "X:" &&
 29.4035 +	   len=`expr "X$test_cmds" : ".*" 2>/dev/null` &&
 29.4036 +	   test "$len" -le "$max_cmd_len" || test "$max_cmd_len" -le -1; then
 29.4037 +	  :
 29.4038 +	else
 29.4039 +	  # The command line is too long to link in one step, link piecewise.
 29.4040 +	  $echo "creating reloadable object files..."
 29.4041 +
 29.4042 +	  # Save the value of $output and $libobjs because we want to
 29.4043 +	  # use them later.  If we have whole_archive_flag_spec, we
 29.4044 +	  # want to use save_libobjs as it was before
 29.4045 +	  # whole_archive_flag_spec was expanded, because we can't
 29.4046 +	  # assume the linker understands whole_archive_flag_spec.
 29.4047 +	  # This may have to be revisited, in case too many
 29.4048 +	  # convenience libraries get linked in and end up exceeding
 29.4049 +	  # the spec.
 29.4050 +	  if test -z "$convenience" || test -z "$whole_archive_flag_spec"; then
 29.4051 +	    save_libobjs=$libobjs
 29.4052 +	  fi
 29.4053 +	  save_output=$output
 29.4054 +	  output_la=`$echo "X$output" | $Xsed -e "$basename"`
 29.4055 +
 29.4056 +	  # Clear the reloadable object creation command queue and
 29.4057 +	  # initialize k to one.
 29.4058 +	  test_cmds=
 29.4059 +	  concat_cmds=
 29.4060 +	  objlist=
 29.4061 +	  delfiles=
 29.4062 +	  last_robj=
 29.4063 +	  k=1
 29.4064 +	  output=$output_objdir/$output_la-${k}.$objext
 29.4065 +	  # Loop over the list of objects to be linked.
 29.4066 +	  for obj in $save_libobjs
 29.4067 +	  do
 29.4068 +	    eval test_cmds=\"$reload_cmds $objlist $last_robj\"
 29.4069 +	    if test "X$objlist" = X ||
 29.4070 +	       { len=`expr "X$test_cmds" : ".*" 2>/dev/null` &&
 29.4071 +		 test "$len" -le "$max_cmd_len"; }; then
 29.4072 +	      objlist="$objlist $obj"
 29.4073 +	    else
 29.4074 +	      # The command $test_cmds is almost too long, add a
 29.4075 +	      # command to the queue.
 29.4076 +	      if test "$k" -eq 1 ; then
 29.4077 +		# The first file doesn't have a previous command to add.
 29.4078 +		eval concat_cmds=\"$reload_cmds $objlist $last_robj\"
 29.4079 +	      else
 29.4080 +		# All subsequent reloadable object files will link in
 29.4081 +		# the last one created.
 29.4082 +		eval concat_cmds=\"\$concat_cmds~$reload_cmds $objlist $last_robj\"
 29.4083 +	      fi
 29.4084 +	      last_robj=$output_objdir/$output_la-${k}.$objext
 29.4085 +	      k=`expr $k + 1`
 29.4086 +	      output=$output_objdir/$output_la-${k}.$objext
 29.4087 +	      objlist=$obj
 29.4088 +	      len=1
 29.4089 +	    fi
 29.4090 +	  done
 29.4091 +	  # Handle the remaining objects by creating one last
 29.4092 +	  # reloadable object file.  All subsequent reloadable object
 29.4093 +	  # files will link in the last one created.
 29.4094 +	  test -z "$concat_cmds" || concat_cmds=$concat_cmds~
 29.4095 +	  eval concat_cmds=\"\${concat_cmds}$reload_cmds $objlist $last_robj\"
 29.4096 +
 29.4097 +	  if ${skipped_export-false}; then
 29.4098 +	    $show "generating symbol list for \`$libname.la'"
 29.4099 +	    export_symbols="$output_objdir/$libname.exp"
 29.4100 +	    $run $rm $export_symbols
 29.4101 +	    libobjs=$output
 29.4102 +	    # Append the command to create the export file.
 29.4103 +	    eval concat_cmds=\"\$concat_cmds~$export_symbols_cmds\"
 29.4104 +          fi
 29.4105 +
 29.4106 +	  # Set up a command to remove the reloadable object files
 29.4107 +	  # after they are used.
 29.4108 +	  i=0
 29.4109 +	  while test "$i" -lt "$k"
 29.4110 +	  do
 29.4111 +	    i=`expr $i + 1`
 29.4112 +	    delfiles="$delfiles $output_objdir/$output_la-${i}.$objext"
 29.4113 +	  done
 29.4114 +
 29.4115 +	  $echo "creating a temporary reloadable object file: $output"
 29.4116 +
 29.4117 +	  # Loop through the commands generated above and execute them.
 29.4118 +	  save_ifs="$IFS"; IFS='~'
 29.4119 +	  for cmd in $concat_cmds; do
 29.4120 +	    IFS="$save_ifs"
 29.4121 +	    $show "$cmd"
 29.4122 +	    $run eval "$cmd" || exit $?
 29.4123 +	  done
 29.4124 +	  IFS="$save_ifs"
 29.4125 +
 29.4126 +	  libobjs=$output
 29.4127 +	  # Restore the value of output.
 29.4128 +	  output=$save_output
 29.4129 +
 29.4130 +	  if test -n "$convenience" && test -n "$whole_archive_flag_spec"; then
 29.4131 +	    eval libobjs=\"\$libobjs $whole_archive_flag_spec\"
 29.4132 +	  fi
 29.4133 +	  # Expand the library linking commands again to reset the
 29.4134 +	  # value of $libobjs for piecewise linking.
 29.4135 +
 29.4136 +	  # Do each of the archive commands.
 29.4137 +	  if test "$module" = yes && test -n "$module_cmds" ; then
 29.4138 +	    if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then
 29.4139 +	      cmds=$module_expsym_cmds
 29.4140 +	    else
 29.4141 +	      cmds=$module_cmds
 29.4142 +	    fi
 29.4143 +	  else
 29.4144 +	  if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then
 29.4145 +	    cmds=$archive_expsym_cmds
 29.4146 +	  else
 29.4147 +	    cmds=$archive_cmds
 29.4148 +	    fi
 29.4149 +	  fi
 29.4150 +
 29.4151 +	  # Append the command to remove the reloadable object files
 29.4152 +	  # to the just-reset $cmds.
 29.4153 +	  eval cmds=\"\$cmds~\$rm $delfiles\"
 29.4154 +	fi
 29.4155 +	save_ifs="$IFS"; IFS='~'
 29.4156 +	for cmd in $cmds; do
 29.4157 +	  IFS="$save_ifs"
 29.4158 +	  eval cmd=\"$cmd\"
 29.4159 +	  $show "$cmd"
 29.4160 +	  $run eval "$cmd" || {
 29.4161 +	    lt_exit=$?
 29.4162 +
 29.4163 +	    # Restore the uninstalled library and exit
 29.4164 +	    if test "$mode" = relink; then
 29.4165 +	      $run eval '(cd $output_objdir && $rm ${realname}T && $mv ${realname}U $realname)'
 29.4166 +	    fi
 29.4167 +
 29.4168 +	    exit $lt_exit
 29.4169 +	  }
 29.4170 +	done
 29.4171 +	IFS="$save_ifs"
 29.4172 +
 29.4173 +	# Restore the uninstalled library and exit
 29.4174 +	if test "$mode" = relink; then
 29.4175 +	  $run eval '(cd $output_objdir && $rm ${realname}T && $mv $realname ${realname}T && $mv "$realname"U $realname)' || exit $?
 29.4176 +
 29.4177 +	  if test -n "$convenience"; then
 29.4178 +	    if test -z "$whole_archive_flag_spec"; then
 29.4179 +	      $show "${rm}r $gentop"
 29.4180 +	      $run ${rm}r "$gentop"
 29.4181 +	    fi
 29.4182 +	  fi
 29.4183 +
 29.4184 +	  exit $EXIT_SUCCESS
 29.4185 +	fi
 29.4186 +
 29.4187 +	# Create links to the real library.
 29.4188 +	for linkname in $linknames; do
 29.4189 +	  if test "$realname" != "$linkname"; then
 29.4190 +	    $show "(cd $output_objdir && $rm $linkname && $LN_S $realname $linkname)"
 29.4191 +	    $run eval '(cd $output_objdir && $rm $linkname && $LN_S $realname $linkname)' || exit $?
 29.4192 +	  fi
 29.4193 +	done
 29.4194 +
 29.4195 +	# If -module or -export-dynamic was specified, set the dlname.
 29.4196 +	if test "$module" = yes || test "$export_dynamic" = yes; then
 29.4197 +	  # On all known operating systems, these are identical.
 29.4198 +	  dlname="$soname"
 29.4199 +	fi
 29.4200 +      fi
 29.4201 +      ;;
 29.4202 +
 29.4203 +    obj)
 29.4204 +      if test -n "$deplibs"; then
 29.4205 +	$echo "$modename: warning: \`-l' and \`-L' are ignored for objects" 1>&2
 29.4206 +      fi
 29.4207 +
 29.4208 +      if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then
 29.4209 +	$echo "$modename: warning: \`-dlopen' is ignored for objects" 1>&2
 29.4210 +      fi
 29.4211 +
 29.4212 +      if test -n "$rpath"; then
 29.4213 +	$echo "$modename: warning: \`-rpath' is ignored for objects" 1>&2
 29.4214 +      fi
 29.4215 +
 29.4216 +      if test -n "$xrpath"; then
 29.4217 +	$echo "$modename: warning: \`-R' is ignored for objects" 1>&2
 29.4218 +      fi
 29.4219 +
 29.4220 +      if test -n "$vinfo"; then
 29.4221 +	$echo "$modename: warning: \`-version-info' is ignored for objects" 1>&2
 29.4222 +      fi
 29.4223 +
 29.4224 +      if test -n "$release"; then
 29.4225 +	$echo "$modename: warning: \`-release' is ignored for objects" 1>&2
 29.4226 +      fi
 29.4227 +
 29.4228 +      case $output in
 29.4229 +      *.lo)
 29.4230 +	if test -n "$objs$old_deplibs"; then
 29.4231 +	  $echo "$modename: cannot build library object \`$output' from non-libtool objects" 1>&2
 29.4232 +	  exit $EXIT_FAILURE
 29.4233 +	fi
 29.4234 +	libobj="$output"
 29.4235 +	obj=`$echo "X$output" | $Xsed -e "$lo2o"`
 29.4236 +	;;
 29.4237 +      *)
 29.4238 +	libobj=
 29.4239 +	obj="$output"
 29.4240 +	;;
 29.4241 +      esac
 29.4242 +
 29.4243 +      # Delete the old objects.
 29.4244 +      $run $rm $obj $libobj
 29.4245 +
 29.4246 +      # Objects from convenience libraries.  This assumes
 29.4247 +      # single-version convenience libraries.  Whenever we create
 29.4248 +      # different ones for PIC/non-PIC, this we'll have to duplicate
 29.4249 +      # the extraction.
 29.4250 +      reload_conv_objs=
 29.4251 +      gentop=
 29.4252 +      # reload_cmds runs $LD directly, so let us get rid of
 29.4253 +      # -Wl from whole_archive_flag_spec
 29.4254 +      wl=
 29.4255 +
 29.4256 +      if test -n "$convenience"; then
 29.4257 +	if test -n "$whole_archive_flag_spec"; then
 29.4258 +	  eval reload_conv_objs=\"\$reload_objs $whole_archive_flag_spec\"
 29.4259 +	else
 29.4260 +	  gentop="$output_objdir/${obj}x"
 29.4261 +	  generated="$generated $gentop"
 29.4262 +
 29.4263 +	  func_extract_archives $gentop $convenience
 29.4264 +	  reload_conv_objs="$reload_objs $func_extract_archives_result"
 29.4265 +	fi
 29.4266 +      fi
 29.4267 +
 29.4268 +      # Create the old-style object.
 29.4269 +      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
 29.4270 +
 29.4271 +      output="$obj"
 29.4272 +      cmds=$reload_cmds
 29.4273 +      save_ifs="$IFS"; IFS='~'
 29.4274 +      for cmd in $cmds; do
 29.4275 +	IFS="$save_ifs"
 29.4276 +	eval cmd=\"$cmd\"
 29.4277 +	$show "$cmd"
 29.4278 +	$run eval "$cmd" || exit $?
 29.4279 +      done
 29.4280 +      IFS="$save_ifs"
 29.4281 +
 29.4282 +      # Exit if we aren't doing a library object file.
 29.4283 +      if test -z "$libobj"; then
 29.4284 +	if test -n "$gentop"; then
 29.4285 +	  $show "${rm}r $gentop"
 29.4286 +	  $run ${rm}r $gentop
 29.4287 +	fi
 29.4288 +
 29.4289 +	exit $EXIT_SUCCESS
 29.4290 +      fi
 29.4291 +
 29.4292 +      if test "$build_libtool_libs" != yes; then
 29.4293 +	if test -n "$gentop"; then
 29.4294 +	  $show "${rm}r $gentop"
 29.4295 +	  $run ${rm}r $gentop
 29.4296 +	fi
 29.4297 +
 29.4298 +	# Create an invalid libtool object if no PIC, so that we don't
 29.4299 +	# accidentally link it into a program.
 29.4300 +	# $show "echo timestamp > $libobj"
 29.4301 +	# $run eval "echo timestamp > $libobj" || exit $?
 29.4302 +	exit $EXIT_SUCCESS
 29.4303 +      fi
 29.4304 +
 29.4305 +      if test -n "$pic_flag" || test "$pic_mode" != default; then
 29.4306 +	# Only do commands if we really have different PIC objects.
 29.4307 +	reload_objs="$libobjs $reload_conv_objs"
 29.4308 +	output="$libobj"
 29.4309 +	cmds=$reload_cmds
 29.4310 +	save_ifs="$IFS"; IFS='~'
 29.4311 +	for cmd in $cmds; do
 29.4312 +	  IFS="$save_ifs"
 29.4313 +	  eval cmd=\"$cmd\"
 29.4314 +	  $show "$cmd"
 29.4315 +	  $run eval "$cmd" || exit $?
 29.4316 +	done
 29.4317 +	IFS="$save_ifs"
 29.4318 +      fi
 29.4319 +
 29.4320 +      if test -n "$gentop"; then
 29.4321 +	$show "${rm}r $gentop"
 29.4322 +	$run ${rm}r $gentop
 29.4323 +      fi
 29.4324 +
 29.4325 +      exit $EXIT_SUCCESS
 29.4326 +      ;;
 29.4327 +
 29.4328 +    prog)
 29.4329 +      case $host in
 29.4330 +	*cygwin*) output=`$echo $output | ${SED} -e 's,.exe$,,;s,$,.exe,'` ;;
 29.4331 +      esac
 29.4332 +      if test -n "$vinfo"; then
 29.4333 +	$echo "$modename: warning: \`-version-info' is ignored for programs" 1>&2
 29.4334 +      fi
 29.4335 +
 29.4336 +      if test -n "$release"; then
 29.4337 +	$echo "$modename: warning: \`-release' is ignored for programs" 1>&2
 29.4338 +      fi
 29.4339 +
 29.4340 +      if test "$preload" = yes; then
 29.4341 +	if test "$dlopen_support" = unknown && test "$dlopen_self" = unknown &&
 29.4342 +	   test "$dlopen_self_static" = unknown; then
 29.4343 +	  $echo "$modename: warning: \`AC_LIBTOOL_DLOPEN' not used. Assuming no dlopen support."
 29.4344 +	fi
 29.4345 +      fi
 29.4346 +
 29.4347 +      case $host in
 29.4348 +      *-*-rhapsody* | *-*-darwin1.[012])
 29.4349 +	# On Rhapsody replace the C library is the System framework
 29.4350 +	compile_deplibs=`$echo "X $compile_deplibs" | $Xsed -e 's/ -lc / -framework System /'`
 29.4351 +	finalize_deplibs=`$echo "X $finalize_deplibs" | $Xsed -e 's/ -lc / -framework System /'`
 29.4352 +	;;
 29.4353 +      esac
 29.4354 +
 29.4355 +      case $host in
 29.4356 +      *darwin*)
 29.4357 +        # Don't allow lazy linking, it breaks C++ global constructors
 29.4358 +        if test "$tagname" = CXX ; then
 29.4359 +        compile_command="$compile_command ${wl}-bind_at_load"
 29.4360 +        finalize_command="$finalize_command ${wl}-bind_at_load"
 29.4361 +        fi
 29.4362 +        ;;
 29.4363 +      esac
 29.4364 +
 29.4365 +
 29.4366 +      # move library search paths that coincide with paths to not yet
 29.4367 +      # installed libraries to the beginning of the library search list
 29.4368 +      new_libs=
 29.4369 +      for path in $notinst_path; do
 29.4370 +	case " $new_libs " in
 29.4371 +	*" -L$path/$objdir "*) ;;
 29.4372 +	*)
 29.4373 +	  case " $compile_deplibs " in
 29.4374 +	  *" -L$path/$objdir "*)
 29.4375 +	    new_libs="$new_libs -L$path/$objdir" ;;
 29.4376 +	  esac
 29.4377 +	  ;;
 29.4378 +	esac
 29.4379 +      done
 29.4380 +      for deplib in $compile_deplibs; do
 29.4381 +	case $deplib in
 29.4382 +	-L*)
 29.4383 +	  case " $new_libs " in
 29.4384 +	  *" $deplib "*) ;;
 29.4385 +	  *) new_libs="$new_libs $deplib" ;;
 29.4386 +	  esac
 29.4387 +	  ;;
 29.4388 +	*) new_libs="$new_libs $deplib" ;;
 29.4389 +	esac
 29.4390 +      done
 29.4391 +      compile_deplibs="$new_libs"
 29.4392 +
 29.4393 +
 29.4394 +      compile_command="$compile_command $compile_deplibs"
 29.4395 +      finalize_command="$finalize_command $finalize_deplibs"
 29.4396 +
 29.4397 +      if test -n "$rpath$xrpath"; then
 29.4398 +	# If the user specified any rpath flags, then add them.
 29.4399 +	for libdir in $rpath $xrpath; do
 29.4400 +	  # This is the magic to use -rpath.
 29.4401 +	  case "$finalize_rpath " in
 29.4402 +	  *" $libdir "*) ;;
 29.4403 +	  *) finalize_rpath="$finalize_rpath $libdir" ;;
 29.4404 +	  esac
 29.4405 +	done
 29.4406 +      fi
 29.4407 +
 29.4408 +      # Now hardcode the library paths
 29.4409 +      rpath=
 29.4410 +      hardcode_libdirs=
 29.4411 +      for libdir in $compile_rpath $finalize_rpath; do
 29.4412 +	if test -n "$hardcode_libdir_flag_spec"; then
 29.4413 +	  if test -n "$hardcode_libdir_separator"; then
 29.4414 +	    if test -z "$hardcode_libdirs"; then
 29.4415 +	      hardcode_libdirs="$libdir"
 29.4416 +	    else
 29.4417 +	      # Just accumulate the unique libdirs.
 29.4418 +	      case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in
 29.4419 +	      *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*)
 29.4420 +		;;
 29.4421 +	      *)
 29.4422 +		hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir"
 29.4423 +		;;
 29.4424 +	      esac
 29.4425 +	    fi
 29.4426 +	  else
 29.4427 +	    eval flag=\"$hardcode_libdir_flag_spec\"
 29.4428 +	    rpath="$rpath $flag"
 29.4429 +	  fi
 29.4430 +	elif test -n "$runpath_var"; then
 29.4431 +	  case "$perm_rpath " in
 29.4432 +	  *" $libdir "*) ;;
 29.4433 +	  *) perm_rpath="$perm_rpath $libdir" ;;
 29.4434 +	  esac
 29.4435 +	fi
 29.4436 +	case $host in
 29.4437 +	*-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2*)
 29.4438 +	  testbindir=`$echo "X$libdir" | $Xsed -e 's*/lib$*/bin*'`
 29.4439 +	  case :$dllsearchpath: in
 29.4440 +	  *":$libdir:"*) ;;
 29.4441 +	  *) dllsearchpath="$dllsearchpath:$libdir";;
 29.4442 +	  esac
 29.4443 +	  case :$dllsearchpath: in
 29.4444 +	  *":$testbindir:"*) ;;
 29.4445 +	  *) dllsearchpath="$dllsearchpath:$testbindir";;
 29.4446 +	  esac
 29.4447 +	  ;;
 29.4448 +	esac
 29.4449 +      done
 29.4450 +      # Substitute the hardcoded libdirs into the rpath.
 29.4451 +      if test -n "$hardcode_libdir_separator" &&
 29.4452 +	 test -n "$hardcode_libdirs"; then
 29.4453 +	libdir="$hardcode_libdirs"
 29.4454 +	eval rpath=\" $hardcode_libdir_flag_spec\"
 29.4455 +      fi
 29.4456 +      compile_rpath="$rpath"
 29.4457 +
 29.4458 +      rpath=
 29.4459 +      hardcode_libdirs=
 29.4460 +      for libdir in $finalize_rpath; do
 29.4461 +	if test -n "$hardcode_libdir_flag_spec"; then
 29.4462 +	  if test -n "$hardcode_libdir_separator"; then
 29.4463 +	    if test -z "$hardcode_libdirs"; then
 29.4464 +	      hardcode_libdirs="$libdir"
 29.4465 +	    else
 29.4466 +	      # Just accumulate the unique libdirs.
 29.4467 +	      case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in
 29.4468 +	      *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*)
 29.4469 +		;;
 29.4470 +	      *)
 29.4471 +		hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir"
 29.4472 +		;;
 29.4473 +	      esac
 29.4474 +	    fi
 29.4475 +	  else
 29.4476 +	    eval flag=\"$hardcode_libdir_flag_spec\"
 29.4477 +	    rpath="$rpath $flag"
 29.4478 +	  fi
 29.4479 +	elif test -n "$runpath_var"; then
 29.4480 +	  case "$finalize_perm_rpath " in
 29.4481 +	  *" $libdir "*) ;;
 29.4482 +	  *) finalize_perm_rpath="$finalize_perm_rpath $libdir" ;;
 29.4483 +	  esac
 29.4484 +	fi
 29.4485 +      done
 29.4486 +      # Substitute the hardcoded libdirs into the rpath.
 29.4487 +      if test -n "$hardcode_libdir_separator" &&
 29.4488 +	 test -n "$hardcode_libdirs"; then
 29.4489 +	libdir="$hardcode_libdirs"
 29.4490 +	eval rpath=\" $hardcode_libdir_flag_spec\"
 29.4491 +      fi
 29.4492 +      finalize_rpath="$rpath"
 29.4493 +
 29.4494 +      if test -n "$libobjs" && test "$build_old_libs" = yes; then
 29.4495 +	# Transform all the library objects into standard objects.
 29.4496 +	compile_command=`$echo "X$compile_command" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP`
 29.4497 +	finalize_command=`$echo "X$finalize_command" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP`
 29.4498 +      fi
 29.4499 +
 29.4500 +      dlsyms=
 29.4501 +      if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then
 29.4502 +	if test -n "$NM" && test -n "$global_symbol_pipe"; then
 29.4503 +	  dlsyms="${outputname}S.c"
 29.4504 +	else
 29.4505 +	  $echo "$modename: not configured to extract global symbols from dlpreopened files" 1>&2
 29.4506 +	fi
 29.4507 +      fi
 29.4508 +
 29.4509 +      if test -n "$dlsyms"; then
 29.4510 +	case $dlsyms in
 29.4511 +	"") ;;
 29.4512 +	*.c)
 29.4513 +	  # Discover the nlist of each of the dlfiles.
 29.4514 +	  nlist="$output_objdir/${outputname}.nm"
 29.4515 +
 29.4516 +	  $show "$rm $nlist ${nlist}S ${nlist}T"
 29.4517 +	  $run $rm "$nlist" "${nlist}S" "${nlist}T"
 29.4518 +
 29.4519 +	  # Parse the name list into a source file.
 29.4520 +	  $show "creating $output_objdir/$dlsyms"
 29.4521 +
 29.4522 +	  test -z "$run" && $echo > "$output_objdir/$dlsyms" "\
 29.4523 +/* $dlsyms - symbol resolution table for \`$outputname' dlsym emulation. */
 29.4524 +/* Generated by $PROGRAM - GNU $PACKAGE $VERSION$TIMESTAMP */
 29.4525 +
 29.4526 +#ifdef __cplusplus
 29.4527 +extern \"C\" {
 29.4528 +#endif
 29.4529 +
 29.4530 +/* Prevent the only kind of declaration conflicts we can make. */
 29.4531 +#define lt_preloaded_symbols some_other_symbol
 29.4532 +
 29.4533 +/* External symbol declarations for the compiler. */\
 29.4534 +"
 29.4535 +
 29.4536 +	  if test "$dlself" = yes; then
 29.4537 +	    $show "generating symbol list for \`$output'"
 29.4538 +
 29.4539 +	    test -z "$run" && $echo ': @PROGRAM@ ' > "$nlist"
 29.4540 +
 29.4541 +	    # Add our own program objects to the symbol list.
 29.4542 +	    progfiles=`$echo "X$objs$old_deplibs" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP`
 29.4543 +	    for arg in $progfiles; do
 29.4544 +	      $show "extracting global C symbols from \`$arg'"
 29.4545 +	      $run eval "$NM $arg | $global_symbol_pipe >> '$nlist'"
 29.4546 +	    done
 29.4547 +
 29.4548 +	    if test -n "$exclude_expsyms"; then
 29.4549 +	      $run eval '$EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T'
 29.4550 +	      $run eval '$mv "$nlist"T "$nlist"'
 29.4551 +	    fi
 29.4552 +
 29.4553 +	    if test -n "$export_symbols_regex"; then
 29.4554 +	      $run eval '$EGREP -e "$export_symbols_regex" "$nlist" > "$nlist"T'
 29.4555 +	      $run eval '$mv "$nlist"T "$nlist"'
 29.4556 +	    fi
 29.4557 +
 29.4558 +	    # Prepare the list of exported symbols
 29.4559 +	    if test -z "$export_symbols"; then
 29.4560 +	      export_symbols="$output_objdir/$outputname.exp"
 29.4561 +	      $run $rm $export_symbols
 29.4562 +	      $run eval "${SED} -n -e '/^: @PROGRAM@ $/d' -e 's/^.* \(.*\)$/\1/p' "'< "$nlist" > "$export_symbols"'
 29.4563 +              case $host in
 29.4564 +              *cygwin* | *mingw* )
 29.4565 +	        $run eval "echo EXPORTS "'> "$output_objdir/$outputname.def"'
 29.4566 +		$run eval 'cat "$export_symbols" >> "$output_objdir/$outputname.def"'
 29.4567 +                ;;
 29.4568 +              esac
 29.4569 +	    else
 29.4570 +	      $run eval "${SED} -e 's/\([].[*^$]\)/\\\\\1/g' -e 's/^/ /' -e 's/$/$/'"' < "$export_symbols" > "$output_objdir/$outputname.exp"'
 29.4571 +	      $run eval 'grep -f "$output_objdir/$outputname.exp" < "$nlist" > "$nlist"T'
 29.4572 +	      $run eval 'mv "$nlist"T "$nlist"'
 29.4573 +              case $host in
 29.4574 +              *cygwin* | *mingw* )
 29.4575 +	        $run eval "echo EXPORTS "'> "$output_objdir/$outputname.def"'
 29.4576 +		$run eval 'cat "$nlist" >> "$output_objdir/$outputname.def"'
 29.4577 +                ;;
 29.4578 +              esac
 29.4579 +	    fi
 29.4580 +	  fi
 29.4581 +
 29.4582 +	  for arg in $dlprefiles; do
 29.4583 +	    $show "extracting global C symbols from \`$arg'"
 29.4584 +	    name=`$echo "$arg" | ${SED} -e 's%^.*/%%'`
 29.4585 +	    $run eval '$echo ": $name " >> "$nlist"'
 29.4586 +	    $run eval "$NM $arg | $global_symbol_pipe >> '$nlist'"
 29.4587 +	  done
 29.4588 +
 29.4589 +	  if test -z "$run"; then
 29.4590 +	    # Make sure we have at least an empty file.
 29.4591 +	    test -f "$nlist" || : > "$nlist"
 29.4592 +
 29.4593 +	    if test -n "$exclude_expsyms"; then
 29.4594 +	      $EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T
 29.4595 +	      $mv "$nlist"T "$nlist"
 29.4596 +	    fi
 29.4597 +
 29.4598 +	    # Try sorting and uniquifying the output.
 29.4599 +	    if grep -v "^: " < "$nlist" |
 29.4600 +		if sort -k 3 </dev/null >/dev/null 2>&1; then
 29.4601 +		  sort -k 3
 29.4602 +		else
 29.4603 +		  sort +2
 29.4604 +		fi |
 29.4605 +		uniq > "$nlist"S; then
 29.4606 +	      :
 29.4607 +	    else
 29.4608 +	      grep -v "^: " < "$nlist" > "$nlist"S
 29.4609 +	    fi
 29.4610 +
 29.4611 +	    if test -f "$nlist"S; then
 29.4612 +	      eval "$global_symbol_to_cdecl"' < "$nlist"S >> "$output_objdir/$dlsyms"'
 29.4613 +	    else
 29.4614 +	      $echo '/* NONE */' >> "$output_objdir/$dlsyms"
 29.4615 +	    fi
 29.4616 +
 29.4617 +	    $echo >> "$output_objdir/$dlsyms" "\
 29.4618 +
 29.4619 +#undef lt_preloaded_symbols
 29.4620 +
 29.4621 +#if defined (__STDC__) && __STDC__
 29.4622 +# define lt_ptr void *
 29.4623 +#else
 29.4624 +# define lt_ptr char *
 29.4625 +# define const
 29.4626 +#endif
 29.4627 +
 29.4628 +/* The mapping between symbol names and symbols. */
 29.4629 +"
 29.4630 +
 29.4631 +	    case $host in
 29.4632 +	    *cygwin* | *mingw* )
 29.4633 +	  $echo >> "$output_objdir/$dlsyms" "\
 29.4634 +/* DATA imports from DLLs on WIN32 can't be const, because
 29.4635 +   runtime relocations are performed -- see ld's documentation
 29.4636 +   on pseudo-relocs */
 29.4637 +struct {
 29.4638 +"
 29.4639 +	      ;;
 29.4640 +	    * )
 29.4641 +	  $echo >> "$output_objdir/$dlsyms" "\
 29.4642 +const struct {
 29.4643 +"
 29.4644 +	      ;;
 29.4645 +	    esac
 29.4646 +
 29.4647 +
 29.4648 +	  $echo >> "$output_objdir/$dlsyms" "\
 29.4649 +  const char *name;
 29.4650 +  lt_ptr address;
 29.4651 +}
 29.4652 +lt_preloaded_symbols[] =
 29.4653 +{\
 29.4654 +"
 29.4655 +
 29.4656 +	    eval "$global_symbol_to_c_name_address" < "$nlist" >> "$output_objdir/$dlsyms"
 29.4657 +
 29.4658 +	    $echo >> "$output_objdir/$dlsyms" "\
 29.4659 +  {0, (lt_ptr) 0}
 29.4660 +};
 29.4661 +
 29.4662 +/* This works around a problem in FreeBSD linker */
 29.4663 +#ifdef FREEBSD_WORKAROUND
 29.4664 +static const void *lt_preloaded_setup() {
 29.4665 +  return lt_preloaded_symbols;
 29.4666 +}
 29.4667 +#endif
 29.4668 +
 29.4669 +#ifdef __cplusplus
 29.4670 +}
 29.4671 +#endif\
 29.4672 +"
 29.4673 +	  fi
 29.4674 +
 29.4675 +	  pic_flag_for_symtable=
 29.4676 +	  case $host in
 29.4677 +	  # compiling the symbol table file with pic_flag works around
 29.4678 +	  # a FreeBSD bug that causes programs to crash when -lm is
 29.4679 +	  # linked before any other PIC object.  But we must not use
 29.4680 +	  # pic_flag when linking with -static.  The problem exists in
 29.4681 +	  # FreeBSD 2.2.6 and is fixed in FreeBSD 3.1.
 29.4682 +	  *-*-freebsd2*|*-*-freebsd3.0*|*-*-freebsdelf3.0*)
 29.4683 +	    case "$compile_command " in
 29.4684 +	    *" -static "*) ;;
 29.4685 +	    *) pic_flag_for_symtable=" $pic_flag -DFREEBSD_WORKAROUND";;
 29.4686 +	    esac;;
 29.4687 +	  *-*-hpux*)
 29.4688 +	    case "$compile_command " in
 29.4689 +	    *" -static "*) ;;
 29.4690 +	    *) pic_flag_for_symtable=" $pic_flag";;
 29.4691 +	    esac
 29.4692 +	  esac
 29.4693 +
 29.4694 +	  # Now compile the dynamic symbol file.
 29.4695 +	  $show "(cd $output_objdir && $LTCC  $LTCFLAGS -c$no_builtin_flag$pic_flag_for_symtable \"$dlsyms\")"
 29.4696 +	  $run eval '(cd $output_objdir && $LTCC  $LTCFLAGS -c$no_builtin_flag$pic_flag_for_symtable "$dlsyms")' || exit $?
 29.4697 +
 29.4698 +	  # Clean up the generated files.
 29.4699 +	  $show "$rm $output_objdir/$dlsyms $nlist ${nlist}S ${nlist}T"
 29.4700 +	  $run $rm "$output_objdir/$dlsyms" "$nlist" "${nlist}S" "${nlist}T"
 29.4701 +
 29.4702 +	  # Transform the symbol file into the correct name.
 29.4703 +          case $host in
 29.4704 +          *cygwin* | *mingw* )
 29.4705 +            if test -f "$output_objdir/${outputname}.def" ; then
 29.4706 +              compile_command=`$echo "X$compile_command" | $Xsed -e "s%@SYMFILE@%$output_objdir/${outputname}.def $output_objdir/${outputname}S.${objext}%"`
 29.4707 +              finalize_command=`$echo "X$finalize_command" | $Xsed -e "s%@SYMFILE@%$output_objdir/${outputname}.def $output_objdir/${outputname}S.${objext}%"`
 29.4708 +            else
 29.4709 +              compile_command=`$echo "X$compile_command" | $Xsed -e "s%@SYMFILE@%$output_objdir/${outputname}S.${objext}%"`
 29.4710 +              finalize_command=`$echo "X$finalize_command" | $Xsed -e "s%@SYMFILE@%$output_objdir/${outputname}S.${objext}%"`
 29.4711 +             fi
 29.4712 +            ;;
 29.4713 +          * )
 29.4714 +            compile_command=`$echo "X$compile_command" | $Xsed -e "s%@SYMFILE@%$output_objdir/${outputname}S.${objext}%"`
 29.4715 +            finalize_command=`$echo "X$finalize_command" | $Xsed -e "s%@SYMFILE@%$output_objdir/${outputname}S.${objext}%"`
 29.4716 +            ;;
 29.4717 +          esac
 29.4718 +	  ;;
 29.4719 +	*)
 29.4720 +	  $echo "$modename: unknown suffix for \`$dlsyms'" 1>&2
 29.4721 +	  exit $EXIT_FAILURE
 29.4722 +	  ;;
 29.4723 +	esac
 29.4724 +      else
 29.4725 +	# We keep going just in case the user didn't refer to
 29.4726 +	# lt_preloaded_symbols.  The linker will fail if global_symbol_pipe
 29.4727 +	# really was required.
 29.4728 +
 29.4729 +	# Nullify the symbol file.
 29.4730 +	compile_command=`$echo "X$compile_command" | $Xsed -e "s% @SYMFILE@%%"`
 29.4731 +	finalize_command=`$echo "X$finalize_command" | $Xsed -e "s% @SYMFILE@%%"`
 29.4732 +      fi
 29.4733 +
 29.4734 +      if test "$need_relink" = no || test "$build_libtool_libs" != yes; then
 29.4735 +	# Replace the output file specification.
 29.4736 +	compile_command=`$echo "X$compile_command" | $Xsed -e 's%@OUTPUT@%'"$output"'%g'`
 29.4737 +	link_command="$compile_command$compile_rpath"
 29.4738 +
 29.4739 +	# We have no uninstalled library dependencies, so finalize right now.
 29.4740 +	$show "$link_command"
 29.4741 +	$run eval "$link_command"
 29.4742 +	exit_status=$?
 29.4743 +
 29.4744 +	# Delete the generated files.
 29.4745 +	if test -n "$dlsyms"; then
 29.4746 +	  $show "$rm $output_objdir/${outputname}S.${objext}"
 29.4747 +	  $run $rm "$output_objdir/${outputname}S.${objext}"
 29.4748 +	fi
 29.4749 +
 29.4750 +	exit $exit_status
 29.4751 +      fi
 29.4752 +
 29.4753 +      if test -n "$shlibpath_var"; then
 29.4754 +	# We should set the shlibpath_var
 29.4755 +	rpath=
 29.4756 +	for dir in $temp_rpath; do
 29.4757 +	  case $dir in
 29.4758 +	  [\\/]* | [A-Za-z]:[\\/]*)
 29.4759 +	    # Absolute path.
 29.4760 +	    rpath="$rpath$dir:"
 29.4761 +	    ;;
 29.4762 +	  *)
 29.4763 +	    # Relative path: add a thisdir entry.
 29.4764 +	    rpath="$rpath\$thisdir/$dir:"
 29.4765 +	    ;;
 29.4766 +	  esac
 29.4767 +	done
 29.4768 +	temp_rpath="$rpath"
 29.4769 +      fi
 29.4770 +
 29.4771 +      if test -n "$compile_shlibpath$finalize_shlibpath"; then
 29.4772 +	compile_command="$shlibpath_var=\"$compile_shlibpath$finalize_shlibpath\$$shlibpath_var\" $compile_command"
 29.4773 +      fi
 29.4774 +      if test -n "$finalize_shlibpath"; then
 29.4775 +	finalize_command="$shlibpath_var=\"$finalize_shlibpath\$$shlibpath_var\" $finalize_command"
 29.4776 +      fi
 29.4777 +
 29.4778 +      compile_var=
 29.4779 +      finalize_var=
 29.4780 +      if test -n "$runpath_var"; then
 29.4781 +	if test -n "$perm_rpath"; then
 29.4782 +	  # We should set the runpath_var.
 29.4783 +	  rpath=
 29.4784 +	  for dir in $perm_rpath; do
 29.4785 +	    rpath="$rpath$dir:"
 29.4786 +	  done
 29.4787 +	  compile_var="$runpath_var=\"$rpath\$$runpath_var\" "
 29.4788 +	fi
 29.4789 +	if test -n "$finalize_perm_rpath"; then
 29.4790 +	  # We should set the runpath_var.
 29.4791 +	  rpath=
 29.4792 +	  for dir in $finalize_perm_rpath; do
 29.4793 +	    rpath="$rpath$dir:"
 29.4794 +	  done
 29.4795 +	  finalize_var="$runpath_var=\"$rpath\$$runpath_var\" "
 29.4796 +	fi
 29.4797 +      fi
 29.4798 +
 29.4799 +      if test "$no_install" = yes; then
 29.4800 +	# We don't need to create a wrapper script.
 29.4801 +	link_command="$compile_var$compile_command$compile_rpath"
 29.4802 +	# Replace the output file specification.
 29.4803 +	link_command=`$echo "X$link_command" | $Xsed -e 's%@OUTPUT@%'"$output"'%g'`
 29.4804 +	# Delete the old output file.
 29.4805 +	$run $rm $output
 29.4806 +	# Link the executable and exit
 29.4807 +	$show "$link_command"
 29.4808 +	$run eval "$link_command" || exit $?
 29.4809 +	exit $EXIT_SUCCESS
 29.4810 +      fi
 29.4811 +
 29.4812 +      if test "$hardcode_action" = relink; then
 29.4813 +	# Fast installation is not supported
 29.4814 +	link_command="$compile_var$compile_command$compile_rpath"
 29.4815 +	relink_command="$finalize_var$finalize_command$finalize_rpath"
 29.4816 +
 29.4817 +	$echo "$modename: warning: this platform does not like uninstalled shared libraries" 1>&2
 29.4818 +	$echo "$modename: \`$output' will be relinked during installation" 1>&2
 29.4819 +      else
 29.4820 +	if test "$fast_install" != no; then
 29.4821 +	  link_command="$finalize_var$compile_command$finalize_rpath"
 29.4822 +	  if test "$fast_install" = yes; then
 29.4823 +	    relink_command=`$echo "X$compile_var$compile_command$compile_rpath" | $Xsed -e 's%@OUTPUT@%\$progdir/\$file%g'`
 29.4824 +	  else
 29.4825 +	    # fast_install is set to needless
 29.4826 +	    relink_command=
 29.4827 +	  fi
 29.4828 +	else
 29.4829 +	  link_command="$compile_var$compile_command$compile_rpath"
 29.4830 +	  relink_command="$finalize_var$finalize_command$finalize_rpath"
 29.4831 +	fi
 29.4832 +      fi
 29.4833 +
 29.4834 +      # Replace the output file specification.
 29.4835 +      link_command=`$echo "X$link_command" | $Xsed -e 's%@OUTPUT@%'"$output_objdir/$outputname"'%g'`
 29.4836 +
 29.4837 +      # Delete the old output files.
 29.4838 +      $run $rm $output $output_objdir/$outputname $output_objdir/lt-$outputname
 29.4839 +
 29.4840 +      $show "$link_command"
 29.4841 +      $run eval "$link_command" || exit $?
 29.4842 +
 29.4843 +      # Now create the wrapper script.
 29.4844 +      $show "creating $output"
 29.4845 +
 29.4846 +      # Quote the relink command for shipping.
 29.4847 +      if test -n "$relink_command"; then
 29.4848 +	# Preserve any variables that may affect compiler behavior
 29.4849 +	for var in $variables_saved_for_relink; do
 29.4850 +	  if eval test -z \"\${$var+set}\"; then
 29.4851 +	    relink_command="{ test -z \"\${$var+set}\" || unset $var || { $var=; export $var; }; }; $relink_command"
 29.4852 +	  elif eval var_value=\$$var; test -z "$var_value"; then
 29.4853 +	    relink_command="$var=; export $var; $relink_command"
 29.4854 +	  else
 29.4855 +	    var_value=`$echo "X$var_value" | $Xsed -e "$sed_quote_subst"`
 29.4856 +	    relink_command="$var=\"$var_value\"; export $var; $relink_command"
 29.4857 +	  fi
 29.4858 +	done
 29.4859 +	relink_command="(cd `pwd`; $relink_command)"
 29.4860 +	relink_command=`$echo "X$relink_command" | $Xsed -e "$sed_quote_subst"`
 29.4861 +      fi
 29.4862 +
 29.4863 +      # Quote $echo for shipping.
 29.4864 +      if test "X$echo" = "X$SHELL $progpath --fallback-echo"; then
 29.4865 +	case $progpath in
 29.4866 +	[\\/]* | [A-Za-z]:[\\/]*) qecho="$SHELL $progpath --fallback-echo";;
 29.4867 +	*) qecho="$SHELL `pwd`/$progpath --fallback-echo";;
 29.4868 +	esac
 29.4869 +	qecho=`$echo "X$qecho" | $Xsed -e "$sed_quote_subst"`
 29.4870 +      else
 29.4871 +	qecho=`$echo "X$echo" | $Xsed -e "$sed_quote_subst"`
 29.4872 +      fi
 29.4873 +
 29.4874 +      # Only actually do things if our run command is non-null.
 29.4875 +      if test -z "$run"; then
 29.4876 +	# win32 will think the script is a binary if it has
 29.4877 +	# a .exe suffix, so we strip it off here.
 29.4878 +	case $output in
 29.4879 +	  *.exe) output=`$echo $output|${SED} 's,.exe$,,'` ;;
 29.4880 +	esac
 29.4881 +	# test for cygwin because mv fails w/o .exe extensions
 29.4882 +	case $host in
 29.4883 +	  *cygwin*)
 29.4884 +	    exeext=.exe
 29.4885 +	    outputname=`$echo $outputname|${SED} 's,.exe$,,'` ;;
 29.4886 +	  *) exeext= ;;
 29.4887 +	esac
 29.4888 +	case $host in
 29.4889 +	  *cygwin* | *mingw* )
 29.4890 +            output_name=`basename $output`
 29.4891 +            output_path=`dirname $output`
 29.4892 +            cwrappersource="$output_path/$objdir/lt-$output_name.c"
 29.4893 +            cwrapper="$output_path/$output_name.exe"
 29.4894 +            $rm $cwrappersource $cwrapper
 29.4895 +            trap "$rm $cwrappersource $cwrapper; exit $EXIT_FAILURE" 1 2 15
 29.4896 +
 29.4897 +	    cat > $cwrappersource <<EOF
 29.4898 +
 29.4899 +/* $cwrappersource - temporary wrapper executable for $objdir/$outputname
 29.4900 +   Generated by $PROGRAM - GNU $PACKAGE $VERSION$TIMESTAMP
 29.4901 +
 29.4902 +   The $output program cannot be directly executed until all the libtool
 29.4903 +   libraries that it depends on are installed.
 29.4904 +
 29.4905 +   This wrapper executable should never be moved out of the build directory.
 29.4906 +   If it is, it will not operate correctly.
 29.4907 +
 29.4908 +   Currently, it simply execs the wrapper *script* "/bin/sh $output",
 29.4909 +   but could eventually absorb all of the scripts functionality and
 29.4910 +   exec $objdir/$outputname directly.
 29.4911 +*/
 29.4912 +EOF
 29.4913 +	    cat >> $cwrappersource<<"EOF"
 29.4914 +#include <stdio.h>
 29.4915 +#include <stdlib.h>
 29.4916 +#include <unistd.h>
 29.4917 +#include <malloc.h>
 29.4918 +#include <stdarg.h>
 29.4919 +#include <assert.h>
 29.4920 +#include <string.h>
 29.4921 +#include <ctype.h>
 29.4922 +#include <sys/stat.h>
 29.4923 +
 29.4924 +#if defined(PATH_MAX)
 29.4925 +# define LT_PATHMAX PATH_MAX
 29.4926 +#elif defined(MAXPATHLEN)
 29.4927 +# define LT_PATHMAX MAXPATHLEN
 29.4928 +#else
 29.4929 +# define LT_PATHMAX 1024
 29.4930 +#endif
 29.4931 +
 29.4932 +#ifndef DIR_SEPARATOR
 29.4933 +# define DIR_SEPARATOR '/'
 29.4934 +# define PATH_SEPARATOR ':'
 29.4935 +#endif
 29.4936 +
 29.4937 +#if defined (_WIN32) || defined (__MSDOS__) || defined (__DJGPP__) || \
 29.4938 +  defined (__OS2__)
 29.4939 +# define HAVE_DOS_BASED_FILE_SYSTEM
 29.4940 +# ifndef DIR_SEPARATOR_2
 29.4941 +#  define DIR_SEPARATOR_2 '\\'
 29.4942 +# endif
 29.4943 +# ifndef PATH_SEPARATOR_2
 29.4944 +#  define PATH_SEPARATOR_2 ';'
 29.4945 +# endif
 29.4946 +#endif
 29.4947 +
 29.4948 +#ifndef DIR_SEPARATOR_2
 29.4949 +# define IS_DIR_SEPARATOR(ch) ((ch) == DIR_SEPARATOR)
 29.4950 +#else /* DIR_SEPARATOR_2 */
 29.4951 +# define IS_DIR_SEPARATOR(ch) \
 29.4952 +        (((ch) == DIR_SEPARATOR) || ((ch) == DIR_SEPARATOR_2))
 29.4953 +#endif /* DIR_SEPARATOR_2 */
 29.4954 +
 29.4955 +#ifndef PATH_SEPARATOR_2
 29.4956 +# define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR)
 29.4957 +#else /* PATH_SEPARATOR_2 */
 29.4958 +# define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR_2)
 29.4959 +#endif /* PATH_SEPARATOR_2 */
 29.4960 +
 29.4961 +#define XMALLOC(type, num)      ((type *) xmalloc ((num) * sizeof(type)))
 29.4962 +#define XFREE(stale) do { \
 29.4963 +  if (stale) { free ((void *) stale); stale = 0; } \
 29.4964 +} while (0)
 29.4965 +
 29.4966 +/* -DDEBUG is fairly common in CFLAGS.  */
 29.4967 +#undef DEBUG
 29.4968 +#if defined DEBUGWRAPPER
 29.4969 +# define DEBUG(format, ...) fprintf(stderr, format, __VA_ARGS__)
 29.4970 +#else
 29.4971 +# define DEBUG(format, ...)
 29.4972 +#endif
 29.4973 +
 29.4974 +const char *program_name = NULL;
 29.4975 +
 29.4976 +void * xmalloc (size_t num);
 29.4977 +char * xstrdup (const char *string);
 29.4978 +const char * base_name (const char *name);
 29.4979 +char * find_executable(const char *wrapper);
 29.4980 +int    check_executable(const char *path);
 29.4981 +char * strendzap(char *str, const char *pat);
 29.4982 +void lt_fatal (const char *message, ...);
 29.4983 +
 29.4984 +int
 29.4985 +main (int argc, char *argv[])
 29.4986 +{
 29.4987 +  char **newargz;
 29.4988 +  int i;
 29.4989 +
 29.4990 +  program_name = (char *) xstrdup (base_name (argv[0]));
 29.4991 +  DEBUG("(main) argv[0]      : %s\n",argv[0]);
 29.4992 +  DEBUG("(main) program_name : %s\n",program_name);
 29.4993 +  newargz = XMALLOC(char *, argc+2);
 29.4994 +EOF
 29.4995 +
 29.4996 +            cat >> $cwrappersource <<EOF
 29.4997 +  newargz[0] = (char *) xstrdup("$SHELL");
 29.4998 +EOF
 29.4999 +
 29.5000 +            cat >> $cwrappersource <<"EOF"
 29.5001 +  newargz[1] = find_executable(argv[0]);
 29.5002 +  if (newargz[1] == NULL)
 29.5003 +    lt_fatal("Couldn't find %s", argv[0]);
 29.5004 +  DEBUG("(main) found exe at : %s\n",newargz[1]);
 29.5005 +  /* we know the script has the same name, without the .exe */
 29.5006 +  /* so make sure newargz[1] doesn't end in .exe */
 29.5007 +  strendzap(newargz[1],".exe");
 29.5008 +  for (i = 1; i < argc; i++)
 29.5009 +    newargz[i+1] = xstrdup(argv[i]);
 29.5010 +  newargz[argc+1] = NULL;
 29.5011 +
 29.5012 +  for (i=0; i<argc+1; i++)
 29.5013 +  {
 29.5014 +    DEBUG("(main) newargz[%d]   : %s\n",i,newargz[i]);
 29.5015 +    ;
 29.5016 +  }
 29.5017 +
 29.5018 +EOF
 29.5019 +
 29.5020 +            case $host_os in
 29.5021 +              mingw*)
 29.5022 +                cat >> $cwrappersource <<EOF
 29.5023 +  execv("$SHELL",(char const **)newargz);
 29.5024 +EOF
 29.5025 +              ;;
 29.5026 +              *)
 29.5027 +                cat >> $cwrappersource <<EOF
 29.5028 +  execv("$SHELL",newargz);
 29.5029 +EOF
 29.5030 +              ;;
 29.5031 +            esac
 29.5032 +
 29.5033 +            cat >> $cwrappersource <<"EOF"
 29.5034 +  return 127;
 29.5035 +}
 29.5036 +
 29.5037 +void *
 29.5038 +xmalloc (size_t num)
 29.5039 +{
 29.5040 +  void * p = (void *) malloc (num);
 29.5041 +  if (!p)
 29.5042 +    lt_fatal ("Memory exhausted");
 29.5043 +
 29.5044 +  return p;
 29.5045 +}
 29.5046 +
 29.5047 +char *
 29.5048 +xstrdup (const char *string)
 29.5049 +{
 29.5050 +  return string ? strcpy ((char *) xmalloc (strlen (string) + 1), string) : NULL
 29.5051 +;
 29.5052 +}
 29.5053 +
 29.5054 +const char *
 29.5055 +base_name (const char *name)
 29.5056 +{
 29.5057 +  const char *base;
 29.5058 +
 29.5059 +#if defined (HAVE_DOS_BASED_FILE_SYSTEM)
 29.5060 +  /* Skip over the disk name in MSDOS pathnames. */
 29.5061 +  if (isalpha ((unsigned char)name[0]) && name[1] == ':')
 29.5062 +    name += 2;
 29.5063 +#endif
 29.5064 +
 29.5065 +  for (base = name; *name; name++)
 29.5066 +    if (IS_DIR_SEPARATOR (*name))
 29.5067 +      base = name + 1;
 29.5068 +  return base;
 29.5069 +}
 29.5070 +
 29.5071 +int
 29.5072 +check_executable(const char * path)
 29.5073 +{
 29.5074 +  struct stat st;
 29.5075 +
 29.5076 +  DEBUG("(check_executable)  : %s\n", path ? (*path ? path : "EMPTY!") : "NULL!");
 29.5077 +  if ((!path) || (!*path))
 29.5078 +    return 0;
 29.5079 +
 29.5080 +  if ((stat (path, &st) >= 0) &&
 29.5081 +      (
 29.5082 +        /* MinGW & native WIN32 do not support S_IXOTH or S_IXGRP */
 29.5083 +#if defined (S_IXOTH)
 29.5084 +       ((st.st_mode & S_IXOTH) == S_IXOTH) ||
 29.5085 +#endif
 29.5086 +#if defined (S_IXGRP)
 29.5087 +       ((st.st_mode & S_IXGRP) == S_IXGRP) ||
 29.5088 +#endif
 29.5089 +       ((st.st_mode & S_IXUSR) == S_IXUSR))
 29.5090 +      )
 29.5091 +    return 1;
 29.5092 +  else
 29.5093 +    return 0;
 29.5094 +}
 29.5095 +
 29.5096 +/* Searches for the full path of the wrapper.  Returns
 29.5097 +   newly allocated full path name if found, NULL otherwise */
 29.5098 +char *
 29.5099 +find_executable (const char* wrapper)
 29.5100 +{
 29.5101 +  int has_slash = 0;
 29.5102 +  const char* p;
 29.5103 +  const char* p_next;
 29.5104 +  /* static buffer for getcwd */
 29.5105 +  char tmp[LT_PATHMAX + 1];
 29.5106 +  int tmp_len;
 29.5107 +  char* concat_name;
 29.5108 +
 29.5109 +  DEBUG("(find_executable)  : %s\n", wrapper ? (*wrapper ? wrapper : "EMPTY!") : "NULL!");
 29.5110 +
 29.5111 +  if ((wrapper == NULL) || (*wrapper == '\0'))
 29.5112 +    return NULL;
 29.5113 +
 29.5114 +  /* Absolute path? */
 29.5115 +#if defined (HAVE_DOS_BASED_FILE_SYSTEM)
 29.5116 +  if (isalpha ((unsigned char)wrapper[0]) && wrapper[1] == ':')
 29.5117 +  {
 29.5118 +    concat_name = xstrdup (wrapper);
 29.5119 +    if (check_executable(concat_name))
 29.5120 +      return concat_name;
 29.5121 +    XFREE(concat_name);
 29.5122 +  }
 29.5123 +  else
 29.5124 +  {
 29.5125 +#endif
 29.5126 +    if (IS_DIR_SEPARATOR (wrapper[0]))
 29.5127 +    {
 29.5128 +      concat_name = xstrdup (wrapper);
 29.5129 +      if (check_executable(concat_name))
 29.5130 +        return concat_name;
 29.5131 +      XFREE(concat_name);
 29.5132 +    }
 29.5133 +#if defined (HAVE_DOS_BASED_FILE_SYSTEM)
 29.5134 +  }
 29.5135 +#endif
 29.5136 +
 29.5137 +  for (p = wrapper; *p; p++)
 29.5138 +    if (*p == '/')
 29.5139 +    {
 29.5140 +      has_slash = 1;
 29.5141 +      break;
 29.5142 +    }
 29.5143 +  if (!has_slash)
 29.5144 +  {
 29.5145 +    /* no slashes; search PATH */
 29.5146 +    const char* path = getenv ("PATH");
 29.5147 +    if (path != NULL)
 29.5148 +    {
 29.5149 +      for (p = path; *p; p = p_next)
 29.5150 +      {
 29.5151 +        const char* q;
 29.5152 +        size_t p_len;
 29.5153 +        for (q = p; *q; q++)
 29.5154 +          if (IS_PATH_SEPARATOR(*q))
 29.5155 +            break;
 29.5156 +        p_len = q - p;
 29.5157 +        p_next = (*q == '\0' ? q : q + 1);
 29.5158 +        if (p_len == 0)
 29.5159 +        {
 29.5160 +          /* empty path: current directory */
 29.5161 +          if (getcwd (tmp, LT_PATHMAX) == NULL)
 29.5162 +            lt_fatal ("getcwd failed");
 29.5163 +          tmp_len = strlen(tmp);
 29.5164 +          concat_name = XMALLOC(char, tmp_len + 1 + strlen(wrapper) + 1);
 29.5165 +          memcpy (concat_name, tmp, tmp_len);
 29.5166 +          concat_name[tmp_len] = '/';
 29.5167 +          strcpy (concat_name + tmp_len + 1, wrapper);
 29.5168 +        }
 29.5169 +        else
 29.5170 +        {
 29.5171 +          concat_name = XMALLOC(char, p_len + 1 + strlen(wrapper) + 1);
 29.5172 +          memcpy (concat_name, p, p_len);
 29.5173 +          concat_name[p_len] = '/';
 29.5174 +          strcpy (concat_name + p_len + 1, wrapper);
 29.5175 +        }
 29.5176 +        if (check_executable(concat_name))
 29.5177 +          return concat_name;
 29.5178 +        XFREE(concat_name);
 29.5179 +      }
 29.5180 +    }
 29.5181 +    /* not found in PATH; assume curdir */
 29.5182 +  }
 29.5183 +  /* Relative path | not found in path: prepend cwd */
 29.5184 +  if (getcwd (tmp, LT_PATHMAX) == NULL)
 29.5185 +    lt_fatal ("getcwd failed");
 29.5186 +  tmp_len = strlen(tmp);
 29.5187 +  concat_name = XMALLOC(char, tmp_len + 1 + strlen(wrapper) + 1);
 29.5188 +  memcpy (concat_name, tmp, tmp_len);
 29.5189 +  concat_name[tmp_len] = '/';
 29.5190 +  strcpy (concat_name + tmp_len + 1, wrapper);
 29.5191 +
 29.5192 +  if (check_executable(concat_name))
 29.5193 +    return concat_name;
 29.5194 +  XFREE(concat_name);
 29.5195 +  return NULL;
 29.5196 +}
 29.5197 +
 29.5198 +char *
 29.5199 +strendzap(char *str, const char *pat)
 29.5200 +{
 29.5201 +  size_t len, patlen;
 29.5202 +
 29.5203 +  assert(str != NULL);
 29.5204 +  assert(pat != NULL);
 29.5205 +
 29.5206 +  len = strlen(str);
 29.5207 +  patlen = strlen(pat);
 29.5208 +
 29.5209 +  if (patlen <= len)
 29.5210 +  {
 29.5211 +    str += len - patlen;
 29.5212 +    if (strcmp(str, pat) == 0)
 29.5213 +      *str = '\0';
 29.5214 +  }
 29.5215 +  return str;
 29.5216 +}
 29.5217 +
 29.5218 +static void
 29.5219 +lt_error_core (int exit_status, const char * mode,
 29.5220 +          const char * message, va_list ap)
 29.5221 +{
 29.5222 +  fprintf (stderr, "%s: %s: ", program_name, mode);
 29.5223 +  vfprintf (stderr, message, ap);
 29.5224 +  fprintf (stderr, ".\n");
 29.5225 +
 29.5226 +  if (exit_status >= 0)
 29.5227 +    exit (exit_status);
 29.5228 +}
 29.5229 +
 29.5230 +void
 29.5231 +lt_fatal (const char *message, ...)
 29.5232 +{
 29.5233 +  va_list ap;
 29.5234 +  va_start (ap, message);
 29.5235 +  lt_error_core (EXIT_FAILURE, "FATAL", message, ap);
 29.5236 +  va_end (ap);
 29.5237 +}
 29.5238 +EOF
 29.5239 +          # we should really use a build-platform specific compiler
 29.5240 +          # here, but OTOH, the wrappers (shell script and this C one)
 29.5241 +          # are only useful if you want to execute the "real" binary.
 29.5242 +          # Since the "real" binary is built for $host, then this
 29.5243 +          # wrapper might as well be built for $host, too.
 29.5244 +          $run $LTCC $LTCFLAGS -s -o $cwrapper $cwrappersource
 29.5245 +          ;;
 29.5246 +        esac
 29.5247 +        $rm $output
 29.5248 +        trap "$rm $output; exit $EXIT_FAILURE" 1 2 15
 29.5249 +
 29.5250 +	$echo > $output "\
 29.5251 +#! $SHELL
 29.5252 +
 29.5253 +# $output - temporary wrapper script for $objdir/$outputname
 29.5254 +# Generated by $PROGRAM - GNU $PACKAGE $VERSION$TIMESTAMP
 29.5255 +#
 29.5256 +# The $output program cannot be directly executed until all the libtool
 29.5257 +# libraries that it depends on are installed.
 29.5258 +#
 29.5259 +# This wrapper script should never be moved out of the build directory.
 29.5260 +# If it is, it will not operate correctly.
 29.5261 +
 29.5262 +# Sed substitution that helps us do robust quoting.  It backslashifies
 29.5263 +# metacharacters that are still active within double-quoted strings.
 29.5264 +Xsed='${SED} -e 1s/^X//'
 29.5265 +sed_quote_subst='$sed_quote_subst'
 29.5266 +
 29.5267 +# The HP-UX ksh and POSIX shell print the target directory to stdout
 29.5268 +# if CDPATH is set.
 29.5269 +(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
 29.5270 +
 29.5271 +relink_command=\"$relink_command\"
 29.5272 +
 29.5273 +# This environment variable determines our operation mode.
 29.5274 +if test \"\$libtool_install_magic\" = \"$magic\"; then
 29.5275 +  # install mode needs the following variable:
 29.5276 +  notinst_deplibs='$notinst_deplibs'
 29.5277 +else
 29.5278 +  # When we are sourced in execute mode, \$file and \$echo are already set.
 29.5279 +  if test \"\$libtool_execute_magic\" != \"$magic\"; then
 29.5280 +    echo=\"$qecho\"
 29.5281 +    file=\"\$0\"
 29.5282 +    # Make sure echo works.
 29.5283 +    if test \"X\$1\" = X--no-reexec; then
 29.5284 +      # Discard the --no-reexec flag, and continue.
 29.5285 +      shift
 29.5286 +    elif test \"X\`(\$echo '\t') 2>/dev/null\`\" = 'X\t'; then
 29.5287 +      # Yippee, \$echo works!
 29.5288 +      :
 29.5289 +    else
 29.5290 +      # Restart under the correct shell, and then maybe \$echo will work.
 29.5291 +      exec $SHELL \"\$0\" --no-reexec \${1+\"\$@\"}
 29.5292 +    fi
 29.5293 +  fi\
 29.5294 +"
 29.5295 +	$echo >> $output "\
 29.5296 +
 29.5297 +  # Find the directory that this script lives in.
 29.5298 +  thisdir=\`\$echo \"X\$file\" | \$Xsed -e 's%/[^/]*$%%'\`
 29.5299 +  test \"x\$thisdir\" = \"x\$file\" && thisdir=.
 29.5300 +
 29.5301 +  # Follow symbolic links until we get to the real thisdir.
 29.5302 +  file=\`ls -ld \"\$file\" | ${SED} -n 's/.*-> //p'\`
 29.5303 +  while test -n \"\$file\"; do
 29.5304 +    destdir=\`\$echo \"X\$file\" | \$Xsed -e 's%/[^/]*\$%%'\`
 29.5305 +
 29.5306 +    # If there was a directory component, then change thisdir.
 29.5307 +    if test \"x\$destdir\" != \"x\$file\"; then
 29.5308 +      case \"\$destdir\" in
 29.5309 +      [\\\\/]* | [A-Za-z]:[\\\\/]*) thisdir=\"\$destdir\" ;;
 29.5310 +      *) thisdir=\"\$thisdir/\$destdir\" ;;
 29.5311 +      esac
 29.5312 +    fi
 29.5313 +
 29.5314 +    file=\`\$echo \"X\$file\" | \$Xsed -e 's%^.*/%%'\`
 29.5315 +    file=\`ls -ld \"\$thisdir/\$file\" | ${SED} -n 's/.*-> //p'\`
 29.5316 +  done
 29.5317 +
 29.5318 +  # Try to get the absolute directory name.
 29.5319 +  absdir=\`cd \"\$thisdir\" && pwd\`
 29.5320 +  test -n \"\$absdir\" && thisdir=\"\$absdir\"
 29.5321 +"
 29.5322 +
 29.5323 +	if test "$fast_install" = yes; then
 29.5324 +	  $echo >> $output "\
 29.5325 +  program=lt-'$outputname'$exeext
 29.5326 +  progdir=\"\$thisdir/$objdir\"
 29.5327 +
 29.5328 +  if test ! -f \"\$progdir/\$program\" || \\
 29.5329 +     { file=\`ls -1dt \"\$progdir/\$program\" \"\$progdir/../\$program\" 2>/dev/null | ${SED} 1q\`; \\
 29.5330 +       test \"X\$file\" != \"X\$progdir/\$program\"; }; then
 29.5331 +
 29.5332 +    file=\"\$\$-\$program\"
 29.5333 +
 29.5334 +    if test ! -d \"\$progdir\"; then
 29.5335 +      $mkdir \"\$progdir\"
 29.5336 +    else
 29.5337 +      $rm \"\$progdir/\$file\"
 29.5338 +    fi"
 29.5339 +
 29.5340 +	  $echo >> $output "\
 29.5341 +
 29.5342 +    # relink executable if necessary
 29.5343 +    if test -n \"\$relink_command\"; then
 29.5344 +      if relink_command_output=\`eval \$relink_command 2>&1\`; then :
 29.5345 +      else
 29.5346 +	$echo \"\$relink_command_output\" >&2
 29.5347 +	$rm \"\$progdir/\$file\"
 29.5348 +	exit $EXIT_FAILURE
 29.5349 +      fi
 29.5350 +    fi
 29.5351 +
 29.5352 +    $mv \"\$progdir/\$file\" \"\$progdir/\$program\" 2>/dev/null ||
 29.5353 +    { $rm \"\$progdir/\$program\";
 29.5354 +      $mv \"\$progdir/\$file\" \"\$progdir/\$program\"; }
 29.5355 +    $rm \"\$progdir/\$file\"
 29.5356 +  fi"
 29.5357 +	else
 29.5358 +	  $echo >> $output "\
 29.5359 +  program='$outputname'
 29.5360 +  progdir=\"\$thisdir/$objdir\"
 29.5361 +"
 29.5362 +	fi
 29.5363 +
 29.5364 +	$echo >> $output "\
 29.5365 +
 29.5366 +  if test -f \"\$progdir/\$program\"; then"
 29.5367 +
 29.5368 +	# Export our shlibpath_var if we have one.
 29.5369 +	if test "$shlibpath_overrides_runpath" = yes && test -n "$shlibpath_var" && test -n "$temp_rpath"; then
 29.5370 +	  $echo >> $output "\
 29.5371 +    # Add our own library path to $shlibpath_var
 29.5372 +    $shlibpath_var=\"$temp_rpath\$$shlibpath_var\"
 29.5373 +
 29.5374 +    # Some systems cannot cope with colon-terminated $shlibpath_var
 29.5375 +    # The second colon is a workaround for a bug in BeOS R4 sed
 29.5376 +    $shlibpath_var=\`\$echo \"X\$$shlibpath_var\" | \$Xsed -e 's/::*\$//'\`
 29.5377 +
 29.5378 +    export $shlibpath_var
 29.5379 +"
 29.5380 +	fi
 29.5381 +
 29.5382 +	# fixup the dll searchpath if we need to.
 29.5383 +	if test -n "$dllsearchpath"; then
 29.5384 +	  $echo >> $output "\
 29.5385 +    # Add the dll search path components to the executable PATH
 29.5386 +    PATH=$dllsearchpath:\$PATH
 29.5387 +"
 29.5388 +	fi
 29.5389 +
 29.5390 +	$echo >> $output "\
 29.5391 +    if test \"\$libtool_execute_magic\" != \"$magic\"; then
 29.5392 +      # Run the actual program with our arguments.
 29.5393 +"
 29.5394 +	case $host in
 29.5395 +	# Backslashes separate directories on plain windows
 29.5396 +	*-*-mingw | *-*-os2*)
 29.5397 +	  $echo >> $output "\
 29.5398 +      exec \"\$progdir\\\\\$program\" \${1+\"\$@\"}
 29.5399 +"
 29.5400 +	  ;;
 29.5401 +
 29.5402 +	*)
 29.5403 +	  $echo >> $output "\
 29.5404 +      exec \"\$progdir/\$program\" \${1+\"\$@\"}
 29.5405 +"
 29.5406 +	  ;;
 29.5407 +	esac
 29.5408 +	$echo >> $output "\
 29.5409 +      \$echo \"\$0: cannot exec \$program \${1+\"\$@\"}\"
 29.5410 +      exit $EXIT_FAILURE
 29.5411 +    fi
 29.5412 +  else
 29.5413 +    # The program doesn't exist.
 29.5414 +    \$echo \"\$0: error: \\\`\$progdir/\$program' does not exist\" 1>&2
 29.5415 +    \$echo \"This script is just a wrapper for \$program.\" 1>&2
 29.5416 +    $echo \"See the $PACKAGE documentation for more information.\" 1>&2
 29.5417 +    exit $EXIT_FAILURE
 29.5418 +  fi
 29.5419 +fi\
 29.5420 +"
 29.5421 +	chmod +x $output
 29.5422 +      fi
 29.5423 +      exit $EXIT_SUCCESS
 29.5424 +      ;;
 29.5425 +    esac
 29.5426 +
 29.5427 +    # See if we need to build an old-fashioned archive.
 29.5428 +    for oldlib in $oldlibs; do
 29.5429 +
 29.5430 +      if test "$build_libtool_libs" = convenience; then
 29.5431 +	oldobjs="$libobjs_save"
 29.5432 +	addlibs="$convenience"
 29.5433 +	build_libtool_libs=no
 29.5434 +      else
 29.5435 +	if test "$build_libtool_libs" = module; then
 29.5436 +	  oldobjs="$libobjs_save"
 29.5437 +	  build_libtool_libs=no
 29.5438 +	else
 29.5439 +	  oldobjs="$old_deplibs $non_pic_objects"
 29.5440 +	fi
 29.5441 +	addlibs="$old_convenience"
 29.5442 +      fi
 29.5443 +
 29.5444 +      if test -n "$addlibs"; then
 29.5445 +	gentop="$output_objdir/${outputname}x"
 29.5446 +	generated="$generated $gentop"
 29.5447 +
 29.5448 +	func_extract_archives $gentop $addlibs
 29.5449 +	oldobjs="$oldobjs $func_extract_archives_result"
 29.5450 +      fi
 29.5451 +
 29.5452 +      # Do each command in the archive commands.
 29.5453 +      if test -n "$old_archive_from_new_cmds" && test "$build_libtool_libs" = yes; then
 29.5454 +       cmds=$old_archive_from_new_cmds
 29.5455 +      else
 29.5456 +	# POSIX demands no paths to be encoded in archives.  We have
 29.5457 +	# to avoid creating archives with duplicate basenames if we
 29.5458 +	# might have to extract them afterwards, e.g., when creating a
 29.5459 +	# static archive out of a convenience library, or when linking
 29.5460 +	# the entirety of a libtool archive into another (currently
 29.5461 +	# not supported by libtool).
 29.5462 +	if (for obj in $oldobjs
 29.5463 +	    do
 29.5464 +	      $echo "X$obj" | $Xsed -e 's%^.*/%%'
 29.5465 +	    done | sort | sort -uc >/dev/null 2>&1); then
 29.5466 +	  :
 29.5467 +	else
 29.5468 +	  $echo "copying selected object files to avoid basename conflicts..."
 29.5469 +
 29.5470 +	  if test -z "$gentop"; then
 29.5471 +	    gentop="$output_objdir/${outputname}x"
 29.5472 +	    generated="$generated $gentop"
 29.5473 +
 29.5474 +	    $show "${rm}r $gentop"
 29.5475 +	    $run ${rm}r "$gentop"
 29.5476 +	    $show "$mkdir $gentop"
 29.5477 +	    $run $mkdir "$gentop"
 29.5478 +	    exit_status=$?
 29.5479 +	    if test "$exit_status" -ne 0 && test ! -d "$gentop"; then
 29.5480 +	      exit $exit_status
 29.5481 +	    fi
 29.5482 +	  fi
 29.5483 +
 29.5484 +	  save_oldobjs=$oldobjs
 29.5485 +	  oldobjs=
 29.5486 +	  counter=1
 29.5487 +	  for obj in $save_oldobjs
 29.5488 +	  do
 29.5489 +	    objbase=`$echo "X$obj" | $Xsed -e 's%^.*/%%'`
 29.5490 +	    case " $oldobjs " in
 29.5491 +	    " ") oldobjs=$obj ;;
 29.5492 +	    *[\ /]"$objbase "*)
 29.5493 +	      while :; do
 29.5494 +		# Make sure we don't pick an alternate name that also
 29.5495 +		# overlaps.
 29.5496 +		newobj=lt$counter-$objbase
 29.5497 +		counter=`expr $counter + 1`
 29.5498 +		case " $oldobjs " in
 29.5499 +		*[\ /]"$newobj "*) ;;
 29.5500 +		*) if test ! -f "$gentop/$newobj"; then break; fi ;;
 29.5501 +		esac
 29.5502 +	      done
 29.5503 +	      $show "ln $obj $gentop/$newobj || cp $obj $gentop/$newobj"
 29.5504 +	      $run ln "$obj" "$gentop/$newobj" ||
 29.5505 +	      $run cp "$obj" "$gentop/$newobj"
 29.5506 +	      oldobjs="$oldobjs $gentop/$newobj"
 29.5507 +	      ;;
 29.5508 +	    *) oldobjs="$oldobjs $obj" ;;
 29.5509 +	    esac
 29.5510 +	  done
 29.5511 +	fi
 29.5512 +
 29.5513 +	eval cmds=\"$old_archive_cmds\"
 29.5514 +
 29.5515 +	if len=`expr "X$cmds" : ".*"` &&
 29.5516 +	     test "$len" -le "$max_cmd_len" || test "$max_cmd_len" -le -1; then
 29.5517 +	  cmds=$old_archive_cmds
 29.5518 +	else
 29.5519 +	  # the command line is too long to link in one step, link in parts
 29.5520 +	  $echo "using piecewise archive linking..."
 29.5521 +	  save_RANLIB=$RANLIB
 29.5522 +	  RANLIB=:
 29.5523 +	  objlist=
 29.5524 +	  concat_cmds=
 29.5525 +	  save_oldobjs=$oldobjs
 29.5526 +
 29.5527 +	  # Is there a better way of finding the last object in the list?
 29.5528 +	  for obj in $save_oldobjs
 29.5529 +	  do
 29.5530 +	    last_oldobj=$obj
 29.5531 +	  done
 29.5532 +	  for obj in $save_oldobjs
 29.5533 +	  do
 29.5534 +	    oldobjs="$objlist $obj"
 29.5535 +	    objlist="$objlist $obj"
 29.5536 +	    eval test_cmds=\"$old_archive_cmds\"
 29.5537 +	    if len=`expr "X$test_cmds" : ".*" 2>/dev/null` &&
 29.5538 +	       test "$len" -le "$max_cmd_len"; then
 29.5539 +	      :
 29.5540 +	    else
 29.5541 +	      # the above command should be used before it gets too long
 29.5542 +	      oldobjs=$objlist
 29.5543 +	      if test "$obj" = "$last_oldobj" ; then
 29.5544 +	        RANLIB=$save_RANLIB
 29.5545 +	      fi
 29.5546 +	      test -z "$concat_cmds" || concat_cmds=$concat_cmds~
 29.5547 +	      eval concat_cmds=\"\${concat_cmds}$old_archive_cmds\"
 29.5548 +	      objlist=
 29.5549 +	    fi
 29.5550 +	  done
 29.5551 +	  RANLIB=$save_RANLIB
 29.5552 +	  oldobjs=$objlist
 29.5553 +	  if test "X$oldobjs" = "X" ; then
 29.5554 +	    eval cmds=\"\$concat_cmds\"
 29.5555 +	  else
 29.5556 +	    eval cmds=\"\$concat_cmds~\$old_archive_cmds\"
 29.5557 +	  fi
 29.5558 +	fi
 29.5559 +      fi
 29.5560 +      save_ifs="$IFS"; IFS='~'
 29.5561 +      for cmd in $cmds; do
 29.5562 +        eval cmd=\"$cmd\"
 29.5563 +	IFS="$save_ifs"
 29.5564 +	$show "$cmd"
 29.5565 +	$run eval "$cmd" || exit $?
 29.5566 +      done
 29.5567 +      IFS="$save_ifs"
 29.5568 +    done
 29.5569 +
 29.5570 +    if test -n "$generated"; then
 29.5571 +      $show "${rm}r$generated"
 29.5572 +      $run ${rm}r$generated
 29.5573 +    fi
 29.5574 +
 29.5575 +    # Now create the libtool archive.
 29.5576 +    case $output in
 29.5577 +    *.la)
 29.5578 +      old_library=
 29.5579 +      test "$build_old_libs" = yes && old_library="$libname.$libext"
 29.5580 +      $show "creating $output"
 29.5581 +
 29.5582 +      # Preserve any variables that may affect compiler behavior
 29.5583 +      for var in $variables_saved_for_relink; do
 29.5584 +	if eval test -z \"\${$var+set}\"; then
 29.5585 +	  relink_command="{ test -z \"\${$var+set}\" || unset $var || { $var=; export $var; }; }; $relink_command"
 29.5586 +	elif eval var_value=\$$var; test -z "$var_value"; then
 29.5587 +	  relink_command="$var=; export $var; $relink_command"
 29.5588 +	else
 29.5589 +	  var_value=`$echo "X$var_value" | $Xsed -e "$sed_quote_subst"`
 29.5590 +	  relink_command="$var=\"$var_value\"; export $var; $relink_command"
 29.5591 +	fi
 29.5592 +      done
 29.5593 +      # Quote the link command for shipping.
 29.5594 +      relink_command="(cd `pwd`; $SHELL $progpath $preserve_args --mode=relink $libtool_args @inst_prefix_dir@)"
 29.5595 +      relink_command=`$echo "X$relink_command" | $Xsed -e "$sed_quote_subst"`
 29.5596 +      if test "$hardcode_automatic" = yes ; then
 29.5597 +	relink_command=
 29.5598 +      fi
 29.5599 +
 29.5600 +
 29.5601 +      # Only create the output if not a dry run.
 29.5602 +      if test -z "$run"; then
 29.5603 +	for installed in no yes; do
 29.5604 +	  if test "$installed" = yes; then
 29.5605 +	    if test -z "$install_libdir"; then
 29.5606 +	      break
 29.5607 +	    fi
 29.5608 +	    output="$output_objdir/$outputname"i
 29.5609 +	    # Replace all uninstalled libtool libraries with the installed ones
 29.5610 +	    newdependency_libs=
 29.5611 +	    for deplib in $dependency_libs; do
 29.5612 +	      case $deplib in
 29.5613 +	      *.la)
 29.5614 +		name=`$echo "X$deplib" | $Xsed -e 's%^.*/%%'`
 29.5615 +		eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $deplib`
 29.5616 +		if test -z "$libdir"; then
 29.5617 +		  $echo "$modename: \`$deplib' is not a valid libtool archive" 1>&2
 29.5618 +		  exit $EXIT_FAILURE
 29.5619 +		fi
 29.5620 +		newdependency_libs="$newdependency_libs $libdir/$name"
 29.5621 +		;;
 29.5622 +	      *) newdependency_libs="$newdependency_libs $deplib" ;;
 29.5623 +	      esac
 29.5624 +	    done
 29.5625 +	    dependency_libs="$newdependency_libs"
 29.5626 +	    newdlfiles=
 29.5627 +	    for lib in $dlfiles; do
 29.5628 +	      name=`$echo "X$lib" | $Xsed -e 's%^.*/%%'`
 29.5629 +	      eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib`
 29.5630 +	      if test -z "$libdir"; then
 29.5631 +		$echo "$modename: \`$lib' is not a valid libtool archive" 1>&2
 29.5632 +		exit $EXIT_FAILURE
 29.5633 +	      fi
 29.5634 +	      newdlfiles="$newdlfiles $libdir/$name"
 29.5635 +	    done
 29.5636 +	    dlfiles="$newdlfiles"
 29.5637 +	    newdlprefiles=
 29.5638 +	    for lib in $dlprefiles; do
 29.5639 +	      name=`$echo "X$lib" | $Xsed -e 's%^.*/%%'`
 29.5640 +	      eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib`
 29.5641 +	      if test -z "$libdir"; then
 29.5642 +		$echo "$modename: \`$lib' is not a valid libtool archive" 1>&2
 29.5643 +		exit $EXIT_FAILURE
 29.5644 +	      fi
 29.5645 +	      newdlprefiles="$newdlprefiles $libdir/$name"
 29.5646 +	    done
 29.5647 +	    dlprefiles="$newdlprefiles"
 29.5648 +	  else
 29.5649 +	    newdlfiles=
 29.5650 +	    for lib in $dlfiles; do
 29.5651 +	      case $lib in
 29.5652 +		[\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;;
 29.5653 +		*) abs=`pwd`"/$lib" ;;
 29.5654 +	      esac
 29.5655 +	      newdlfiles="$newdlfiles $abs"
 29.5656 +	    done
 29.5657 +	    dlfiles="$newdlfiles"
 29.5658 +	    newdlprefiles=
 29.5659 +	    for lib in $dlprefiles; do
 29.5660 +	      case $lib in
 29.5661 +		[\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;;
 29.5662 +		*) abs=`pwd`"/$lib" ;;
 29.5663 +	      esac
 29.5664 +	      newdlprefiles="$newdlprefiles $abs"
 29.5665 +	    done
 29.5666 +	    dlprefiles="$newdlprefiles"
 29.5667 +	  fi
 29.5668 +	  $rm $output
 29.5669 +	  # place dlname in correct position for cygwin
 29.5670 +	  tdlname=$dlname
 29.5671 +	  case $host,$output,$installed,$module,$dlname in
 29.5672 +	    *cygwin*,*lai,yes,no,*.dll | *mingw*,*lai,yes,no,*.dll) tdlname=../bin/$dlname ;;
 29.5673 +	  esac
 29.5674 +	  $echo > $output "\
 29.5675 +# $outputname - a libtool library file
 29.5676 +# Generated by $PROGRAM - GNU $PACKAGE $VERSION$TIMESTAMP
 29.5677 +#
 29.5678 +# Please DO NOT delete this file!
 29.5679 +# It is necessary for linking the library.
 29.5680 +
 29.5681 +# The name that we can dlopen(3).
 29.5682 +dlname='$tdlname'
 29.5683 +
 29.5684 +# Names of this library.
 29.5685 +library_names='$library_names'
 29.5686 +
 29.5687 +# The name of the static archive.
 29.5688 +old_library='$old_library'
 29.5689 +
 29.5690 +# Libraries that this one depends upon.
 29.5691 +dependency_libs='$dependency_libs'
 29.5692 +
 29.5693 +# Version information for $libname.
 29.5694 +current=$current
 29.5695 +age=$age
 29.5696 +revision=$revision
 29.5697 +
 29.5698 +# Is this an already installed library?
 29.5699 +installed=$installed
 29.5700 +
 29.5701 +# Should we warn about portability when linking against -modules?
 29.5702 +shouldnotlink=$module
 29.5703 +
 29.5704 +# Files to dlopen/dlpreopen
 29.5705 +dlopen='$dlfiles'
 29.5706 +dlpreopen='$dlprefiles'
 29.5707 +
 29.5708 +# Directory that this library needs to be installed in:
 29.5709 +libdir='$install_libdir'"
 29.5710 +	  if test "$installed" = no && test "$need_relink" = yes; then
 29.5711 +	    $echo >> $output "\
 29.5712 +relink_command=\"$relink_command\""
 29.5713 +	  fi
 29.5714 +	done
 29.5715 +      fi
 29.5716 +
 29.5717 +      # Do a symbolic link so that the libtool archive can be found in
 29.5718 +      # LD_LIBRARY_PATH before the program is installed.
 29.5719 +      $show "(cd $output_objdir && $rm $outputname && $LN_S ../$outputname $outputname)"
 29.5720 +      $run eval '(cd $output_objdir && $rm $outputname && $LN_S ../$outputname $outputname)' || exit $?
 29.5721 +      ;;
 29.5722 +    esac
 29.5723 +    exit $EXIT_SUCCESS
 29.5724 +    ;;
 29.5725 +
 29.5726 +  # libtool install mode
 29.5727 +  install)
 29.5728 +    modename="$modename: install"
 29.5729 +
 29.5730 +    # There may be an optional sh(1) argument at the beginning of
 29.5731 +    # install_prog (especially on Windows NT).
 29.5732 +    if test "$nonopt" = "$SHELL" || test "$nonopt" = /bin/sh ||
 29.5733 +       # Allow the use of GNU shtool's install command.
 29.5734 +       $echo "X$nonopt" | grep shtool > /dev/null; then
 29.5735 +      # Aesthetically quote it.
 29.5736 +      arg=`$echo "X$nonopt" | $Xsed -e "$sed_quote_subst"`
 29.5737 +      case $arg in
 29.5738 +      *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \	]*|*]*|"")
 29.5739 +	arg="\"$arg\""
 29.5740 +	;;
 29.5741 +      esac
 29.5742 +      install_prog="$arg "
 29.5743 +      arg="$1"
 29.5744 +      shift
 29.5745 +    else
 29.5746 +      install_prog=
 29.5747 +      arg=$nonopt
 29.5748 +    fi
 29.5749 +
 29.5750 +    # The real first argument should be the name of the installation program.
 29.5751 +    # Aesthetically quote it.
 29.5752 +    arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"`
 29.5753 +    case $arg in
 29.5754 +    *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \	]*|*]*|"")
 29.5755 +      arg="\"$arg\""
 29.5756 +      ;;
 29.5757 +    esac
 29.5758 +    install_prog="$install_prog$arg"
 29.5759 +
 29.5760 +    # We need to accept at least all the BSD install flags.
 29.5761 +    dest=
 29.5762 +    files=
 29.5763 +    opts=
 29.5764 +    prev=
 29.5765 +    install_type=
 29.5766 +    isdir=no
 29.5767 +    stripme=
 29.5768 +    for arg
 29.5769 +    do
 29.5770 +      if test -n "$dest"; then
 29.5771 +	files="$files $dest"
 29.5772 +	dest=$arg
 29.5773 +	continue
 29.5774 +      fi
 29.5775 +
 29.5776 +      case $arg in
 29.5777 +      -d) isdir=yes ;;
 29.5778 +      -f) 
 29.5779 +      	case " $install_prog " in
 29.5780 +	*[\\\ /]cp\ *) ;;
 29.5781 +	*) prev=$arg ;;
 29.5782 +	esac
 29.5783 +	;;
 29.5784 +      -g | -m | -o) prev=$arg ;;
 29.5785 +      -s)
 29.5786 +	stripme=" -s"
 29.5787 +	continue
 29.5788 +	;;
 29.5789 +      -*)
 29.5790 +	;;
 29.5791 +      *)
 29.5792 +	# If the previous option needed an argument, then skip it.
 29.5793 +	if test -n "$prev"; then
 29.5794 +	  prev=
 29.5795 +	else
 29.5796 +	  dest=$arg
 29.5797 +	  continue
 29.5798 +	fi
 29.5799 +	;;
 29.5800 +      esac
 29.5801 +
 29.5802 +      # Aesthetically quote the argument.
 29.5803 +      arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"`
 29.5804 +      case $arg in
 29.5805 +      *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \	]*|*]*|"")
 29.5806 +	arg="\"$arg\""
 29.5807 +	;;
 29.5808 +      esac
 29.5809 +      install_prog="$install_prog $arg"
 29.5810 +    done
 29.5811 +
 29.5812 +    if test -z "$install_prog"; then
 29.5813 +      $echo "$modename: you must specify an install program" 1>&2
 29.5814 +      $echo "$help" 1>&2
 29.5815 +      exit $EXIT_FAILURE
 29.5816 +    fi
 29.5817 +
 29.5818 +    if test -n "$prev"; then
 29.5819 +      $echo "$modename: the \`$prev' option requires an argument" 1>&2
 29.5820 +      $echo "$help" 1>&2
 29.5821 +      exit $EXIT_FAILURE
 29.5822 +    fi
 29.5823 +
 29.5824 +    if test -z "$files"; then
 29.5825 +      if test -z "$dest"; then
 29.5826 +	$echo "$modename: no file or destination specified" 1>&2
 29.5827 +      else
 29.5828 +	$echo "$modename: you must specify a destination" 1>&2
 29.5829 +      fi
 29.5830 +      $echo "$help" 1>&2
 29.5831 +      exit $EXIT_FAILURE
 29.5832 +    fi
 29.5833 +
 29.5834 +    # Strip any trailing slash from the destination.
 29.5835 +    dest=`$echo "X$dest" | $Xsed -e 's%/$%%'`
 29.5836 +
 29.5837 +    # Check to see that the destination is a directory.
 29.5838 +    test -d "$dest" && isdir=yes
 29.5839 +    if test "$isdir" = yes; then
 29.5840 +      destdir="$dest"
 29.5841 +      destname=
 29.5842 +    else
 29.5843 +      destdir=`$echo "X$dest" | $Xsed -e 's%/[^/]*$%%'`
 29.5844 +      test "X$destdir" = "X$dest" && destdir=.
 29.5845 +      destname=`$echo "X$dest" | $Xsed -e 's%^.*/%%'`
 29.5846 +
 29.5847 +      # Not a directory, so check to see that there is only one file specified.
 29.5848 +      set dummy $files
 29.5849 +      if test "$#" -gt 2; then
 29.5850 +	$echo "$modename: \`$dest' is not a directory" 1>&2
 29.5851 +	$echo "$help" 1>&2
 29.5852 +	exit $EXIT_FAILURE
 29.5853 +      fi
 29.5854 +    fi
 29.5855 +    case $destdir in
 29.5856 +    [\\/]* | [A-Za-z]:[\\/]*) ;;
 29.5857 +    *)
 29.5858 +      for file in $files; do
 29.5859 +	case $file in
 29.5860 +	*.lo) ;;
 29.5861 +	*)
 29.5862 +	  $echo "$modename: \`$destdir' must be an absolute directory name" 1>&2
 29.5863 +	  $echo "$help" 1>&2
 29.5864 +	  exit $EXIT_FAILURE
 29.5865 +	  ;;
 29.5866 +	esac
 29.5867 +      done
 29.5868 +      ;;
 29.5869 +    esac
 29.5870 +
 29.5871 +    # This variable tells wrapper scripts just to set variables rather
 29.5872 +    # than running their programs.
 29.5873 +    libtool_install_magic="$magic"
 29.5874 +
 29.5875 +    staticlibs=
 29.5876 +    future_libdirs=
 29.5877 +    current_libdirs=
 29.5878 +    for file in $files; do
 29.5879 +
 29.5880 +      # Do each installation.
 29.5881 +      case $file in
 29.5882 +      *.$libext)
 29.5883 +	# Do the static libraries later.
 29.5884 +	staticlibs="$staticlibs $file"
 29.5885 +	;;
 29.5886 +
 29.5887 +      *.la)
 29.5888 +	# Check to see that this really is a libtool archive.
 29.5889 +	if (${SED} -e '2q' $file | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then :
 29.5890 +	else
 29.5891 +	  $echo "$modename: \`$file' is not a valid libtool archive" 1>&2
 29.5892 +	  $echo "$help" 1>&2
 29.5893 +	  exit $EXIT_FAILURE
 29.5894 +	fi
 29.5895 +
 29.5896 +	library_names=
 29.5897 +	old_library=
 29.5898 +	relink_command=
 29.5899 +	# If there is no directory component, then add one.
 29.5900 +	case $file in
 29.5901 +	*/* | *\\*) . $file ;;
 29.5902 +	*) . ./$file ;;
 29.5903 +	esac
 29.5904 +
 29.5905 +	# Add the libdir to current_libdirs if it is the destination.
 29.5906 +	if test "X$destdir" = "X$libdir"; then
 29.5907 +	  case "$current_libdirs " in
 29.5908 +	  *" $libdir "*) ;;
 29.5909 +	  *) current_libdirs="$current_libdirs $libdir" ;;
 29.5910 +	  esac
 29.5911 +	else
 29.5912 +	  # Note the libdir as a future libdir.
 29.5913 +	  case "$future_libdirs " in
 29.5914 +	  *" $libdir "*) ;;
 29.5915 +	  *) future_libdirs="$future_libdirs $libdir" ;;
 29.5916 +	  esac
 29.5917 +	fi
 29.5918 +
 29.5919 +	dir=`$echo "X$file" | $Xsed -e 's%/[^/]*$%%'`/
 29.5920 +	test "X$dir" = "X$file/" && dir=
 29.5921 +	dir="$dir$objdir"
 29.5922 +
 29.5923 +	if test -n "$relink_command"; then
 29.5924 +	  # Determine the prefix the user has applied to our future dir.
 29.5925 +	  inst_prefix_dir=`$echo "$destdir" | $SED "s%$libdir\$%%"`
 29.5926 +
 29.5927 +	  # Don't allow the user to place us outside of our expected
 29.5928 +	  # location b/c this prevents finding dependent libraries that
 29.5929 +	  # are installed to the same prefix.
 29.5930 +	  # At present, this check doesn't affect windows .dll's that
 29.5931 +	  # are installed into $libdir/../bin (currently, that works fine)
 29.5932 +	  # but it's something to keep an eye on.
 29.5933 +	  if test "$inst_prefix_dir" = "$destdir"; then
 29.5934 +	    $echo "$modename: error: cannot install \`$file' to a directory not ending in $libdir" 1>&2
 29.5935 +	    exit $EXIT_FAILURE
 29.5936 +	  fi
 29.5937 +
 29.5938 +	  if test -n "$inst_prefix_dir"; then
 29.5939 +	    # Stick the inst_prefix_dir data into the link command.
 29.5940 +	    relink_command=`$echo "$relink_command" | $SED "s%@inst_prefix_dir@%-inst-prefix-dir $inst_prefix_dir%"`
 29.5941 +	  else
 29.5942 +	    relink_command=`$echo "$relink_command" | $SED "s%@inst_prefix_dir@%%"`
 29.5943 +	  fi
 29.5944 +
 29.5945 +	  $echo "$modename: warning: relinking \`$file'" 1>&2
 29.5946 +	  $show "$relink_command"
 29.5947 +	  if $run eval "$relink_command"; then :
 29.5948 +	  else
 29.5949 +	    $echo "$modename: error: relink \`$file' with the above command before installing it" 1>&2
 29.5950 +	    exit $EXIT_FAILURE
 29.5951 +	  fi
 29.5952 +	fi
 29.5953 +
 29.5954 +	# See the names of the shared library.
 29.5955 +	set dummy $library_names
 29.5956 +	if test -n "$2"; then
 29.5957 +	  realname="$2"
 29.5958 +	  shift
 29.5959 +	  shift
 29.5960 +
 29.5961 +	  srcname="$realname"
 29.5962 +	  test -n "$relink_command" && srcname="$realname"T
 29.5963 +
 29.5964 +	  # Install the shared library and build the symlinks.
 29.5965 +	  $show "$install_prog $dir/$srcname $destdir/$realname"
 29.5966 +	  $run eval "$install_prog $dir/$srcname $destdir/$realname" || exit $?
 29.5967 +	  if test -n "$stripme" && test -n "$striplib"; then
 29.5968 +	    $show "$striplib $destdir/$realname"
 29.5969 +	    $run eval "$striplib $destdir/$realname" || exit $?
 29.5970 +	  fi
 29.5971 +
 29.5972 +	  if test "$#" -gt 0; then
 29.5973 +	    # Delete the old symlinks, and create new ones.
 29.5974 +	    # Try `ln -sf' first, because the `ln' binary might depend on
 29.5975 +	    # the symlink we replace!  Solaris /bin/ln does not understand -f,
 29.5976 +	    # so we also need to try rm && ln -s.
 29.5977 +	    for linkname
 29.5978 +	    do
 29.5979 +	      if test "$linkname" != "$realname"; then
 29.5980 +                $show "(cd $destdir && { $LN_S -f $realname $linkname || { $rm $linkname && $LN_S $realname $linkname; }; })"
 29.5981 +                $run eval "(cd $destdir && { $LN_S -f $realname $linkname || { $rm $linkname && $LN_S $realname $linkname; }; })"
 29.5982 +	      fi
 29.5983 +	    done
 29.5984 +	  fi
 29.5985 +
 29.5986 +	  # Do each command in the postinstall commands.
 29.5987 +	  lib="$destdir/$realname"
 29.5988 +	  cmds=$postinstall_cmds
 29.5989 +	  save_ifs="$IFS"; IFS='~'
 29.5990 +	  for cmd in $cmds; do
 29.5991 +	    IFS="$save_ifs"
 29.5992 +	    eval cmd=\"$cmd\"
 29.5993 +	    $show "$cmd"
 29.5994 +	    $run eval "$cmd" || {
 29.5995 +	      lt_exit=$?
 29.5996 +
 29.5997 +	      # Restore the uninstalled library and exit
 29.5998 +	      if test "$mode" = relink; then
 29.5999 +		$run eval '(cd $output_objdir && $rm ${realname}T && $mv ${realname}U $realname)'
 29.6000 +	      fi
 29.6001 +
 29.6002 +	      exit $lt_exit
 29.6003 +	    }
 29.6004 +	  done
 29.6005 +	  IFS="$save_ifs"
 29.6006 +	fi
 29.6007 +
 29.6008 +	# Install the pseudo-library for information purposes.
 29.6009 +	name=`$echo "X$file" | $Xsed -e 's%^.*/%%'`
 29.6010 +	instname="$dir/$name"i
 29.6011 +	$show "$install_prog $instname $destdir/$name"
 29.6012 +	$run eval "$install_prog $instname $destdir/$name" || exit $?
 29.6013 +
 29.6014 +	# Maybe install the static library, too.
 29.6015 +	test -n "$old_library" && staticlibs="$staticlibs $dir/$old_library"
 29.6016 +	;;
 29.6017 +
 29.6018 +      *.lo)
 29.6019 +	# Install (i.e. copy) a libtool object.
 29.6020 +
 29.6021 +	# Figure out destination file name, if it wasn't already specified.
 29.6022 +	if test -n "$destname"; then
 29.6023 +	  destfile="$destdir/$destname"
 29.6024 +	else
 29.6025 +	  destfile=`$echo "X$file" | $Xsed -e 's%^.*/%%'`
 29.6026 +	  destfile="$destdir/$destfile"
 29.6027 +	fi
 29.6028 +
 29.6029 +	# Deduce the name of the destination old-style object file.
 29.6030 +	case $destfile in
 29.6031 +	*.lo)
 29.6032 +	  staticdest=`$echo "X$destfile" | $Xsed -e "$lo2o"`
 29.6033 +	  ;;
 29.6034 +	*.$objext)
 29.6035 +	  staticdest="$destfile"
 29.6036 +	  destfile=
 29.6037 +	  ;;
 29.6038 +	*)
 29.6039 +	  $echo "$modename: cannot copy a libtool object to \`$destfile'" 1>&2
 29.6040 +	  $echo "$help" 1>&2
 29.6041 +	  exit $EXIT_FAILURE
 29.6042 +	  ;;
 29.6043 +	esac
 29.6044 +
 29.6045 +	# Install the libtool object if requested.
 29.6046 +	if test -n "$destfile"; then
 29.6047 +	  $show "$install_prog $file $destfile"
 29.6048 +	  $run eval "$install_prog $file $destfile" || exit $?
 29.6049 +	fi
 29.6050 +
 29.6051 +	# Install the old object if enabled.
 29.6052 +	if test "$build_old_libs" = yes; then
 29.6053 +	  # Deduce the name of the old-style object file.
 29.6054 +	  staticobj=`$echo "X$file" | $Xsed -e "$lo2o"`
 29.6055 +
 29.6056 +	  $show "$install_prog $staticobj $staticdest"
 29.6057 +	  $run eval "$install_prog \$staticobj \$staticdest" || exit $?
 29.6058 +	fi
 29.6059 +	exit $EXIT_SUCCESS
 29.6060 +	;;
 29.6061 +
 29.6062 +      *)
 29.6063 +	# Figure out destination file name, if it wasn't already specified.
 29.6064 +	if test -n "$destname"; then
 29.6065 +	  destfile="$destdir/$destname"
 29.6066 +	else
 29.6067 +	  destfile=`$echo "X$file" | $Xsed -e 's%^.*/%%'`
 29.6068 +	  destfile="$destdir/$destfile"
 29.6069 +	fi
 29.6070 +
 29.6071 +	# If the file is missing, and there is a .exe on the end, strip it
 29.6072 +	# because it is most likely a libtool script we actually want to
 29.6073 +	# install
 29.6074 +	stripped_ext=""
 29.6075 +	case $file in
 29.6076 +	  *.exe)
 29.6077 +	    if test ! -f "$file"; then
 29.6078 +	      file=`$echo $file|${SED} 's,.exe$,,'`
 29.6079 +	      stripped_ext=".exe"
 29.6080 +	    fi
 29.6081 +	    ;;
 29.6082 +	esac
 29.6083 +
 29.6084 +	# Do a test to see if this is really a libtool program.
 29.6085 +	case $host in
 29.6086 +	*cygwin*|*mingw*)
 29.6087 +	    wrapper=`$echo $file | ${SED} -e 's,.exe$,,'`
 29.6088 +	    ;;
 29.6089 +	*)
 29.6090 +	    wrapper=$file
 29.6091 +	    ;;
 29.6092 +	esac
 29.6093 +	if (${SED} -e '4q' $wrapper | grep "^# Generated by .*$PACKAGE")>/dev/null 2>&1; then
 29.6094 +	  notinst_deplibs=
 29.6095 +	  relink_command=
 29.6096 +
 29.6097 +	  # Note that it is not necessary on cygwin/mingw to append a dot to
 29.6098 +	  # foo even if both foo and FILE.exe exist: automatic-append-.exe
 29.6099 +	  # behavior happens only for exec(3), not for open(2)!  Also, sourcing
 29.6100 +	  # `FILE.' does not work on cygwin managed mounts.
 29.6101 +	  #
 29.6102 +	  # If there is no directory component, then add one.
 29.6103 +	  case $wrapper in
 29.6104 +	  */* | *\\*) . ${wrapper} ;;
 29.6105 +	  *) . ./${wrapper} ;;
 29.6106 +	  esac
 29.6107 +
 29.6108 +	  # Check the variables that should have been set.
 29.6109 +	  if test -z "$notinst_deplibs"; then
 29.6110 +	    $echo "$modename: invalid libtool wrapper script \`$wrapper'" 1>&2
 29.6111 +	    exit $EXIT_FAILURE
 29.6112 +	  fi
 29.6113 +
 29.6114 +	  finalize=yes
 29.6115 +	  for lib in $notinst_deplibs; do
 29.6116 +	    # Check to see that each library is installed.
 29.6117 +	    libdir=
 29.6118 +	    if test -f "$lib"; then
 29.6119 +	      # If there is no directory component, then add one.
 29.6120 +	      case $lib in
 29.6121 +	      */* | *\\*) . $lib ;;
 29.6122 +	      *) . ./$lib ;;
 29.6123 +	      esac
 29.6124 +	    fi
 29.6125 +	    libfile="$libdir/"`$echo "X$lib" | $Xsed -e 's%^.*/%%g'` ### testsuite: skip nested quoting test
 29.6126 +	    if test -n "$libdir" && test ! -f "$libfile"; then
 29.6127 +	      $echo "$modename: warning: \`$lib' has not been installed in \`$libdir'" 1>&2
 29.6128 +	      finalize=no
 29.6129 +	    fi
 29.6130 +	  done
 29.6131 +
 29.6132 +	  relink_command=
 29.6133 +	  # Note that it is not necessary on cygwin/mingw to append a dot to
 29.6134 +	  # foo even if both foo and FILE.exe exist: automatic-append-.exe
 29.6135 +	  # behavior happens only for exec(3), not for open(2)!  Also, sourcing
 29.6136 +	  # `FILE.' does not work on cygwin managed mounts.
 29.6137 +	  #
 29.6138 +	  # If there is no directory component, then add one.
 29.6139 +	  case $wrapper in
 29.6140 +	  */* | *\\*) . ${wrapper} ;;
 29.6141 +	  *) . ./${wrapper} ;;
 29.6142 +	  esac
 29.6143 +
 29.6144 +	  outputname=
 29.6145 +	  if test "$fast_install" = no && test -n "$relink_command"; then
 29.6146 +	    if test "$finalize" = yes && test -z "$run"; then
 29.6147 +	      tmpdir=`func_mktempdir`
 29.6148 +	      file=`$echo "X$file$stripped_ext" | $Xsed -e 's%^.*/%%'`
 29.6149 +	      outputname="$tmpdir/$file"
 29.6150 +	      # Replace the output file specification.
 29.6151 +	      relink_command=`$echo "X$relink_command" | $Xsed -e 's%@OUTPUT@%'"$outputname"'%g'`
 29.6152 +
 29.6153 +	      $show "$relink_command"
 29.6154 +	      if $run eval "$relink_command"; then :
 29.6155 +	      else
 29.6156 +		$echo "$modename: error: relink \`$file' with the above command before installing it" 1>&2
 29.6157 +		${rm}r "$tmpdir"
 29.6158 +		continue
 29.6159 +	      fi
 29.6160 +	      file="$outputname"
 29.6161 +	    else
 29.6162 +	      $echo "$modename: warning: cannot relink \`$file'" 1>&2
 29.6163 +	    fi
 29.6164 +	  else
 29.6165 +	    # Install the binary that we compiled earlier.
 29.6166 +	    file=`$echo "X$file$stripped_ext" | $Xsed -e "s%\([^/]*\)$%$objdir/\1%"`
 29.6167 +	  fi
 29.6168 +	fi
 29.6169 +
 29.6170 +	# remove .exe since cygwin /usr/bin/install will append another
 29.6171 +	# one anyway 
 29.6172 +	case $install_prog,$host in
 29.6173 +	*/usr/bin/install*,*cygwin*)
 29.6174 +	  case $file:$destfile in
 29.6175 +	  *.exe:*.exe)
 29.6176 +	    # this is ok
 29.6177 +	    ;;
 29.6178 +	  *.exe:*)
 29.6179 +	    destfile=$destfile.exe
 29.6180 +	    ;;
 29.6181 +	  *:*.exe)
 29.6182 +	    destfile=`$echo $destfile | ${SED} -e 's,.exe$,,'`
 29.6183 +	    ;;
 29.6184 +	  esac
 29.6185 +	  ;;
 29.6186 +	esac
 29.6187 +	$show "$install_prog$stripme $file $destfile"
 29.6188 +	$run eval "$install_prog\$stripme \$file \$destfile" || exit $?
 29.6189 +	test -n "$outputname" && ${rm}r "$tmpdir"
 29.6190 +	;;
 29.6191 +      esac
 29.6192 +    done
 29.6193 +
 29.6194 +    for file in $staticlibs; do
 29.6195 +      name=`$echo "X$file" | $Xsed -e 's%^.*/%%'`
 29.6196 +
 29.6197 +      # Set up the ranlib parameters.
 29.6198 +      oldlib="$destdir/$name"
 29.6199 +
 29.6200 +      $show "$install_prog $file $oldlib"
 29.6201 +      $run eval "$install_prog \$file \$oldlib" || exit $?
 29.6202 +
 29.6203 +      if test -n "$stripme" && test -n "$old_striplib"; then
 29.6204 +	$show "$old_striplib $oldlib"
 29.6205 +	$run eval "$old_striplib $oldlib" || exit $?
 29.6206 +      fi
 29.6207 +
 29.6208 +      # Do each command in the postinstall commands.
 29.6209 +      cmds=$old_postinstall_cmds
 29.6210 +      save_ifs="$IFS"; IFS='~'
 29.6211 +      for cmd in $cmds; do
 29.6212 +	IFS="$save_ifs"
 29.6213 +	eval cmd=\"$cmd\"
 29.6214 +	$show "$cmd"
 29.6215 +	$run eval "$cmd" || exit $?
 29.6216 +      done
 29.6217 +      IFS="$save_ifs"
 29.6218 +    done
 29.6219 +
 29.6220 +    if test -n "$future_libdirs"; then
 29.6221 +      $echo "$modename: warning: remember to run \`$progname --finish$future_libdirs'" 1>&2
 29.6222 +    fi
 29.6223 +
 29.6224 +    if test -n "$current_libdirs"; then
 29.6225 +      # Maybe just do a dry run.
 29.6226 +      test -n "$run" && current_libdirs=" -n$current_libdirs"
 29.6227 +      exec_cmd='$SHELL $progpath $preserve_args --finish$current_libdirs'
 29.6228 +    else
 29.6229 +      exit $EXIT_SUCCESS
 29.6230 +    fi
 29.6231 +    ;;
 29.6232 +
 29.6233 +  # libtool finish mode
 29.6234 +  finish)
 29.6235 +    modename="$modename: finish"
 29.6236 +    libdirs="$nonopt"
 29.6237 +    admincmds=
 29.6238 +
 29.6239 +    if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then
 29.6240 +      for dir
 29.6241 +      do
 29.6242 +	libdirs="$libdirs $dir"
 29.6243 +      done
 29.6244 +
 29.6245 +      for libdir in $libdirs; do
 29.6246 +	if test -n "$finish_cmds"; then
 29.6247 +	  # Do each command in the finish commands.
 29.6248 +	  cmds=$finish_cmds
 29.6249 +	  save_ifs="$IFS"; IFS='~'
 29.6250 +	  for cmd in $cmds; do
 29.6251 +	    IFS="$save_ifs"
 29.6252 +	    eval cmd=\"$cmd\"
 29.6253 +	    $show "$cmd"
 29.6254 +	    $run eval "$cmd" || admincmds="$admincmds
 29.6255 +       $cmd"
 29.6256 +	  done
 29.6257 +	  IFS="$save_ifs"
 29.6258 +	fi
 29.6259 +	if test -n "$finish_eval"; then
 29.6260 +	  # Do the single finish_eval.
 29.6261 +	  eval cmds=\"$finish_eval\"
 29.6262 +	  $run eval "$cmds" || admincmds="$admincmds
 29.6263 +       $cmds"
 29.6264 +	fi
 29.6265 +      done
 29.6266 +    fi
 29.6267 +
 29.6268 +    # Exit here if they wanted silent mode.
 29.6269 +    test "$show" = : && exit $EXIT_SUCCESS
 29.6270 +
 29.6271 +    $echo "X----------------------------------------------------------------------" | $Xsed
 29.6272 +    $echo "Libraries have been installed in:"
 29.6273 +    for libdir in $libdirs; do
 29.6274 +      $echo "   $libdir"
 29.6275 +    done
 29.6276 +    $echo
 29.6277 +    $echo "If you ever happen to want to link against installed libraries"
 29.6278 +    $echo "in a given directory, LIBDIR, you must either use libtool, and"
 29.6279 +    $echo "specify the full pathname of the library, or use the \`-LLIBDIR'"
 29.6280 +    $echo "flag during linking and do at least one of the following:"
 29.6281 +    if test -n "$shlibpath_var"; then
 29.6282 +      $echo "   - add LIBDIR to the \`$shlibpath_var' environment variable"
 29.6283 +      $echo "     during execution"
 29.6284 +    fi
 29.6285 +    if test -n "$runpath_var"; then
 29.6286 +      $echo "   - add LIBDIR to the \`$runpath_var' environment variable"
 29.6287 +      $echo "     during linking"
 29.6288 +    fi
 29.6289 +    if test -n "$hardcode_libdir_flag_spec"; then
 29.6290 +      libdir=LIBDIR
 29.6291 +      eval flag=\"$hardcode_libdir_flag_spec\"
 29.6292 +
 29.6293 +      $echo "   - use the \`$flag' linker flag"
 29.6294 +    fi
 29.6295 +    if test -n "$admincmds"; then
 29.6296 +      $echo "   - have your system administrator run these commands:$admincmds"
 29.6297 +    fi
 29.6298 +    if test -f /etc/ld.so.conf; then
 29.6299 +      $echo "   - have your system administrator add LIBDIR to \`/etc/ld.so.conf'"
 29.6300 +    fi
 29.6301 +    $echo
 29.6302 +    $echo "See any operating system documentation about shared libraries for"
 29.6303 +    $echo "more information, such as the ld(1) and ld.so(8) manual pages."
 29.6304 +    $echo "X----------------------------------------------------------------------" | $Xsed
 29.6305 +    exit $EXIT_SUCCESS
 29.6306 +    ;;
 29.6307 +
 29.6308 +  # libtool execute mode
 29.6309 +  execute)
 29.6310 +    modename="$modename: execute"
 29.6311 +
 29.6312 +    # The first argument is the command name.
 29.6313 +    cmd="$nonopt"
 29.6314 +    if test -z "$cmd"; then
 29.6315 +      $echo "$modename: you must specify a COMMAND" 1>&2
 29.6316 +      $echo "$help"
 29.6317 +      exit $EXIT_FAILURE
 29.6318 +    fi
 29.6319 +
 29.6320 +    # Handle -dlopen flags immediately.
 29.6321 +    for file in $execute_dlfiles; do
 29.6322 +      if test ! -f "$file"; then
 29.6323 +	$echo "$modename: \`$file' is not a file" 1>&2
 29.6324 +	$echo "$help" 1>&2
 29.6325 +	exit $EXIT_FAILURE
 29.6326 +      fi
 29.6327 +
 29.6328 +      dir=
 29.6329 +      case $file in
 29.6330 +      *.la)
 29.6331 +	# Check to see that this really is a libtool archive.
 29.6332 +	if (${SED} -e '2q' $file | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then :
 29.6333 +	else
 29.6334 +	  $echo "$modename: \`$lib' is not a valid libtool archive" 1>&2
 29.6335 +	  $echo "$help" 1>&2
 29.6336 +	  exit $EXIT_FAILURE
 29.6337 +	fi
 29.6338 +
 29.6339 +	# Read the libtool library.
 29.6340 +	dlname=
 29.6341 +	library_names=
 29.6342 +
 29.6343 +	# If there is no directory component, then add one.
 29.6344 +	case $file in
 29.6345 +	*/* | *\\*) . $file ;;
 29.6346 +	*) . ./$file ;;
 29.6347 +	esac
 29.6348 +
 29.6349 +	# Skip this library if it cannot be dlopened.
 29.6350 +	if test -z "$dlname"; then
 29.6351 +	  # Warn if it was a shared library.
 29.6352 +	  test -n "$library_names" && $echo "$modename: warning: \`$file' was not linked with \`-export-dynamic'"
 29.6353 +	  continue
 29.6354 +	fi
 29.6355 +
 29.6356 +	dir=`$echo "X$file" | $Xsed -e 's%/[^/]*$%%'`
 29.6357 +	test "X$dir" = "X$file" && dir=.
 29.6358 +
 29.6359 +	if test -f "$dir/$objdir/$dlname"; then
 29.6360 +	  dir="$dir/$objdir"
 29.6361 +	else
 29.6362 +	  $echo "$modename: cannot find \`$dlname' in \`$dir' or \`$dir/$objdir'" 1>&2
 29.6363 +	  exit $EXIT_FAILURE
 29.6364 +	fi
 29.6365 +	;;
 29.6366 +
 29.6367 +      *.lo)
 29.6368 +	# Just add the directory containing the .lo file.
 29.6369 +	dir=`$echo "X$file" | $Xsed -e 's%/[^/]*$%%'`
 29.6370 +	test "X$dir" = "X$file" && dir=.
 29.6371 +	;;
 29.6372 +
 29.6373 +      *)
 29.6374 +	$echo "$modename: warning \`-dlopen' is ignored for non-libtool libraries and objects" 1>&2
 29.6375 +	continue
 29.6376 +	;;
 29.6377 +      esac
 29.6378 +
 29.6379 +      # Get the absolute pathname.
 29.6380 +      absdir=`cd "$dir" && pwd`
 29.6381 +      test -n "$absdir" && dir="$absdir"
 29.6382 +
 29.6383 +      # Now add the directory to shlibpath_var.
 29.6384 +      if eval "test -z \"\$$shlibpath_var\""; then
 29.6385 +	eval "$shlibpath_var=\"\$dir\""
 29.6386 +      else
 29.6387 +	eval "$shlibpath_var=\"\$dir:\$$shlibpath_var\""
 29.6388 +      fi
 29.6389 +    done
 29.6390 +
 29.6391 +    # This variable tells wrapper scripts just to set shlibpath_var
 29.6392 +    # rather than running their programs.
 29.6393 +    libtool_execute_magic="$magic"
 29.6394 +
 29.6395 +    # Check if any of the arguments is a wrapper script.
 29.6396 +    args=
 29.6397 +    for file
 29.6398 +    do
 29.6399 +      case $file in
 29.6400 +      -*) ;;
 29.6401 +      *)
 29.6402 +	# Do a test to see if this is really a libtool program.
 29.6403 +	if (${SED} -e '4q' $file | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then
 29.6404 +	  # If there is no directory component, then add one.
 29.6405 +	  case $file in
 29.6406 +	  */* | *\\*) . $file ;;
 29.6407 +	  *) . ./$file ;;
 29.6408 +	  esac
 29.6409 +
 29.6410 +	  # Transform arg to wrapped name.
 29.6411 +	  file="$progdir/$program"
 29.6412 +	fi
 29.6413 +	;;
 29.6414 +      esac
 29.6415 +      # Quote arguments (to preserve shell metacharacters).
 29.6416 +      file=`$echo "X$file" | $Xsed -e "$sed_quote_subst"`
 29.6417 +      args="$args \"$file\""
 29.6418 +    done
 29.6419 +
 29.6420 +    if test -z "$run"; then
 29.6421 +      if test -n "$shlibpath_var"; then
 29.6422 +	# Export the shlibpath_var.
 29.6423 +	eval "export $shlibpath_var"
 29.6424 +      fi
 29.6425 +
 29.6426 +      # Restore saved environment variables
 29.6427 +      if test "${save_LC_ALL+set}" = set; then
 29.6428 +	LC_ALL="$save_LC_ALL"; export LC_ALL
 29.6429 +      fi
 29.6430 +      if test "${save_LANG+set}" = set; then
 29.6431 +	LANG="$save_LANG"; export LANG
 29.6432 +      fi
 29.6433 +
 29.6434 +      # Now prepare to actually exec the command.
 29.6435 +      exec_cmd="\$cmd$args"
 29.6436 +    else
 29.6437 +      # Display what would be done.
 29.6438 +      if test -n "$shlibpath_var"; then
 29.6439 +	eval "\$echo \"\$shlibpath_var=\$$shlibpath_var\""
 29.6440 +	$echo "export $shlibpath_var"
 29.6441 +      fi
 29.6442 +      $echo "$cmd$args"
 29.6443 +      exit $EXIT_SUCCESS
 29.6444 +    fi
 29.6445 +    ;;
 29.6446 +
 29.6447 +  # libtool clean and uninstall mode
 29.6448 +  clean | uninstall)
 29.6449 +    modename="$modename: $mode"
 29.6450 +    rm="$nonopt"
 29.6451 +    files=
 29.6452 +    rmforce=
 29.6453 +    exit_status=0
 29.6454 +
 29.6455 +    # This variable tells wrapper scripts just to set variables rather
 29.6456 +    # than running their programs.
 29.6457 +    libtool_install_magic="$magic"
 29.6458 +
 29.6459 +    for arg
 29.6460 +    do
 29.6461 +      case $arg in
 29.6462 +      -f) rm="$rm $arg"; rmforce=yes ;;
 29.6463 +      -*) rm="$rm $arg" ;;
 29.6464 +      *) files="$files $arg" ;;
 29.6465 +      esac
 29.6466 +    done
 29.6467 +
 29.6468 +    if test -z "$rm"; then
 29.6469 +      $echo "$modename: you must specify an RM program" 1>&2
 29.6470 +      $echo "$help" 1>&2
 29.6471 +      exit $EXIT_FAILURE
 29.6472 +    fi
 29.6473 +
 29.6474 +    rmdirs=
 29.6475 +
 29.6476 +    origobjdir="$objdir"
 29.6477 +    for file in $files; do
 29.6478 +      dir=`$echo "X$file" | $Xsed -e 's%/[^/]*$%%'`
 29.6479 +      if test "X$dir" = "X$file"; then
 29.6480 +	dir=.
 29.6481 +	objdir="$origobjdir"
 29.6482 +      else
 29.6483 +	objdir="$dir/$origobjdir"
 29.6484 +      fi
 29.6485 +      name=`$echo "X$file" | $Xsed -e 's%^.*/%%'`
 29.6486 +      test "$mode" = uninstall && objdir="$dir"
 29.6487 +
 29.6488 +      # Remember objdir for removal later, being careful to avoid duplicates
 29.6489 +      if test "$mode" = clean; then
 29.6490 +	case " $rmdirs " in
 29.6491 +	  *" $objdir "*) ;;
 29.6492 +	  *) rmdirs="$rmdirs $objdir" ;;
 29.6493 +	esac
 29.6494 +      fi
 29.6495 +
 29.6496 +      # Don't error if the file doesn't exist and rm -f was used.
 29.6497 +      if (test -L "$file") >/dev/null 2>&1 \
 29.6498 +	|| (test -h "$file") >/dev/null 2>&1 \
 29.6499 +	|| test -f "$file"; then
 29.6500 +	:
 29.6501 +      elif test -d "$file"; then
 29.6502 +	exit_status=1
 29.6503 +	continue
 29.6504 +      elif test "$rmforce" = yes; then
 29.6505 +	continue
 29.6506 +      fi
 29.6507 +
 29.6508 +      rmfiles="$file"
 29.6509 +
 29.6510 +      case $name in
 29.6511 +      *.la)
 29.6512 +	# Possibly a libtool archive, so verify it.
 29.6513 +	if (${SED} -e '2q' $file | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then
 29.6514 +	  . $dir/$name
 29.6515 +
 29.6516 +	  # Delete the libtool libraries and symlinks.
 29.6517 +	  for n in $library_names; do
 29.6518 +	    rmfiles="$rmfiles $objdir/$n"
 29.6519 +	  done
 29.6520 +	  test -n "$old_library" && rmfiles="$rmfiles $objdir/$old_library"
 29.6521 +
 29.6522 +	  case "$mode" in
 29.6523 +	  clean)
 29.6524 +	    case "  $library_names " in
 29.6525 +	    # "  " in the beginning catches empty $dlname
 29.6526 +	    *" $dlname "*) ;;
 29.6527 +	    *) rmfiles="$rmfiles $objdir/$dlname" ;;
 29.6528 +	    esac
 29.6529 +	     test -n "$libdir" && rmfiles="$rmfiles $objdir/$name $objdir/${name}i"
 29.6530 +	    ;;
 29.6531 +	  uninstall)
 29.6532 +	    if test -n "$library_names"; then
 29.6533 +	      # Do each command in the postuninstall commands.
 29.6534 +	      cmds=$postuninstall_cmds
 29.6535 +	      save_ifs="$IFS"; IFS='~'
 29.6536 +	      for cmd in $cmds; do
 29.6537 +		IFS="$save_ifs"
 29.6538 +		eval cmd=\"$cmd\"
 29.6539 +		$show "$cmd"
 29.6540 +		$run eval "$cmd"
 29.6541 +		if test "$?" -ne 0 && test "$rmforce" != yes; then
 29.6542 +		  exit_status=1
 29.6543 +		fi
 29.6544 +	      done
 29.6545 +	      IFS="$save_ifs"
 29.6546 +	    fi
 29.6547 +
 29.6548 +	    if test -n "$old_library"; then
 29.6549 +	      # Do each command in the old_postuninstall commands.
 29.6550 +	      cmds=$old_postuninstall_cmds
 29.6551 +	      save_ifs="$IFS"; IFS='~'
 29.6552 +	      for cmd in $cmds; do
 29.6553 +		IFS="$save_ifs"
 29.6554 +		eval cmd=\"$cmd\"
 29.6555 +		$show "$cmd"
 29.6556 +		$run eval "$cmd"
 29.6557 +		if test "$?" -ne 0 && test "$rmforce" != yes; then
 29.6558 +		  exit_status=1
 29.6559 +		fi
 29.6560 +	      done
 29.6561 +	      IFS="$save_ifs"
 29.6562 +	    fi
 29.6563 +	    # FIXME: should reinstall the best remaining shared library.
 29.6564 +	    ;;
 29.6565 +	  esac
 29.6566 +	fi
 29.6567 +	;;
 29.6568 +
 29.6569 +      *.lo)
 29.6570 +	# Possibly a libtool object, so verify it.
 29.6571 +	if (${SED} -e '2q' $file | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then
 29.6572 +
 29.6573 +	  # Read the .lo file
 29.6574 +	  . $dir/$name
 29.6575 +
 29.6576 +	  # Add PIC object to the list of files to remove.
 29.6577 +	  if test -n "$pic_object" \
 29.6578 +	     && test "$pic_object" != none; then
 29.6579 +	    rmfiles="$rmfiles $dir/$pic_object"
 29.6580 +	  fi
 29.6581 +
 29.6582 +	  # Add non-PIC object to the list of files to remove.
 29.6583 +	  if test -n "$non_pic_object" \
 29.6584 +	     && test "$non_pic_object" != none; then
 29.6585 +	    rmfiles="$rmfiles $dir/$non_pic_object"
 29.6586 +	  fi
 29.6587 +	fi
 29.6588 +	;;
 29.6589 +
 29.6590 +      *)
 29.6591 +	if test "$mode" = clean ; then
 29.6592 +	  noexename=$name
 29.6593 +	  case $file in
 29.6594 +	  *.exe)
 29.6595 +	    file=`$echo $file|${SED} 's,.exe$,,'`
 29.6596 +	    noexename=`$echo $name|${SED} 's,.exe$,,'`
 29.6597 +	    # $file with .exe has already been added to rmfiles,
 29.6598 +	    # add $file without .exe
 29.6599 +	    rmfiles="$rmfiles $file"
 29.6600 +	    ;;
 29.6601 +	  esac
 29.6602 +	  # Do a test to see if this is a libtool program.
 29.6603 +	  if (${SED} -e '4q' $file | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then
 29.6604 +	    relink_command=
 29.6605 +	    . $dir/$noexename
 29.6606 +
 29.6607 +	    # note $name still contains .exe if it was in $file originally
 29.6608 +	    # as does the version of $file that was added into $rmfiles
 29.6609 +	    rmfiles="$rmfiles $objdir/$name $objdir/${name}S.${objext}"
 29.6610 +	    if test "$fast_install" = yes && test -n "$relink_command"; then
 29.6611 +	      rmfiles="$rmfiles $objdir/lt-$name"
 29.6612 +	    fi
 29.6613 +	    if test "X$noexename" != "X$name" ; then
 29.6614 +	      rmfiles="$rmfiles $objdir/lt-${noexename}.c"
 29.6615 +	    fi
 29.6616 +	  fi
 29.6617 +	fi
 29.6618 +	;;
 29.6619 +      esac
 29.6620 +      $show "$rm $rmfiles"
 29.6621 +      $run $rm $rmfiles || exit_status=1
 29.6622 +    done
 29.6623 +    objdir="$origobjdir"
 29.6624 +
 29.6625 +    # Try to remove the ${objdir}s in the directories where we deleted files
 29.6626 +    for dir in $rmdirs; do
 29.6627 +      if test -d "$dir"; then
 29.6628 +	$show "rmdir $dir"
 29.6629 +	$run rmdir $dir >/dev/null 2>&1
 29.6630 +      fi
 29.6631 +    done
 29.6632 +
 29.6633 +    exit $exit_status
 29.6634 +    ;;
 29.6635 +
 29.6636 +  "")
 29.6637 +    $echo "$modename: you must specify a MODE" 1>&2
 29.6638 +    $echo "$generic_help" 1>&2
 29.6639 +    exit $EXIT_FAILURE
 29.6640 +    ;;
 29.6641 +  esac
 29.6642 +
 29.6643 +  if test -z "$exec_cmd"; then
 29.6644 +    $echo "$modename: invalid operation mode \`$mode'" 1>&2
 29.6645 +    $echo "$generic_help" 1>&2
 29.6646 +    exit $EXIT_FAILURE
 29.6647 +  fi
 29.6648 +fi # test -z "$show_help"
 29.6649 +
 29.6650 +if test -n "$exec_cmd"; then
 29.6651 +  eval exec $exec_cmd
 29.6652 +  exit $EXIT_FAILURE
 29.6653 +fi
 29.6654 +
 29.6655 +# We need to display help for each of the modes.
 29.6656 +case $mode in
 29.6657 +"") $echo \
 29.6658 +"Usage: $modename [OPTION]... [MODE-ARG]...
 29.6659 +
 29.6660 +Provide generalized library-building support services.
 29.6661 +
 29.6662 +    --config          show all configuration variables
 29.6663 +    --debug           enable verbose shell tracing
 29.6664 +-n, --dry-run         display commands without modifying any files
 29.6665 +    --features        display basic configuration information and exit
 29.6666 +    --finish          same as \`--mode=finish'
 29.6667 +    --help            display this help message and exit
 29.6668 +    --mode=MODE       use operation mode MODE [default=inferred from MODE-ARGS]
 29.6669 +    --quiet           same as \`--silent'
 29.6670 +    --silent          don't print informational messages
 29.6671 +    --tag=TAG         use configuration variables from tag TAG
 29.6672 +    --version         print version information
 29.6673 +
 29.6674 +MODE must be one of the following:
 29.6675 +
 29.6676 +      clean           remove files from the build directory
 29.6677 +      compile         compile a source file into a libtool object
 29.6678 +      execute         automatically set library path, then run a program
 29.6679 +      finish          complete the installation of libtool libraries
 29.6680 +      install         install libraries or executables
 29.6681 +      link            create a library or an executable
 29.6682 +      uninstall       remove libraries from an installed directory
 29.6683 +
 29.6684 +MODE-ARGS vary depending on the MODE.  Try \`$modename --help --mode=MODE' for
 29.6685 +a more detailed description of MODE.
 29.6686 +
 29.6687 +Report bugs to <bug-libtool@gnu.org>."
 29.6688 +  exit $EXIT_SUCCESS
 29.6689 +  ;;
 29.6690 +
 29.6691 +clean)
 29.6692 +  $echo \
 29.6693 +"Usage: $modename [OPTION]... --mode=clean RM [RM-OPTION]... FILE...
 29.6694 +
 29.6695 +Remove files from the build directory.
 29.6696 +
 29.6697 +RM is the name of the program to use to delete files associated with each FILE
 29.6698 +(typically \`/bin/rm').  RM-OPTIONS are options (such as \`-f') to be passed
 29.6699 +to RM.
 29.6700 +
 29.6701 +If FILE is a libtool library, object or program, all the files associated
 29.6702 +with it are deleted. Otherwise, only FILE itself is deleted using RM."
 29.6703 +  ;;
 29.6704 +
 29.6705 +compile)
 29.6706 +  $echo \
 29.6707 +"Usage: $modename [OPTION]... --mode=compile COMPILE-COMMAND... SOURCEFILE
 29.6708 +
 29.6709 +Compile a source file into a libtool library object.
 29.6710 +
 29.6711 +This mode accepts the following additional options:
 29.6712 +
 29.6713 +  -o OUTPUT-FILE    set the output file name to OUTPUT-FILE
 29.6714 +  -prefer-pic       try to building PIC objects only
 29.6715 +  -prefer-non-pic   try to building non-PIC objects only
 29.6716 +  -static           always build a \`.o' file suitable for static linking
 29.6717 +
 29.6718 +COMPILE-COMMAND is a command to be used in creating a \`standard' object file
 29.6719 +from the given SOURCEFILE.
 29.6720 +
 29.6721 +The output file name is determined by removing the directory component from
 29.6722 +SOURCEFILE, then substituting the C source code suffix \`.c' with the
 29.6723 +library object suffix, \`.lo'."
 29.6724 +  ;;
 29.6725 +
 29.6726 +execute)
 29.6727 +  $echo \
 29.6728 +"Usage: $modename [OPTION]... --mode=execute COMMAND [ARGS]...
 29.6729 +
 29.6730 +Automatically set library path, then run a program.
 29.6731 +
 29.6732 +This mode accepts the following additional options:
 29.6733 +
 29.6734 +  -dlopen FILE      add the directory containing FILE to the library path
 29.6735 +
 29.6736 +This mode sets the library path environment variable according to \`-dlopen'
 29.6737 +flags.
 29.6738 +
 29.6739 +If any of the ARGS are libtool executable wrappers, then they are translated
 29.6740 +into their corresponding uninstalled binary, and any of their required library
 29.6741 +directories are added to the library path.
 29.6742 +
 29.6743 +Then, COMMAND is executed, with ARGS as arguments."
 29.6744 +  ;;
 29.6745 +
 29.6746 +finish)
 29.6747 +  $echo \
 29.6748 +"Usage: $modename [OPTION]... --mode=finish [LIBDIR]...
 29.6749 +
 29.6750 +Complete the installation of libtool libraries.
 29.6751 +
 29.6752 +Each LIBDIR is a directory that contains libtool libraries.
 29.6753 +
 29.6754 +The commands that this mode executes may require superuser privileges.  Use
 29.6755 +the \`--dry-run' option if you just want to see what would be executed."
 29.6756 +  ;;
 29.6757 +
 29.6758 +install)
 29.6759 +  $echo \
 29.6760 +"Usage: $modename [OPTION]... --mode=install INSTALL-COMMAND...
 29.6761 +
 29.6762 +Install executables or libraries.
 29.6763 +
 29.6764 +INSTALL-COMMAND is the installation command.  The first component should be
 29.6765 +either the \`install' or \`cp' program.
 29.6766 +
 29.6767 +The rest of the components are interpreted as arguments to that command (only
 29.6768 +BSD-compatible install options are recognized)."
 29.6769 +  ;;
 29.6770 +
 29.6771 +link)
 29.6772 +  $echo \
 29.6773 +"Usage: $modename [OPTION]... --mode=link LINK-COMMAND...
 29.6774 +
 29.6775 +Link object files or libraries together to form another library, or to
 29.6776 +create an executable program.
 29.6777 +
 29.6778 +LINK-COMMAND is a command using the C compiler that you would use to create
 29.6779 +a program from several object files.
 29.6780 +
 29.6781 +The following components of LINK-COMMAND are treated specially:
 29.6782 +
 29.6783 +  -all-static       do not do any dynamic linking at all
 29.6784 +  -avoid-version    do not add a version suffix if possible
 29.6785 +  -dlopen FILE      \`-dlpreopen' FILE if it cannot be dlopened at runtime
 29.6786 +  -dlpreopen FILE   link in FILE and add its symbols to lt_preloaded_symbols
 29.6787 +  -export-dynamic   allow symbols from OUTPUT-FILE to be resolved with dlsym(3)
 29.6788 +  -export-symbols SYMFILE
 29.6789 +		    try to export only the symbols listed in SYMFILE
 29.6790 +  -export-symbols-regex REGEX
 29.6791 +		    try to export only the symbols matching REGEX
 29.6792 +  -LLIBDIR          search LIBDIR for required installed libraries
 29.6793 +  -lNAME            OUTPUT-FILE requires the installed library libNAME
 29.6794 +  -module           build a library that can dlopened
 29.6795 +  -no-fast-install  disable the fast-install mode
 29.6796 +  -no-install       link a not-installable executable
 29.6797 +  -no-undefined     declare that a library does not refer to external symbols
 29.6798 +  -o OUTPUT-FILE    create OUTPUT-FILE from the specified objects
 29.6799 +  -objectlist FILE  Use a list of object files found in FILE to specify objects
 29.6800 +  -precious-files-regex REGEX
 29.6801 +                    don't remove output files matching REGEX
 29.6802 +  -release RELEASE  specify package release information
 29.6803 +  -rpath LIBDIR     the created library will eventually be installed in LIBDIR
 29.6804 +  -R[ ]LIBDIR       add LIBDIR to the runtime path of programs and libraries
 29.6805 +  -static           do not do any dynamic linking of libtool libraries
 29.6806 +  -version-info CURRENT[:REVISION[:AGE]]
 29.6807 +		    specify library version info [each variable defaults to 0]
 29.6808 +
 29.6809 +All other options (arguments beginning with \`-') are ignored.
 29.6810 +
 29.6811 +Every other argument is treated as a filename.  Files ending in \`.la' are
 29.6812 +treated as uninstalled libtool libraries, other files are standard or library
 29.6813 +object files.
 29.6814 +
 29.6815 +If the OUTPUT-FILE ends in \`.la', then a libtool library is created,
 29.6816 +only library objects (\`.lo' files) may be specified, and \`-rpath' is
 29.6817 +required, except when creating a convenience library.
 29.6818 +
 29.6819 +If OUTPUT-FILE ends in \`.a' or \`.lib', then a standard library is created
 29.6820 +using \`ar' and \`ranlib', or on Windows using \`lib'.
 29.6821 +
 29.6822 +If OUTPUT-FILE ends in \`.lo' or \`.${objext}', then a reloadable object file
 29.6823 +is created, otherwise an executable program is created."
 29.6824 +  ;;
 29.6825 +
 29.6826 +uninstall)
 29.6827 +  $echo \
 29.6828 +"Usage: $modename [OPTION]... --mode=uninstall RM [RM-OPTION]... FILE...
 29.6829 +
 29.6830 +Remove libraries from an installation directory.
 29.6831 +
 29.6832 +RM is the name of the program to use to delete files associated with each FILE
 29.6833 +(typically \`/bin/rm').  RM-OPTIONS are options (such as \`-f') to be passed
 29.6834 +to RM.
 29.6835 +
 29.6836 +If FILE is a libtool library, all the files associated with it are deleted.
 29.6837 +Otherwise, only FILE itself is deleted using RM."
 29.6838 +  ;;
 29.6839 +
 29.6840 +*)
 29.6841 +  $echo "$modename: invalid operation mode \`$mode'" 1>&2
 29.6842 +  $echo "$help" 1>&2
 29.6843 +  exit $EXIT_FAILURE
 29.6844 +  ;;
 29.6845 +esac
 29.6846 +
 29.6847 +$echo
 29.6848 +$echo "Try \`$modename --help' for more information about other modes."
 29.6849 +
 29.6850 +exit $?
 29.6851 +
 29.6852 +# The TAGs below are defined such that we never get into a situation
 29.6853 +# in which we disable both kinds of libraries.  Given conflicting
 29.6854 +# choices, we go for a static library, that is the most portable,
 29.6855 +# since we can't tell whether shared libraries were disabled because
 29.6856 +# the user asked for that or because the platform doesn't support
 29.6857 +# them.  This is particularly important on AIX, because we don't
 29.6858 +# support having both static and shared libraries enabled at the same
 29.6859 +# time on that platform, so we default to a shared-only configuration.
 29.6860 +# If a disable-shared tag is given, we'll fallback to a static-only
 29.6861 +# configuration.  But we'll never go from static-only to shared-only.
 29.6862 +
 29.6863 +# ### BEGIN LIBTOOL TAG CONFIG: disable-shared
 29.6864 +disable_libs=shared
 29.6865 +# ### END LIBTOOL TAG CONFIG: disable-shared
 29.6866 +
 29.6867 +# ### BEGIN LIBTOOL TAG CONFIG: disable-static
 29.6868 +disable_libs=static
 29.6869 +# ### END LIBTOOL TAG CONFIG: disable-static
 29.6870 +
 29.6871 +# Local Variables:
 29.6872 +# mode:shell-script
 29.6873 +# sh-indentation:2
 29.6874 +# End:
    30.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    30.2 +++ b/m4/Makefile.am	Sat Feb 20 21:18:28 2010 -0800
    30.3 @@ -0,0 +1,9 @@
    30.4 +# $Id: Makefile.am,v 1.5 2004/01/01 01:56:35 hipnod Exp $
    30.5 +###############################################################################
    30.6 +
    30.7 +EXTRA_DIST = \
    30.8 +	gift-pkgconfig.m4 \
    30.9 +	gift-prefix.m4    \
   30.10 +	libxml.m4         \
   30.11 +	openbsd.m4        \
   30.12 +	zlib.m4
    31.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    31.2 +++ b/m4/Makefile.in	Sat Feb 20 21:18:28 2010 -0800
    31.3 @@ -0,0 +1,302 @@
    31.4 +# Makefile.in generated by automake 1.7.9 from Makefile.am.
    31.5 +# @configure_input@
    31.6 +
    31.7 +# Copyright 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003
    31.8 +# Free Software Foundation, Inc.
    31.9 +# This Makefile.in is free software; the Free Software Foundation
   31.10 +# gives unlimited permission to copy and/or distribute it,
   31.11 +# with or without modifications, as long as this notice is preserved.
   31.12 +
   31.13 +# This program is distributed in the hope that it will be useful,
   31.14 +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
   31.15 +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
   31.16 +# PARTICULAR PURPOSE.
   31.17 +
   31.18 +@SET_MAKE@
   31.19 +
   31.20 +# $Id: Makefile.am,v 1.5 2004/01/01 01:56:35 hipnod Exp $
   31.21 +###############################################################################
   31.22 +
   31.23 +srcdir = @srcdir@
   31.24 +top_srcdir = @top_srcdir@
   31.25 +VPATH = @srcdir@
   31.26 +pkgdatadir = $(datadir)/@PACKAGE@
   31.27 +pkglibdir = $(libdir)/@PACKAGE@
   31.28 +pkgincludedir = $(includedir)/@PACKAGE@
   31.29 +top_builddir = ..
   31.30 +
   31.31 +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
   31.32 +INSTALL = @INSTALL@
   31.33 +install_sh_DATA = $(install_sh) -c -m 644
   31.34 +install_sh_PROGRAM = $(install_sh) -c
   31.35 +install_sh_SCRIPT = $(install_sh) -c
   31.36 +INSTALL_HEADER = $(INSTALL_DATA)
   31.37 +transform = $(program_transform_name)
   31.38 +NORMAL_INSTALL = :
   31.39 +PRE_INSTALL = :
   31.40 +POST_INSTALL = :
   31.41 +NORMAL_UNINSTALL = :
   31.42 +PRE_UNINSTALL = :
   31.43 +POST_UNINSTALL = :
   31.44 +host_triplet = @host@
   31.45 +ACLOCAL = @ACLOCAL@
   31.46 +AMDEP_FALSE = @AMDEP_FALSE@
   31.47 +AMDEP_TRUE = @AMDEP_TRUE@
   31.48 +AMTAR = @AMTAR@
   31.49 +AR = @AR@
   31.50 +AUTOCONF = @AUTOCONF@
   31.51 +AUTOHEADER = @AUTOHEADER@
   31.52 +AUTOMAKE = @AUTOMAKE@
   31.53 +AWK = @AWK@
   31.54 +CC = @CC@
   31.55 +CCDEPMODE = @CCDEPMODE@
   31.56 +CFLAGS = @CFLAGS@
   31.57 +CPP = @CPP@
   31.58 +CPPFLAGS = @CPPFLAGS@
   31.59 +CXX = @CXX@
   31.60 +CXXCPP = @CXXCPP@
   31.61 +CXXDEPMODE = @CXXDEPMODE@
   31.62 +CXXFLAGS = @CXXFLAGS@
   31.63 +CYGPATH_W = @CYGPATH_W@
   31.64 +DEFS = @DEFS@
   31.65 +DEPDIR = @DEPDIR@
   31.66 +ECHO = @ECHO@
   31.67 +ECHO_C = @ECHO_C@
   31.68 +ECHO_N = @ECHO_N@
   31.69 +ECHO_T = @ECHO_T@
   31.70 +EGREP = @EGREP@
   31.71 +EXEEXT = @EXEEXT@
   31.72 +F77 = @F77@
   31.73 +FFLAGS = @FFLAGS@
   31.74 +GNUTELLA_CFLAGS = @GNUTELLA_CFLAGS@
   31.75 +GNUTELLA_LIBS = @GNUTELLA_LIBS@
   31.76 +INSTALL_DATA = @INSTALL_DATA@
   31.77 +INSTALL_PROGRAM = @INSTALL_PROGRAM@
   31.78 +INSTALL_SCRIPT = @INSTALL_SCRIPT@
   31.79 +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
   31.80 +LDFLAGS = @LDFLAGS@
   31.81 +LIBOBJS = @LIBOBJS@
   31.82 +LIBS = @LIBS@
   31.83 +LIBTOOL = @LIBTOOL@
   31.84 +LIBXML2_CFLAGS = @LIBXML2_CFLAGS@
   31.85 +LIBXML2_LIBS = @LIBXML2_LIBS@
   31.86 +LN_S = @LN_S@
   31.87 +LTLIBOBJS = @LTLIBOBJS@
   31.88 +MAINT = @MAINT@
   31.89 +MAINTAINER_MODE_FALSE = @MAINTAINER_MODE_FALSE@
   31.90 +MAINTAINER_MODE_TRUE = @MAINTAINER_MODE_TRUE@
   31.91 +MAKEINFO = @MAKEINFO@
   31.92 +OBJEXT = @OBJEXT@
   31.93 +PACKAGE = @PACKAGE@
   31.94 +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
   31.95 +PACKAGE_NAME = @PACKAGE_NAME@
   31.96 +PACKAGE_STRING = @PACKAGE_STRING@
   31.97 +PACKAGE_TARNAME = @PACKAGE_TARNAME@
   31.98 +PACKAGE_VERSION = @PACKAGE_VERSION@
   31.99 +PATH_SEPARATOR = @PATH_SEPARATOR@
  31.100 +PKG_CONFIG = @PKG_CONFIG@
  31.101 +PLUGIN_LDFLAGS = @PLUGIN_LDFLAGS@
  31.102 +RANLIB = @RANLIB@
  31.103 +SET_MAKE = @SET_MAKE@
  31.104 +SHELL = @SHELL@
  31.105 +STRIP = @STRIP@
  31.106 +USE_ZLIB = @USE_ZLIB@
  31.107 +VERSION = @VERSION@
  31.108 +XML2_CONFIG = @XML2_CONFIG@
  31.109 +ac_ct_AR = @ac_ct_AR@
  31.110 +ac_ct_CC = @ac_ct_CC@
  31.111 +ac_ct_CXX = @ac_ct_CXX@
  31.112 +ac_ct_F77 = @ac_ct_F77@
  31.113 +ac_ct_RANLIB = @ac_ct_RANLIB@
  31.114 +ac_ct_STRIP = @ac_ct_STRIP@
  31.115 +am__fastdepCC_FALSE = @am__fastdepCC_FALSE@
  31.116 +am__fastdepCC_TRUE = @am__fastdepCC_TRUE@
  31.117 +am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@
  31.118 +am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@
  31.119 +am__include = @am__include@
  31.120 +am__leading_dot = @am__leading_dot@
  31.121 +am__quote = @am__quote@
  31.122 +bindir = @bindir@
  31.123 +build = @build@
  31.124 +build_alias = @build_alias@
  31.125 +build_cpu = @build_cpu@
  31.126 +build_os = @build_os@
  31.127 +build_vendor = @build_vendor@
  31.128 +datadir = @datadir@
  31.129 +exec_prefix = @exec_prefix@
  31.130 +host = @host@
  31.131 +host_alias = @host_alias@
  31.132 +host_cpu = @host_cpu@
  31.133 +host_os = @host_os@
  31.134 +host_vendor = @host_vendor@
  31.135 +includedir = @includedir@
  31.136 +infodir = @infodir@
  31.137 +install_sh = @install_sh@
  31.138 +libdir = @libdir@
  31.139 +libexecdir = @libexecdir@
  31.140 +localstatedir = @localstatedir@
  31.141 +mandir = @mandir@
  31.142 +oldincludedir = @oldincludedir@
  31.143 +prefix = @prefix@
  31.144 +program_transform_name = @program_transform_name@
  31.145 +sbindir = @sbindir@
  31.146 +sharedstatedir = @sharedstatedir@
  31.147 +sysconfdir = @sysconfdir@
  31.148 +target_alias = @target_alias@
  31.149 +
  31.150 +EXTRA_DIST = \
  31.151 +	gift-pkgconfig.m4 \
  31.152 +	gift-prefix.m4    \
  31.153 +	libxml.m4         \
  31.154 +	openbsd.m4        \
  31.155 +	zlib.m4
  31.156 +
  31.157 +subdir = m4
  31.158 +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
  31.159 +mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
  31.160 +CONFIG_HEADER = $(top_builddir)/config.h
  31.161 +CONFIG_CLEAN_FILES =
  31.162 +DIST_SOURCES =
  31.163 +DIST_COMMON = $(srcdir)/Makefile.in Makefile.am
  31.164 +all: all-am
  31.165 +
  31.166 +.SUFFIXES:
  31.167 +$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ Makefile.am  $(top_srcdir)/configure.ac $(ACLOCAL_M4)
  31.168 +	cd $(top_srcdir) && \
  31.169 +	  $(AUTOMAKE) --gnu  m4/Makefile
  31.170 +Makefile: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.in  $(top_builddir)/config.status
  31.171 +	cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)
  31.172 +
  31.173 +mostlyclean-libtool:
  31.174 +	-rm -f *.lo
  31.175 +
  31.176 +clean-libtool:
  31.177 +	-rm -rf .libs _libs
  31.178 +
  31.179 +distclean-libtool:
  31.180 +	-rm -f libtool
  31.181 +uninstall-info-am:
  31.182 +tags: TAGS
  31.183 +TAGS:
  31.184 +
  31.185 +ctags: CTAGS
  31.186 +CTAGS:
  31.187 +
  31.188 +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
  31.189 +
  31.190 +top_distdir = ..
  31.191 +distdir = $(top_distdir)/$(PACKAGE)-$(VERSION)
  31.192 +
  31.193 +distdir: $(DISTFILES)
  31.194 +	@srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \
  31.195 +	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \
  31.196 +	list='$(DISTFILES)'; for file in $$list; do \
  31.197 +	  case $$file in \
  31.198 +	    $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \
  31.199 +	    $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \
  31.200 +	  esac; \
  31.201 +	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
  31.202 +	  dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \
  31.203 +	  if test "$$dir" != "$$file" && test "$$dir" != "."; then \
  31.204 +	    dir="/$$dir"; \
  31.205 +	    $(mkinstalldirs) "$(distdir)$$dir"; \
  31.206 +	  else \
  31.207 +	    dir=''; \
  31.208 +	  fi; \
  31.209 +	  if test -d $$d/$$file; then \
  31.210 +	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
  31.211 +	      cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
  31.212 +	    fi; \
  31.213 +	    cp -pR $$d/$$file $(distdir)$$dir || exit 1; \
  31.214 +	  else \
  31.215 +	    test -f $(distdir)/$$file \
  31.216 +	    || cp -p $$d/$$file $(distdir)/$$file \
  31.217 +	    || exit 1; \
  31.218 +	  fi; \
  31.219 +	done
  31.220 +check-am: all-am
  31.221 +check: check-am
  31.222 +all-am: Makefile
  31.223 +
  31.224 +installdirs:
  31.225 +install: install-am
  31.226 +install-exec: install-exec-am
  31.227 +install-data: install-data-am
  31.228 +uninstall: uninstall-am
  31.229 +
  31.230 +install-am: all-am
  31.231 +	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
  31.232 +
  31.233 +installcheck: installcheck-am
  31.234 +install-strip:
  31.235 +	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
  31.236 +	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
  31.237 +	  `test -z '$(STRIP)' || \
  31.238 +	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
  31.239 +mostlyclean-generic:
  31.240 +
  31.241 +clean-generic:
  31.242 +
  31.243 +distclean-generic:
  31.244 +	-rm -f $(CONFIG_CLEAN_FILES)
  31.245 +
  31.246 +maintainer-clean-generic:
  31.247 +	@echo "This command is intended for maintainers to use"
  31.248 +	@echo "it deletes files that may require special tools to rebuild."
  31.249 +clean: clean-am
  31.250 +
  31.251 +clean-am: clean-generic clean-libtool mostlyclean-am
  31.252 +
  31.253 +distclean: distclean-am
  31.254 +	-rm -f Makefile
  31.255 +distclean-am: clean-am distclean-generic distclean-libtool
  31.256 +
  31.257 +dvi: dvi-am
  31.258 +
  31.259 +dvi-am:
  31.260 +
  31.261 +info: info-am
  31.262 +
  31.263 +info-am:
  31.264 +
  31.265 +install-data-am:
  31.266 +
  31.267 +install-exec-am:
  31.268 +
  31.269 +install-info: install-info-am
  31.270 +
  31.271 +install-man:
  31.272 +
  31.273 +installcheck-am:
  31.274 +
  31.275 +maintainer-clean: maintainer-clean-am
  31.276 +	-rm -f Makefile
  31.277 +maintainer-clean-am: distclean-am maintainer-clean-generic
  31.278 +
  31.279 +mostlyclean: mostlyclean-am
  31.280 +
  31.281 +mostlyclean-am: mostlyclean-generic mostlyclean-libtool
  31.282 +
  31.283 +pdf: pdf-am
  31.284 +
  31.285 +pdf-am:
  31.286 +
  31.287 +ps: ps-am
  31.288 +
  31.289 +ps-am:
  31.290 +
  31.291 +uninstall-am: uninstall-info-am
  31.292 +
  31.293 +.PHONY: all all-am check check-am clean clean-generic clean-libtool \
  31.294 +	distclean distclean-generic distclean-libtool distdir dvi \
  31.295 +	dvi-am info info-am install install-am install-data \
  31.296 +	install-data-am install-exec install-exec-am install-info \
  31.297 +	install-info-am install-man install-strip installcheck \
  31.298 +	installcheck-am installdirs maintainer-clean \
  31.299 +	maintainer-clean-generic mostlyclean mostlyclean-generic \
  31.300 +	mostlyclean-libtool pdf pdf-am ps ps-am uninstall uninstall-am \
  31.301 +	uninstall-info-am
  31.302 +
  31.303 +# Tell versions [3.59,3.63) of GNU make to not export all variables.
  31.304 +# Otherwise a system limit (for SysV at least) may be exceeded.
  31.305 +.NOEXPORT:
    32.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    32.2 +++ b/m4/gift-pkgconfig.m4	Sat Feb 20 21:18:28 2010 -0800
    32.3 @@ -0,0 +1,25 @@
    32.4 +###############################################################################
    32.5 +## $Id: gift-pkgconfig.m4,v 1.4 2003/09/04 06:56:24 hipnod Exp $
    32.6 +###############################################################################
    32.7 +
    32.8 +AC_DEFUN([GIFT_PLUGIN_PKGCONFIG],
    32.9 +  [AC_PATH_PROG(PKG_CONFIG, pkg-config)
   32.10 +
   32.11 +   if test x$prefix != xNONE; then
   32.12 +     PKG_CONFIG_PATH="$PKG_CONFIG_PATH:$prefix/lib/pkgconfig"
   32.13 +   fi
   32.14 +
   32.15 +   PKG_CONFIG_PATH="$PKG_CONFIG_PATH:/usr/local/lib/pkgconfig"
   32.16 +   export PKG_CONFIG_PATH
   32.17 +
   32.18 +   PKG_CHECK_MODULES([$1], libgift >= $2 libgift < $3)
   32.19 +
   32.20 +   # fudge libgiftproto in there which doesnt have any pkg-config entry
   32.21 +   AS_VAR_SET($1_LIBS, "AS_VAR_GET($1_LIBS) -lgiftproto")
   32.22 +
   32.23 +   # hack to set libgift_version
   32.24 +   libgift_version=`pkg-config libgift --modversion`
   32.25 +
   32.26 +   AC_SUBST($1_CFLAGS)
   32.27 +   AC_SUBST($1_LIBS)
   32.28 +  ])
    33.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    33.2 +++ b/m4/gift-prefix.m4	Sat Feb 20 21:18:28 2010 -0800
    33.3 @@ -0,0 +1,25 @@
    33.4 +###############################################################################
    33.5 +## $Id: gift-prefix.m4,v 1.2 2004/01/04 07:35:13 hipnod Exp $
    33.6 +###############################################################################
    33.7 +
    33.8 +AC_DEFUN([GIFT_PLUGIN_CHECK_PREFIX],[
    33.9 +   libgift_prefix=`pkg-config --variable=prefix libgift`
   33.10 +
   33.11 +   gift_plugin_prefix=$prefix
   33.12 +   if test x"$prefix" = xNONE; then
   33.13 +      gift_plugin_prefix=/usr/local
   33.14 +   fi
   33.15 +
   33.16 +   if test x"$libgift_prefix" != x"$gift_plugin_prefix"; then
   33.17 +      AC_MSG_WARN([
   33.18 +   You are trying to install in $gift_plugin_prefix, but I only
   33.19 +   detected a giFT installation in $libgift_prefix. 
   33.20 +   You may be installing in the wrong place.
   33.21 +
   33.22 +   You should probably supply --prefix=$libgift_prefix 
   33.23 +   to configure. Or, if you have a giFT installation in
   33.24 +   $gift_plugin_prefix, you could add ${gift_plugin_prefix}/lib/pkgconfig 
   33.25 +   to the PKG_CONFIG_PATH environment variable, so I can detect it.
   33.26 +])
   33.27 +   fi
   33.28 +])
    34.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    34.2 +++ b/m4/libxml.m4	Sat Feb 20 21:18:28 2010 -0800
    34.3 @@ -0,0 +1,31 @@
    34.4 +###############################################################################
    34.5 +## $Id: libxml.m4,v 1.1 2003/09/17 23:25:51 hipnod Exp $
    34.6 +###############################################################################
    34.7 +
    34.8 +AC_DEFUN([GIFT_GNUTELLA_CHECK_LIBXML],[
    34.9 +   #
   34.10 +   # Check on the user's PATH if no path was specified in OPT_LIBXML,
   34.11 +   # when the user has passed --with-libxml without a directory,
   34.12 +   # or check the directory if one was supplied.
   34.13 +   #
   34.14 +   if test x"$OPT_LIBXML" = xyes; then 
   34.15 +      AC_PATH_PROG(XML2_CONFIG, xml2-config, [no])
   34.16 +   else
   34.17 +      XMLPATH="$OPT_LIBXML/bin"
   34.18 +      AC_PATH_PROG(XML2_CONFIG, xml2-config, [no], [$XMLPATH])
   34.19 +   fi
   34.20 +
   34.21 +   if test x"$XML2_CONFIG" != xno; then
   34.22 +      LIBXML2_CFLAGS=`$XML2_CONFIG --cflags`
   34.23 +      LIBXML2_LIBS=`$XML2_CONFIG --libs`
   34.24 +
   34.25 +      AC_SUBST(LIBXML2_CFLAGS) 
   34.26 +      AC_SUBST(LIBXML2_LIBS) 
   34.27 +      AC_DEFINE(USE_LIBXML2) 
   34.28 +   else
   34.29 +      AC_MSG_ERROR([
   34.30 +Couldn't run ${OPT_LIBXML}/bin/xml2-config
   34.31 +
   34.32 +])
   34.33 +   fi
   34.34 +])
    35.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    35.2 +++ b/m4/openbsd.m4	Sat Feb 20 21:18:28 2010 -0800
    35.3 @@ -0,0 +1,18 @@
    35.4 +###############################################################################
    35.5 +## $Id: openbsd.m4,v 1.1 2003/07/30 08:05:44 hipnod Exp $
    35.6 +###############################################################################
    35.7 +
    35.8 +dnl
    35.9 +dnl OPENBSD_LIBTOOL_WORKAROUND
   35.10 +dnl
   35.11 +dnl Work-around a problem caused by the -avoid-version libtool option.  Can
   35.12 +dnl anyone come up with a better way?
   35.13 +dnl
   35.14 +
   35.15 +AC_DEFUN([OPENBSD_LIBTOOL_WORKAROUND],
   35.16 +         [case "${host_os}" in
   35.17 +            openbsd*)
   35.18 +              sed 's/^need_version=no$/need_version=yes/' < libtool > libtool.tmp && mv -f libtool.tmp libtool
   35.19 +            ;;
   35.20 +          esac
   35.21 +          ])
    36.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    36.2 +++ b/m4/zlib.m4	Sat Feb 20 21:18:28 2010 -0800
    36.3 @@ -0,0 +1,64 @@
    36.4 +###############################################################################
    36.5 +## $Id: zlib.m4,v 1.1 2003/09/17 22:26:07 hipnod Exp $
    36.6 +###############################################################################
    36.7 +
    36.8 +dnl
    36.9 +dnl Check for zlib in some bizarre locations...
   36.10 +dnl
   36.11 +AC_DEFUN([GIFT_PLUGIN_CHECK_ZLIB], 
   36.12 +[
   36.13 +   # set the minimum ZLIB_VER we're willing to link against...
   36.14 +   ZLIB_VER=1.1.4
   36.15 +
   36.16 +   # for some reason Darwin has a 1.1.3 version with the 1.1.4 security fix
   36.17 +   # applied backwards...
   36.18 +   case "${host}" in
   36.19 +   *-*-darwin* )
   36.20 +     ZLIB_VER=1.1.3
   36.21 +   ;;
   36.22 +   esac
   36.23 +
   36.24 +   if test x"$OPT_ZLIB" = xno; then
   36.25 +      zlib_ok=no
   36.26 +   else
   36.27 +      ZLIB_DIRS="$OPT_ZLIB /usr /usr/local /sw"
   36.28 +      for ZLIB_DIR in $ZLIB_DIRS;
   36.29 +      do
   36.30 +         LIBS_SAVE="$LIBS"
   36.31 +         CPPFLAGS_SAVE="$CPPFLAGS"
   36.32 +         LIBS="$LIBS -L${ZLIB_DIR}/lib"
   36.33 +         CPPFLAGS="$CPPFLAGS -I${ZLIB_DIR}/include"
   36.34 +         AC_CACHE_CHECK(
   36.35 +            [for zlib version ${ZLIB_VER}+ in ${ZLIB_DIR}],
   36.36 +            zlib_ok,
   36.37 +            AC_TRY_RUN(
   36.38 +              [#include <zlib.h>
   36.39 +               #include <string.h>
   36.40 +               void main() {
   36.41 +                 exit(strcmp(ZLIB_VERSION, "${ZLIB_VER}") < 0);
   36.42 +               }
   36.43 +               ],
   36.44 +              [zlib_ok=yes],
   36.45 +              [zlib_ok=no],
   36.46 +              [zlib_ok=yes]))
   36.47 +
   36.48 +         if test "$zlib_ok" != "no"; then
   36.49 +            AC_CHECK_FUNC(gzread, , AC_CHECK_LIB(z, gzread))
   36.50 +            AC_DEFINE(USE_ZLIB)
   36.51 +            AC_SUBST(USE_ZLIB)
   36.52 +            break
   36.53 +         fi
   36.54 +         LIBS="$LIBS_SAVE"
   36.55 +         CPPFLAGS="$CPPFLAGS_SAVE"
   36.56 +      done
   36.57 +
   36.58 +      if test "$zlib_ok" = "no"; then
   36.59 +         AC_MSG_ERROR([
   36.60 +NOTE: The zlib compression library version ${ZLIB_VER} or greater was not found
   36.61 +      on your system.
   36.62 +
   36.63 +      If zlib ${ZLIB_VER}+ is not installed, install it.
   36.64 +         ])
   36.65 +      fi
   36.66 +   fi
   36.67 +])
    37.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    37.2 +++ b/missing	Sat Feb 20 21:18:28 2010 -0800
    37.3 @@ -0,0 +1,336 @@
    37.4 +#! /bin/sh
    37.5 +# Common stub for a few missing GNU programs while installing.
    37.6 +# Copyright (C) 1996, 1997, 1999, 2000, 2002, 2003 Free Software Foundation, Inc.
    37.7 +# Originally by Fran,cois Pinard <pinard@iro.umontreal.ca>, 1996.
    37.8 +
    37.9 +# This program is free software; you can redistribute it and/or modify
   37.10 +# it under the terms of the GNU General Public License as published by
   37.11 +# the Free Software Foundation; either version 2, or (at your option)
   37.12 +# any later version.
   37.13 +
   37.14 +# This program is distributed in the hope that it will be useful,
   37.15 +# but WITHOUT ANY WARRANTY; without even the implied warranty of
   37.16 +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
   37.17 +# GNU General Public License for more details.
   37.18 +
   37.19 +# You should have received a copy of the GNU General Public License
   37.20 +# along with this program; if not, write to the Free Software
   37.21 +# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
   37.22 +# 02111-1307, USA.
   37.23 +
   37.24 +# As a special exception to the GNU General Public License, if you
   37.25 +# distribute this file as part of a program that contains a
   37.26 +# configuration script generated by Autoconf, you may include it under
   37.27 +# the same distribution terms that you use for the rest of that program.
   37.28 +
   37.29 +if test $# -eq 0; then
   37.30 +  echo 1>&2 "Try \`$0 --help' for more information"
   37.31 +  exit 1
   37.32 +fi
   37.33 +
   37.34 +run=:
   37.35 +
   37.36 +# In the cases where this matters, `missing' is being run in the
   37.37 +# srcdir already.
   37.38 +if test -f configure.ac; then
   37.39 +  configure_ac=configure.ac
   37.40 +else
   37.41 +  configure_ac=configure.in
   37.42 +fi
   37.43 +
   37.44 +case "$1" in
   37.45 +--run)
   37.46 +  # Try to run requested program, and just exit if it succeeds.
   37.47 +  run=
   37.48 +  shift
   37.49 +  "$@" && exit 0
   37.50 +  ;;
   37.51 +esac
   37.52 +
   37.53 +# If it does not exist, or fails to run (possibly an outdated version),
   37.54 +# try to emulate it.
   37.55 +case "$1" in
   37.56 +
   37.57 +  -h|--h|--he|--hel|--help)
   37.58 +    echo "\
   37.59 +$0 [OPTION]... PROGRAM [ARGUMENT]...
   37.60 +
   37.61 +Handle \`PROGRAM [ARGUMENT]...' for when PROGRAM is missing, or return an
   37.62 +error status if there is no known handling for PROGRAM.
   37.63 +
   37.64 +Options:
   37.65 +  -h, --help      display this help and exit
   37.66 +  -v, --version   output version information and exit
   37.67 +  --run           try to run the given command, and emulate it if it fails
   37.68 +
   37.69 +Supported PROGRAM values:
   37.70 +  aclocal      touch file \`aclocal.m4'
   37.71 +  autoconf     touch file \`configure'
   37.72 +  autoheader   touch file \`config.h.in'
   37.73 +  automake     touch all \`Makefile.in' files
   37.74 +  bison        create \`y.tab.[ch]', if possible, from existing .[ch]
   37.75 +  flex         create \`lex.yy.c', if possible, from existing .c
   37.76 +  help2man     touch the output file
   37.77 +  lex          create \`lex.yy.c', if possible, from existing .c
   37.78 +  makeinfo     touch the output file
   37.79 +  tar          try tar, gnutar, gtar, then tar without non-portable flags
   37.80 +  yacc         create \`y.tab.[ch]', if possible, from existing .[ch]"
   37.81 +    ;;
   37.82 +
   37.83 +  -v|--v|--ve|--ver|--vers|--versi|--versio|--version)
   37.84 +    echo "missing 0.4 - GNU automake"
   37.85 +    ;;
   37.86 +
   37.87 +  -*)
   37.88 +    echo 1>&2 "$0: Unknown \`$1' option"
   37.89 +    echo 1>&2 "Try \`$0 --help' for more information"
   37.90 +    exit 1
   37.91 +    ;;
   37.92 +
   37.93 +  aclocal*)
   37.94 +    if test -z "$run" && ($1 --version) > /dev/null 2>&1; then
   37.95 +       # We have it, but it failed.
   37.96 +       exit 1
   37.97 +    fi
   37.98 +
   37.99 +    echo 1>&2 "\
  37.100 +WARNING: \`$1' is missing on your system.  You should only need it if
  37.101 +         you modified \`acinclude.m4' or \`${configure_ac}'.  You might want
  37.102 +         to install the \`Automake' and \`Perl' packages.  Grab them from
  37.103 +         any GNU archive site."
  37.104 +    touch aclocal.m4
  37.105 +    ;;
  37.106 +
  37.107 +  autoconf)
  37.108 +    if test -z "$run" && ($1 --version) > /dev/null 2>&1; then
  37.109 +       # We have it, but it failed.
  37.110 +       exit 1
  37.111 +    fi
  37.112 +
  37.113 +    echo 1>&2 "\
  37.114 +WARNING: \`$1' is missing on your system.  You should only need it if
  37.115 +         you modified \`${configure_ac}'.  You might want to install the
  37.116 +         \`Autoconf' and \`GNU m4' packages.  Grab them from any GNU
  37.117 +         archive site."
  37.118 +    touch configure
  37.119 +    ;;
  37.120 +
  37.121 +  autoheader)
  37.122 +    if test -z "$run" && ($1 --version) > /dev/null 2>&1; then
  37.123 +       # We have it, but it failed.
  37.124 +       exit 1
  37.125 +    fi
  37.126 +
  37.127 +    echo 1>&2 "\
  37.128 +WARNING: \`$1' is missing on your system.  You should only need it if
  37.129 +         you modified \`acconfig.h' or \`${configure_ac}'.  You might want
  37.130 +         to install the \`Autoconf' and \`GNU m4' packages.  Grab them
  37.131 +         from any GNU archive site."
  37.132 +    files=`sed -n 's/^[ ]*A[CM]_CONFIG_HEADER(\([^)]*\)).*/\1/p' ${configure_ac}`
  37.133 +    test -z "$files" && files="config.h"
  37.134 +    touch_files=
  37.135 +    for f in $files; do
  37.136 +      case "$f" in
  37.137 +      *:*) touch_files="$touch_files "`echo "$f" |
  37.138 +				       sed -e 's/^[^:]*://' -e 's/:.*//'`;;
  37.139 +      *) touch_files="$touch_files $f.in";;
  37.140 +      esac
  37.141 +    done
  37.142 +    touch $touch_files
  37.143 +    ;;
  37.144 +
  37.145 +  automake*)
  37.146 +    if test -z "$run" && ($1 --version) > /dev/null 2>&1; then
  37.147 +       # We have it, but it failed.
  37.148 +       exit 1
  37.149 +    fi
  37.150 +
  37.151 +    echo 1>&2 "\
  37.152 +WARNING: \`$1' is missing on your system.  You should only need it if
  37.153 +         you modified \`Makefile.am', \`acinclude.m4' or \`${configure_ac}'.
  37.154 +         You might want to install the \`Automake' and \`Perl' packages.
  37.155 +         Grab them from any GNU archive site."
  37.156 +    find . -type f -name Makefile.am -print |
  37.157 +	   sed 's/\.am$/.in/' |
  37.158 +	   while read f; do touch "$f"; done
  37.159 +    ;;
  37.160 +
  37.161 +  autom4te)
  37.162 +    if test -z "$run" && ($1 --version) > /dev/null 2>&1; then
  37.163 +       # We have it, but it failed.
  37.164 +       exit 1
  37.165 +    fi
  37.166 +
  37.167 +    echo 1>&2 "\
  37.168 +WARNING: \`$1' is needed, and you do not seem to have it handy on your
  37.169 +         system.  You might have modified some files without having the
  37.170 +         proper tools for further handling them.
  37.171 +         You can get \`$1' as part of \`Autoconf' from any GNU
  37.172 +         archive site."
  37.173 +
  37.174 +    file=`echo "$*" | sed -n 's/.*--output[ =]*\([^ ]*\).*/\1/p'`
  37.175 +    test -z "$file" && file=`echo "$*" | sed -n 's/.*-o[ ]*\([^ ]*\).*/\1/p'`
  37.176 +    if test -f "$file"; then
  37.177 +	touch $file
  37.178 +    else
  37.179 +	test -z "$file" || exec >$file
  37.180 +	echo "#! /bin/sh"
  37.181 +	echo "# Created by GNU Automake missing as a replacement of"
  37.182 +	echo "#  $ $@"
  37.183 +	echo "exit 0"
  37.184 +	chmod +x $file
  37.185 +	exit 1
  37.186 +    fi
  37.187 +    ;;
  37.188 +
  37.189 +  bison|yacc)
  37.190 +    echo 1>&2 "\
  37.191 +WARNING: \`$1' is missing on your system.  You should only need it if
  37.192 +         you modified a \`.y' file.  You may need the \`Bison' package
  37.193 +         in order for those modifications to take effect.  You can get
  37.194 +         \`Bison' from any GNU archive site."
  37.195 +    rm -f y.tab.c y.tab.h
  37.196 +    if [ $# -ne 1 ]; then
  37.197 +        eval LASTARG="\${$#}"
  37.198 +	case "$LASTARG" in
  37.199 +	*.y)
  37.200 +	    SRCFILE=`echo "$LASTARG" | sed 's/y$/c/'`
  37.201 +	    if [ -f "$SRCFILE" ]; then
  37.202 +	         cp "$SRCFILE" y.tab.c
  37.203 +	    fi
  37.204 +	    SRCFILE=`echo "$LASTARG" | sed 's/y$/h/'`
  37.205 +	    if [ -f "$SRCFILE" ]; then
  37.206 +	         cp "$SRCFILE" y.tab.h
  37.207 +	    fi
  37.208 +	  ;;
  37.209 +	esac
  37.210 +    fi
  37.211 +    if [ ! -f y.tab.h ]; then
  37.212 +	echo >y.tab.h
  37.213 +    fi
  37.214 +    if [ ! -f y.tab.c ]; then
  37.215 +	echo 'main() { return 0; }' >y.tab.c
  37.216 +    fi
  37.217 +    ;;
  37.218 +
  37.219 +  lex|flex)
  37.220 +    echo 1>&2 "\
  37.221 +WARNING: \`$1' is missing on your system.  You should only need it if
  37.222 +         you modified a \`.l' file.  You may need the \`Flex' package
  37.223 +         in order for those modifications to take effect.  You can get
  37.224 +         \`Flex' from any GNU archive site."
  37.225 +    rm -f lex.yy.c
  37.226 +    if [ $# -ne 1 ]; then
  37.227 +        eval LASTARG="\${$#}"
  37.228 +	case "$LASTARG" in
  37.229 +	*.l)
  37.230 +	    SRCFILE=`echo "$LASTARG" | sed 's/l$/c/'`
  37.231 +	    if [ -f "$SRCFILE" ]; then
  37.232 +	         cp "$SRCFILE" lex.yy.c
  37.233 +	    fi
  37.234 +	  ;;
  37.235 +	esac
  37.236 +    fi
  37.237 +    if [ ! -f lex.yy.c ]; then
  37.238 +	echo 'main() { return 0; }' >lex.yy.c
  37.239 +    fi
  37.240 +    ;;
  37.241 +
  37.242 +  help2man)
  37.243 +    if test -z "$run" && ($1 --version) > /dev/null 2>&1; then
  37.244 +       # We have it, but it failed.
  37.245 +       exit 1
  37.246 +    fi
  37.247 +
  37.248 +    echo 1>&2 "\
  37.249 +WARNING: \`$1' is missing on your system.  You should only need it if
  37.250 +	 you modified a dependency of a manual page.  You may need the
  37.251 +	 \`Help2man' package in order for those modifications to take
  37.252 +	 effect.  You can get \`Help2man' from any GNU archive site."
  37.253 +
  37.254 +    file=`echo "$*" | sed -n 's/.*-o \([^ ]*\).*/\1/p'`
  37.255 +    if test -z "$file"; then
  37.256 +	file=`echo "$*" | sed -n 's/.*--output=\([^ ]*\).*/\1/p'`
  37.257 +    fi
  37.258 +    if [ -f "$file" ]; then
  37.259 +	touch $file
  37.260 +    else
  37.261 +	test -z "$file" || exec >$file
  37.262 +	echo ".ab help2man is required to generate this page"
  37.263 +	exit 1
  37.264 +    fi
  37.265 +    ;;
  37.266 +
  37.267 +  makeinfo)
  37.268 +    if test -z "$run" && (makeinfo --version) > /dev/null 2>&1; then
  37.269 +       # We have makeinfo, but it failed.
  37.270 +       exit 1
  37.271 +    fi
  37.272 +
  37.273 +    echo 1>&2 "\
  37.274 +WARNING: \`$1' is missing on your system.  You should only need it if
  37.275 +         you modified a \`.texi' or \`.texinfo' file, or any other file
  37.276 +         indirectly affecting the aspect of the manual.  The spurious
  37.277 +         call might also be the consequence of using a buggy \`make' (AIX,
  37.278 +         DU, IRIX).  You might want to install the \`Texinfo' package or
  37.279 +         the \`GNU make' package.  Grab either from any GNU archive site."
  37.280 +    file=`echo "$*" | sed -n 's/.*-o \([^ ]*\).*/\1/p'`
  37.281 +    if test -z "$file"; then
  37.282 +      file=`echo "$*" | sed 's/.* \([^ ]*\) *$/\1/'`
  37.283 +      file=`sed -n '/^@setfilename/ { s/.* \([^ ]*\) *$/\1/; p; q; }' $file`
  37.284 +    fi
  37.285 +    touch $file
  37.286 +    ;;
  37.287 +
  37.288 +  tar)
  37.289 +    shift
  37.290 +    if test -n "$run"; then
  37.291 +      echo 1>&2 "ERROR: \`tar' requires --run"
  37.292 +      exit 1
  37.293 +    fi
  37.294 +
  37.295 +    # We have already tried tar in the generic part.
  37.296 +    # Look for gnutar/gtar before invocation to avoid ugly error
  37.297 +    # messages.
  37.298 +    if (gnutar --version > /dev/null 2>&1); then
  37.299 +       gnutar "$@" && exit 0
  37.300 +    fi
  37.301 +    if (gtar --version > /dev/null 2>&1); then
  37.302 +       gtar "$@" && exit 0
  37.303 +    fi
  37.304 +    firstarg="$1"
  37.305 +    if shift; then
  37.306 +	case "$firstarg" in
  37.307 +	*o*)
  37.308 +	    firstarg=`echo "$firstarg" | sed s/o//`
  37.309 +	    tar "$firstarg" "$@" && exit 0
  37.310 +	    ;;
  37.311 +	esac
  37.312 +	case "$firstarg" in
  37.313 +	*h*)
  37.314 +	    firstarg=`echo "$firstarg" | sed s/h//`
  37.315 +	    tar "$firstarg" "$@" && exit 0
  37.316 +	    ;;
  37.317 +	esac
  37.318 +    fi
  37.319 +
  37.320 +    echo 1>&2 "\
  37.321 +WARNING: I can't seem to be able to run \`tar' with the given arguments.
  37.322 +         You may want to install GNU tar or Free paxutils, or check the
  37.323 +         command line arguments."
  37.324 +    exit 1
  37.325 +    ;;
  37.326 +
  37.327 +  *)
  37.328 +    echo 1>&2 "\
  37.329 +WARNING: \`$1' is needed, and you do not seem to have it handy on your
  37.330 +         system.  You might have modified some files without having the
  37.331 +         proper tools for further handling them.  Check the \`README' file,
  37.332 +         it often tells you about the needed prerequisites for installing
  37.333 +         this package.  You may also peek at any GNU archive site, in case
  37.334 +         some other package would contain this missing \`$1' program."
  37.335 +    exit 1
  37.336 +    ;;
  37.337 +esac
  37.338 +
  37.339 +exit 0
    38.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    38.2 +++ b/mkinstalldirs	Sat Feb 20 21:18:28 2010 -0800
    38.3 @@ -0,0 +1,111 @@
    38.4 +#! /bin/sh
    38.5 +# mkinstalldirs --- make directory hierarchy
    38.6 +# Author: Noah Friedman <friedman@prep.ai.mit.edu>
    38.7 +# Created: 1993-05-16
    38.8 +# Public domain
    38.9 +
   38.10 +errstatus=0
   38.11 +dirmode=""
   38.12 +
   38.13 +usage="\
   38.14 +Usage: mkinstalldirs [-h] [--help] [-m mode] dir ..."
   38.15 +
   38.16 +# process command line arguments
   38.17 +while test $# -gt 0 ; do
   38.18 +  case $1 in
   38.19 +    -h | --help | --h*)         # -h for help
   38.20 +      echo "$usage" 1>&2
   38.21 +      exit 0
   38.22 +      ;;
   38.23 +    -m)                         # -m PERM arg
   38.24 +      shift
   38.25 +      test $# -eq 0 && { echo "$usage" 1>&2; exit 1; }
   38.26 +      dirmode=$1
   38.27 +      shift
   38.28 +      ;;
   38.29 +    --)                         # stop option processing
   38.30 +      shift
   38.31 +      break
   38.32 +      ;;
   38.33 +    -*)                         # unknown option
   38.34 +      echo "$usage" 1>&2
   38.35 +      exit 1
   38.36 +      ;;
   38.37 +    *)                          # first non-opt arg
   38.38 +      break
   38.39 +      ;;
   38.40 +  esac
   38.41 +done
   38.42 +
   38.43 +for file
   38.44 +do
   38.45 +  if test -d "$file"; then
   38.46 +    shift
   38.47 +  else
   38.48 +    break
   38.49 +  fi
   38.50 +done
   38.51 +
   38.52 +case $# in
   38.53 +  0) exit 0 ;;
   38.54 +esac
   38.55 +
   38.56 +case $dirmode in
   38.57 +  '')
   38.58 +    if mkdir -p -- . 2>/dev/null; then
   38.59 +      echo "mkdir -p -- $*"
   38.60 +      exec mkdir -p -- "$@"
   38.61 +    fi
   38.62 +    ;;
   38.63 +  *)
   38.64 +    if mkdir -m "$dirmode" -p -- . 2>/dev/null; then
   38.65 +      echo "mkdir -m $dirmode -p -- $*"
   38.66 +      exec mkdir -m "$dirmode" -p -- "$@"
   38.67 +    fi
   38.68 +    ;;
   38.69 +esac
   38.70 +
   38.71 +for file
   38.72 +do
   38.73 +  set fnord `echo ":$file" | sed -ne 's/^:\//#/;s/^://;s/\// /g;s/^#/\//;p'`
   38.74 +  shift
   38.75 +
   38.76 +  pathcomp=
   38.77 +  for d
   38.78 +  do
   38.79 +    pathcomp="$pathcomp$d"
   38.80 +    case $pathcomp in
   38.81 +      -*) pathcomp=./$pathcomp ;;
   38.82 +    esac
   38.83 +
   38.84 +    if test ! -d "$pathcomp"; then
   38.85 +      echo "mkdir $pathcomp"
   38.86 +
   38.87 +      mkdir "$pathcomp" || lasterr=$?
   38.88 +
   38.89 +      if test ! -d "$pathcomp"; then
   38.90 +  	errstatus=$lasterr
   38.91 +      else
   38.92 +  	if test ! -z "$dirmode"; then
   38.93 +	  echo "chmod $dirmode $pathcomp"
   38.94 +    	  lasterr=""
   38.95 +  	  chmod "$dirmode" "$pathcomp" || lasterr=$?
   38.96 +
   38.97 +  	  if test ! -z "$lasterr"; then
   38.98 +  	    errstatus=$lasterr
   38.99 +  	  fi
  38.100 +  	fi
  38.101 +      fi
  38.102 +    fi
  38.103 +
  38.104 +    pathcomp="$pathcomp/"
  38.105 +  done
  38.106 +done
  38.107 +
  38.108 +exit $errstatus
  38.109 +
  38.110 +# Local Variables:
  38.111 +# mode: shell-script
  38.112 +# sh-indentation: 2
  38.113 +# End:
  38.114 +# mkinstalldirs ends here
    39.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    39.2 +++ b/src/Makefile.am	Sat Feb 20 21:18:28 2010 -0800
    39.3 @@ -0,0 +1,68 @@
    39.4 +# $Id: Makefile.am,v 1.19 2004/03/26 11:44:12 hipnod Exp $
    39.5 +###############################################################################
    39.6 +
    39.7 +AM_CFLAGS = \
    39.8 +	$(LIBXML2_CFLAGS) \
    39.9 +	$(GNUTELLA_CFLAGS)
   39.10 +
   39.11 +INCLUDES = \
   39.12 +	-I$(top_srcdir)
   39.13 +
   39.14 +SUBDIRS = \
   39.15 +	encoding \
   39.16 +	io \
   39.17 +	message \
   39.18 +	transfer
   39.19 +
   39.20 +EXTRA_DIST = \
   39.21 +	Makefile.msvc
   39.22 +
   39.23 +plugindir = $(libdir)/giFT
   39.24 +
   39.25 +plugin_LTLIBRARIES = libGnutella.la
   39.26 +
   39.27 +libGnutella_la_SOURCES = \
   39.28 +	dns.c             dns.h \
   39.29 +	file_cache.c      file_cache.h \
   39.30 +	gt_accept.c       gt_accept.h \
   39.31 +	gt_ban.c          gt_ban.h \
   39.32 +	gt_bind.c         gt_bind.h \
   39.33 +	gt_conf.c         gt_conf.h \
   39.34 +	gt_connect.c      gt_connect.h \
   39.35 +	gt_gnutella.c     gt_gnutella.h \
   39.36 +	gt_guid.c         gt_guid.h \
   39.37 +	gt_http_client.c  gt_http_client.h \
   39.38 +	gt_http_server.c  gt_http_server.h \
   39.39 +	gt_netorg.c       gt_netorg.h \
   39.40 +	gt_node_cache.c   gt_node_cache.h \
   39.41 +	gt_node.c         gt_node.h \
   39.42 +	gt_node_list.c    gt_node_list.h \
   39.43 +	gt_packet.c       gt_packet.h \
   39.44 +	gt_query_route.c  gt_query_route.h \
   39.45 +	gt_search.c       gt_search.h \
   39.46 +	gt_search_exec.c  gt_search_exec.h \
   39.47 +	gt_share.c        gt_share.h \
   39.48 +	gt_share_file.c   gt_share_file.h \
   39.49 +	gt_share_state.c  gt_share_state.h \
   39.50 +	gt_stats.c        gt_stats.h \
   39.51 +	gt_urn.c          gt_urn.h \
   39.52 +	gt_utils.c        gt_utils.h \
   39.53 +	gt_version.c      gt_version.h \
   39.54 +	gt_web_cache.c    gt_web_cache.h \
   39.55 +	gt_xfer.c         gt_xfer.h \
   39.56 +	gt_xfer_obj.c     gt_xfer_obj.h \
   39.57 +	http_request.c    http_request.h \
   39.58 +	sha1.c            sha1.h \
   39.59 +	trie.c            trie.h \
   39.60 +	xml.c             xml.h
   39.61 +
   39.62 +libGnutella_la_LIBADD = \
   39.63 +	$(top_builddir)/src/encoding/libgt_encoding.la \
   39.64 +	$(top_builddir)/src/io/libgt_io.la \
   39.65 +	$(top_builddir)/src/message/libgt_message.la \
   39.66 +	$(top_builddir)/src/transfer/libgt_transfer.la \
   39.67 +	$(LIBXML2_LIBS) \
   39.68 +	$(GNUTELLA_LIBS)
   39.69 +
   39.70 +libGnutella_la_LDFLAGS = \
   39.71 +	$(PLUGIN_LDFLAGS)
    40.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    40.2 +++ b/src/Makefile.in	Sat Feb 20 21:18:28 2010 -0800
    40.3 @@ -0,0 +1,679 @@
    40.4 +# Makefile.in generated by automake 1.7.9 from Makefile.am.
    40.5 +# @configure_input@
    40.6 +
    40.7 +# Copyright 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003
    40.8 +# Free Software Foundation, Inc.
    40.9 +# This Makefile.in is free software; the Free Software Foundation
   40.10 +# gives unlimited permission to copy and/or distribute it,
   40.11 +# with or without modifications, as long as this notice is preserved.
   40.12 +
   40.13 +# This program is distributed in the hope that it will be useful,
   40.14 +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
   40.15 +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
   40.16 +# PARTICULAR PURPOSE.
   40.17 +
   40.18 +@SET_MAKE@
   40.19 +
   40.20 +# $Id: Makefile.am,v 1.19 2004/03/26 11:44:12 hipnod Exp $
   40.21 +###############################################################################
   40.22 +
   40.23 +srcdir = @srcdir@
   40.24 +top_srcdir = @top_srcdir@
   40.25 +VPATH = @srcdir@
   40.26 +pkgdatadir = $(datadir)/@PACKAGE@
   40.27 +pkglibdir = $(libdir)/@PACKAGE@
   40.28 +pkgincludedir = $(includedir)/@PACKAGE@
   40.29 +top_builddir = ..
   40.30 +
   40.31 +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
   40.32 +INSTALL = @INSTALL@
   40.33 +install_sh_DATA = $(install_sh) -c -m 644
   40.34 +install_sh_PROGRAM = $(install_sh) -c
   40.35 +install_sh_SCRIPT = $(install_sh) -c
   40.36 +INSTALL_HEADER = $(INSTALL_DATA)
   40.37 +transform = $(program_transform_name)
   40.38 +NORMAL_INSTALL = :
   40.39 +PRE_INSTALL = :
   40.40 +POST_INSTALL = :
   40.41 +NORMAL_UNINSTALL = :
   40.42 +PRE_UNINSTALL = :
   40.43 +POST_UNINSTALL = :
   40.44 +host_triplet = @host@
   40.45 +ACLOCAL = @ACLOCAL@
   40.46 +AMDEP_FALSE = @AMDEP_FALSE@
   40.47 +AMDEP_TRUE = @AMDEP_TRUE@
   40.48 +AMTAR = @AMTAR@
   40.49 +AR = @AR@
   40.50 +AUTOCONF = @AUTOCONF@
   40.51 +AUTOHEADER = @AUTOHEADER@
   40.52 +AUTOMAKE = @AUTOMAKE@
   40.53 +AWK = @AWK@
   40.54 +CC = @CC@
   40.55 +CCDEPMODE = @CCDEPMODE@
   40.56 +CFLAGS = @CFLAGS@
   40.57 +CPP = @CPP@
   40.58 +CPPFLAGS = @CPPFLAGS@
   40.59 +CXX = @CXX@
   40.60 +CXXCPP = @CXXCPP@
   40.61 +CXXDEPMODE = @CXXDEPMODE@
   40.62 +CXXFLAGS = @CXXFLAGS@
   40.63 +CYGPATH_W = @CYGPATH_W@
   40.64 +DEFS = @DEFS@
   40.65 +DEPDIR = @DEPDIR@
   40.66 +ECHO = @ECHO@
   40.67 +ECHO_C = @ECHO_C@
   40.68 +ECHO_N = @ECHO_N@
   40.69 +ECHO_T = @ECHO_T@
   40.70 +EGREP = @EGREP@
   40.71 +EXEEXT = @EXEEXT@
   40.72 +F77 = @F77@
   40.73 +FFLAGS = @FFLAGS@
   40.74 +GNUTELLA_CFLAGS = @GNUTELLA_CFLAGS@
   40.75 +GNUTELLA_LIBS = @GNUTELLA_LIBS@
   40.76 +INSTALL_DATA = @INSTALL_DATA@
   40.77 +INSTALL_PROGRAM = @INSTALL_PROGRAM@
   40.78 +INSTALL_SCRIPT = @INSTALL_SCRIPT@
   40.79 +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
   40.80 +LDFLAGS = @LDFLAGS@
   40.81 +LIBOBJS = @LIBOBJS@
   40.82 +LIBS = @LIBS@
   40.83 +LIBTOOL = @LIBTOOL@
   40.84 +LIBXML2_CFLAGS = @LIBXML2_CFLAGS@
   40.85 +LIBXML2_LIBS = @LIBXML2_LIBS@
   40.86 +LN_S = @LN_S@
   40.87 +LTLIBOBJS = @LTLIBOBJS@
   40.88 +MAINT = @MAINT@
   40.89 +MAINTAINER_MODE_FALSE = @MAINTAINER_MODE_FALSE@
   40.90 +MAINTAINER_MODE_TRUE = @MAINTAINER_MODE_TRUE@
   40.91 +MAKEINFO = @MAKEINFO@
   40.92 +OBJEXT = @OBJEXT@
   40.93 +PACKAGE = @PACKAGE@
   40.94 +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
   40.95 +PACKAGE_NAME = @PACKAGE_NAME@
   40.96 +PACKAGE_STRING = @PACKAGE_STRING@
   40.97 +PACKAGE_TARNAME = @PACKAGE_TARNAME@
   40.98 +PACKAGE_VERSION = @PACKAGE_VERSION@
   40.99 +PATH_SEPARATOR = @PATH_SEPARATOR@
  40.100 +PKG_CONFIG = @PKG_CONFIG@
  40.101 +PLUGIN_LDFLAGS = @PLUGIN_LDFLAGS@
  40.102 +RANLIB = @RANLIB@
  40.103 +SET_MAKE = @SET_MAKE@
  40.104 +SHELL = @SHELL@
  40.105 +STRIP = @STRIP@
  40.106 +USE_ZLIB = @USE_ZLIB@
  40.107 +VERSION = @VERSION@
  40.108 +XML2_CONFIG = @XML2_CONFIG@
  40.109 +ac_ct_AR = @ac_ct_AR@
  40.110 +ac_ct_CC = @ac_ct_CC@
  40.111 +ac_ct_CXX = @ac_ct_CXX@
  40.112 +ac_ct_F77 = @ac_ct_F77@
  40.113 +ac_ct_RANLIB = @ac_ct_RANLIB@
  40.114 +ac_ct_STRIP = @ac_ct_STRIP@
  40.115 +am__fastdepCC_FALSE = @am__fastdepCC_FALSE@
  40.116 +am__fastdepCC_TRUE = @am__fastdepCC_TRUE@
  40.117 +am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@
  40.118 +am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@
  40.119 +am__include = @am__include@
  40.120 +am__leading_dot = @am__leading_dot@
  40.121 +am__quote = @am__quote@
  40.122 +bindir = @bindir@
  40.123 +build = @build@
  40.124 +build_alias = @build_alias@
  40.125 +build_cpu = @build_cpu@
  40.126 +build_os = @build_os@
  40.127 +build_vendor = @build_vendor@
  40.128 +datadir = @datadir@
  40.129 +exec_prefix = @exec_prefix@
  40.130 +host = @host@
  40.131 +host_alias = @host_alias@
  40.132 +host_cpu = @host_cpu@
  40.133 +host_os = @host_os@
  40.134 +host_vendor = @host_vendor@
  40.135 +includedir = @includedir@
  40.136 +infodir = @infodir@
  40.137 +install_sh = @install_sh@
  40.138 +libdir = @libdir@
  40.139 +libexecdir = @libexecdir@
  40.140 +localstatedir = @localstatedir@
  40.141 +mandir = @mandir@
  40.142 +oldincludedir = @oldincludedir@
  40.143 +prefix = @prefix@
  40.144 +program_transform_name = @program_transform_name@
  40.145 +sbindir = @sbindir@
  40.146 +sharedstatedir = @sharedstatedir@
  40.147 +sysconfdir = @sysconfdir@
  40.148 +target_alias = @target_alias@
  40.149 +
  40.150 +AM_CFLAGS = \
  40.151 +	$(LIBXML2_CFLAGS) \
  40.152 +	$(GNUTELLA_CFLAGS)
  40.153 +
  40.154 +
  40.155 +INCLUDES = \
  40.156 +	-I$(top_srcdir)
  40.157 +
  40.158 +
  40.159 +SUBDIRS = \
  40.160 +	encoding \
  40.161 +	io \
  40.162 +	message \
  40.163 +	transfer
  40.164 +
  40.165 +
  40.166 +EXTRA_DIST = \
  40.167 +	Makefile.msvc
  40.168 +
  40.169 +
  40.170 +plugindir = $(libdir)/giFT
  40.171 +
  40.172 +plugin_LTLIBRARIES = libGnutella.la
  40.173 +
  40.174 +libGnutella_la_SOURCES = \
  40.175 +	dns.c             dns.h \
  40.176 +	file_cache.c      file_cache.h \
  40.177 +	gt_accept.c       gt_accept.h \
  40.178 +	gt_ban.c          gt_ban.h \
  40.179 +	gt_bind.c         gt_bind.h \
  40.180 +	gt_conf.c         gt_conf.h \
  40.181 +	gt_connect.c      gt_connect.h \
  40.182 +	gt_gnutella.c     gt_gnutella.h \
  40.183 +	gt_guid.c         gt_guid.h \
  40.184 +	gt_http_client.c  gt_http_client.h \
  40.185 +	gt_http_server.c  gt_http_server.h \
  40.186 +	gt_netorg.c       gt_netorg.h \
  40.187 +	gt_node_cache.c   gt_node_cache.h \
  40.188 +	gt_node.c         gt_node.h \
  40.189 +	gt_node_list.c    gt_node_list.h \
  40.190 +	gt_packet.c       gt_packet.h \
  40.191 +	gt_query_route.c  gt_query_route.h \
  40.192 +	gt_search.c       gt_search.h \
  40.193 +	gt_search_exec.c  gt_search_exec.h \
  40.194 +	gt_share.c        gt_share.h \
  40.195 +	gt_share_file.c   gt_share_file.h \
  40.196 +	gt_share_state.c  gt_share_state.h \
  40.197 +	gt_stats.c        gt_stats.h \
  40.198 +	gt_urn.c          gt_urn.h \
  40.199 +	gt_utils.c        gt_utils.h \
  40.200 +	gt_version.c      gt_version.h \
  40.201 +	gt_web_cache.c    gt_web_cache.h \
  40.202 +	gt_xfer.c         gt_xfer.h \
  40.203 +	gt_xfer_obj.c     gt_xfer_obj.h \
  40.204 +	http_request.c    http_request.h \
  40.205 +	sha1.c            sha1.h \
  40.206 +	trie.c            trie.h \
  40.207 +	xml.c             xml.h
  40.208 +
  40.209 +
  40.210 +libGnutella_la_LIBADD = \
  40.211 +	$(top_builddir)/src/encoding/libgt_encoding.la \
  40.212 +	$(top_builddir)/src/io/libgt_io.la \
  40.213 +	$(top_builddir)/src/message/libgt_message.la \
  40.214 +	$(top_builddir)/src/transfer/libgt_transfer.la \
  40.215 +	$(LIBXML2_LIBS) \
  40.216 +	$(GNUTELLA_LIBS)
  40.217 +
  40.218 +
  40.219 +libGnutella_la_LDFLAGS = \
  40.220 +	$(PLUGIN_LDFLAGS)
  40.221 +
  40.222 +subdir = src
  40.223 +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
  40.224 +mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
  40.225 +CONFIG_HEADER = $(top_builddir)/config.h
  40.226 +CONFIG_CLEAN_FILES =
  40.227 +LTLIBRARIES = $(plugin_LTLIBRARIES)
  40.228 +
  40.229 +libGnutella_la_DEPENDENCIES = \
  40.230 +	$(top_builddir)/src/encoding/libgt_encoding.la \
  40.231 +	$(top_builddir)/src/io/libgt_io.la \
  40.232 +	$(top_builddir)/src/message/libgt_message.la \
  40.233 +	$(top_builddir)/src/transfer/libgt_transfer.la
  40.234 +am_libGnutella_la_OBJECTS = dns.lo file_cache.lo gt_accept.lo gt_ban.lo \
  40.235 +	gt_bind.lo gt_conf.lo gt_connect.lo gt_gnutella.lo gt_guid.lo \
  40.236 +	gt_http_client.lo gt_http_server.lo gt_netorg.lo \
  40.237 +	gt_node_cache.lo gt_node.lo gt_node_list.lo gt_packet.lo \
  40.238 +	gt_query_route.lo gt_search.lo gt_search_exec.lo gt_share.lo \
  40.239 +	gt_share_file.lo gt_share_state.lo gt_stats.lo gt_urn.lo \
  40.240 +	gt_utils.lo gt_version.lo gt_web_cache.lo gt_xfer.lo \
  40.241 +	gt_xfer_obj.lo http_request.lo sha1.lo trie.lo xml.lo
  40.242 +libGnutella_la_OBJECTS = $(am_libGnutella_la_OBJECTS)
  40.243 +
  40.244 +DEFAULT_INCLUDES =  -I. -I$(srcdir) -I$(top_builddir)
  40.245 +depcomp = $(SHELL) $(top_srcdir)/depcomp
  40.246 +am__depfiles_maybe = depfiles
  40.247 +@AMDEP_TRUE@DEP_FILES = ./$(DEPDIR)/dns.Plo ./$(DEPDIR)/file_cache.Plo \
  40.248 +@AMDEP_TRUE@	./$(DEPDIR)/gt_accept.Plo ./$(DEPDIR)/gt_ban.Plo \
  40.249 +@AMDEP_TRUE@	./$(DEPDIR)/gt_bind.Plo ./$(DEPDIR)/gt_conf.Plo \
  40.250 +@AMDEP_TRUE@	./$(DEPDIR)/gt_connect.Plo \
  40.251 +@AMDEP_TRUE@	./$(DEPDIR)/gt_gnutella.Plo ./$(DEPDIR)/gt_guid.Plo \
  40.252 +@AMDEP_TRUE@	./$(DEPDIR)/gt_http_client.Plo \
  40.253 +@AMDEP_TRUE@	./$(DEPDIR)/gt_http_server.Plo \
  40.254 +@AMDEP_TRUE@	./$(DEPDIR)/gt_netorg.Plo ./$(DEPDIR)/gt_node.Plo \
  40.255 +@AMDEP_TRUE@	./$(DEPDIR)/gt_node_cache.Plo \
  40.256 +@AMDEP_TRUE@	./$(DEPDIR)/gt_node_list.Plo \
  40.257 +@AMDEP_TRUE@	./$(DEPDIR)/gt_packet.Plo \
  40.258 +@AMDEP_TRUE@	./$(DEPDIR)/gt_query_route.Plo \
  40.259 +@AMDEP_TRUE@	./$(DEPDIR)/gt_search.Plo \
  40.260 +@AMDEP_TRUE@	./$(DEPDIR)/gt_search_exec.Plo \
  40.261 +@AMDEP_TRUE@	./$(DEPDIR)/gt_share.Plo \
  40.262 +@AMDEP_TRUE@	./$(DEPDIR)/gt_share_file.Plo \
  40.263 +@AMDEP_TRUE@	./$(DEPDIR)/gt_share_state.Plo \
  40.264 +@AMDEP_TRUE@	./$(DEPDIR)/gt_stats.Plo ./$(DEPDIR)/gt_urn.Plo \
  40.265 +@AMDEP_TRUE@	./$(DEPDIR)/gt_utils.Plo ./$(DEPDIR)/gt_version.Plo \
  40.266 +@AMDEP_TRUE@	./$(DEPDIR)/gt_web_cache.Plo \
  40.267 +@AMDEP_TRUE@	./$(DEPDIR)/gt_xfer.Plo ./$(DEPDIR)/gt_xfer_obj.Plo \
  40.268 +@AMDEP_TRUE@	./$(DEPDIR)/http_request.Plo ./$(DEPDIR)/sha1.Plo \
  40.269 +@AMDEP_TRUE@	./$(DEPDIR)/trie.Plo ./$(DEPDIR)/xml.Plo
  40.270 +COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
  40.271 +	$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
  40.272 +LTCOMPILE = $(LIBTOOL) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) \
  40.273 +	$(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
  40.274 +CCLD = $(CC)
  40.275 +LINK = $(LIBTOOL) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
  40.276 +	$(AM_LDFLAGS) $(LDFLAGS) -o $@
  40.277 +DIST_SOURCES = $(libGnutella_la_SOURCES)
  40.278 +
  40.279 +RECURSIVE_TARGETS = info-recursive dvi-recursive pdf-recursive \
  40.280 +	ps-recursive install-info-recursive uninstall-info-recursive \
  40.281 +	all-recursive install-data-recursive install-exec-recursive \
  40.282 +	installdirs-recursive install-recursive uninstall-recursive \
  40.283 +	check-recursive installcheck-recursive
  40.284 +DIST_COMMON = $(srcdir)/Makefile.in Makefile.am
  40.285 +DIST_SUBDIRS = $(SUBDIRS)
  40.286 +SOURCES = $(libGnutella_la_SOURCES)
  40.287 +
  40.288 +all: all-recursive
  40.289 +
  40.290 +.SUFFIXES:
  40.291 +.SUFFIXES: .c .lo .o .obj
  40.292 +$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ Makefile.am  $(top_srcdir)/configure.ac $(ACLOCAL_M4)
  40.293 +	cd $(top_srcdir) && \
  40.294 +	  $(AUTOMAKE) --gnu  src/Makefile
  40.295 +Makefile: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.in  $(top_builddir)/config.status
  40.296 +	cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)
  40.297 +pluginLTLIBRARIES_INSTALL = $(INSTALL)
  40.298 +install-pluginLTLIBRARIES: $(plugin_LTLIBRARIES)
  40.299 +	@$(NORMAL_INSTALL)
  40.300 +	$(mkinstalldirs) $(DESTDIR)$(plugindir)
  40.301 +	@list='$(plugin_LTLIBRARIES)'; for p in $$list; do \
  40.302 +	  if test -f $$p; then \
  40.303 +	    f="`echo $$p | sed -e 's|^.*/||'`"; \
  40.304 +	    echo " $(LIBTOOL) --mode=install $(pluginLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) $$p $(DESTDIR)$(plugindir)/$$f"; \
  40.305 +	    $(LIBTOOL) --mode=install $(pluginLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) $$p $(DESTDIR)$(plugindir)/$$f; \
  40.306 +	  else :; fi; \
  40.307 +	done
  40.308 +
  40.309 +uninstall-pluginLTLIBRARIES:
  40.310 +	@$(NORMAL_UNINSTALL)
  40.311 +	@list='$(plugin_LTLIBRARIES)'; for p in $$list; do \
  40.312 +	    p="`echo $$p | sed -e 's|^.*/||'`"; \
  40.313 +	  echo " $(LIBTOOL) --mode=uninstall rm -f $(DESTDIR)$(plugindir)/$$p"; \
  40.314 +	  $(LIBTOOL) --mode=uninstall rm -f $(DESTDIR)$(plugindir)/$$p; \
  40.315 +	done
  40.316 +
  40.317 +clean-pluginLTLIBRARIES:
  40.318 +	-test -z "$(plugin_LTLIBRARIES)" || rm -f $(plugin_LTLIBRARIES)
  40.319 +	@list='$(plugin_LTLIBRARIES)'; for p in $$list; do \
  40.320 +	  dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \
  40.321 +	  test "$$dir" = "$$p" && dir=.; \
  40.322 +	  echo "rm -f \"$${dir}/so_locations\""; \
  40.323 +	  rm -f "$${dir}/so_locations"; \
  40.324 +	done
  40.325 +libGnutella.la: $(libGnutella_la_OBJECTS) $(libGnutella_la_DEPENDENCIES) 
  40.326 +	$(LINK) -rpath $(plugindir) $(libGnutella_la_LDFLAGS) $(libGnutella_la_OBJECTS) $(libGnutella_la_LIBADD) $(LIBS)
  40.327 +
  40.328 +mostlyclean-compile:
  40.329 +	-rm -f *.$(OBJEXT) core *.core
  40.330 +
  40.331 +distclean-compile:
  40.332 +	-rm -f *.tab.c
  40.333 +
  40.334 +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dns.Plo@am__quote@
  40.335 +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/file_cache.Plo@am__quote@
  40.336 +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gt_accept.Plo@am__quote@
  40.337 +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gt_ban.Plo@am__quote@
  40.338 +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gt_bind.Plo@am__quote@
  40.339 +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gt_conf.Plo@am__quote@
  40.340 +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gt_connect.Plo@am__quote@
  40.341 +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gt_gnutella.Plo@am__quote@
  40.342 +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gt_guid.Plo@am__quote@
  40.343 +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gt_http_client.Plo@am__quote@
  40.344 +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gt_http_server.Plo@am__quote@
  40.345 +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gt_netorg.Plo@am__quote@
  40.346 +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gt_node.Plo@am__quote@
  40.347 +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gt_node_cache.Plo@am__quote@
  40.348 +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gt_node_list.Plo@am__quote@
  40.349 +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gt_packet.Plo@am__quote@
  40.350 +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gt_query_route.Plo@am__quote@
  40.351 +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gt_search.Plo@am__quote@
  40.352 +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gt_search_exec.Plo@am__quote@
  40.353 +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gt_share.Plo@am__quote@
  40.354 +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gt_share_file.Plo@am__quote@
  40.355 +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gt_share_state.Plo@am__quote@
  40.356 +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gt_stats.Plo@am__quote@
  40.357 +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gt_urn.Plo@am__quote@
  40.358 +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gt_utils.Plo@am__quote@
  40.359 +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gt_version.Plo@am__quote@
  40.360 +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gt_web_cache.Plo@am__quote@
  40.361 +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gt_xfer.Plo@am__quote@
  40.362 +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gt_xfer_obj.Plo@am__quote@
  40.363 +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/http_request.Plo@am__quote@
  40.364 +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sha1.Plo@am__quote@
  40.365 +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/trie.Plo@am__quote@
  40.366 +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xml.Plo@am__quote@
  40.367 +
  40.368 +.c.o:
  40.369 +@am__fastdepCC_TRUE@	if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" \
  40.370 +@am__fastdepCC_TRUE@	  -c -o $@ `test -f '$<' || echo '$(srcdir)/'`$<; \
  40.371 +@am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; \
  40.372 +@am__fastdepCC_TRUE@	else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; \
  40.373 +@am__fastdepCC_TRUE@	fi
  40.374 +@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
  40.375 +@AMDEP_TRUE@@am__fastdepCC_FALSE@	depfile='$(DEPDIR)/$*.Po' tmpdepfile='$(DEPDIR)/$*.TPo' @AMDEPBACKSLASH@
  40.376 +@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
  40.377 +@am__fastdepCC_FALSE@	$(COMPILE) -c `test -f '$<' || echo '$(srcdir)/'`$<
  40.378 +
  40.379 +.c.obj:
  40.380 +@am__fastdepCC_TRUE@	if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" \
  40.381 +@am__fastdepCC_TRUE@	  -c -o $@ `if test -f '$<'; then $(CYGPATH_W) '$<'; else $(CYGPATH_W) '$(srcdir)/$<'; fi`; \
  40.382 +@am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; \
  40.383 +@am__fastdepCC_TRUE@	else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; \
  40.384 +@am__fastdepCC_TRUE@	fi
  40.385 +@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
  40.386 +@AMDEP_TRUE@@am__fastdepCC_FALSE@	depfile='$(DEPDIR)/$*.Po' tmpdepfile='$(DEPDIR)/$*.TPo' @AMDEPBACKSLASH@
  40.387 +@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
  40.388 +@am__fastdepCC_FALSE@	$(COMPILE) -c `if test -f '$<'; then $(CYGPATH_W) '$<'; else $(CYGPATH_W) '$(srcdir)/$<'; fi`
  40.389 +
  40.390 +.c.lo:
  40.391 +@am__fastdepCC_TRUE@	if $(LTCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" \
  40.392 +@am__fastdepCC_TRUE@	  -c -o $@ `test -f '$<' || echo '$(srcdir)/'`$<; \
  40.393 +@am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Plo"; \
  40.394 +@am__fastdepCC_TRUE@	else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; \
  40.395 +@am__fastdepCC_TRUE@	fi
  40.396 +@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
  40.397 +@AMDEP_TRUE@@am__fastdepCC_FALSE@	depfile='$(DEPDIR)/$*.Plo' tmpdepfile='$(DEPDIR)/$*.TPlo' @AMDEPBACKSLASH@
  40.398 +@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
  40.399 +@am__fastdepCC_FALSE@	$(LTCOMPILE) -c -o $@ `test -f '$<' || echo '$(srcdir)/'`$<
  40.400 +
  40.401 +mostlyclean-libtool:
  40.402 +	-rm -f *.lo
  40.403 +
  40.404 +clean-libtool:
  40.405 +	-rm -rf .libs _libs
  40.406 +
  40.407 +distclean-libtool:
  40.408 +	-rm -f libtool
  40.409 +uninstall-info-am:
  40.410 +
  40.411 +# This directory's subdirectories are mostly independent; you can cd
  40.412 +# into them and run `make' without going through this Makefile.
  40.413 +# To change the values of `make' variables: instead of editing Makefiles,
  40.414 +# (1) if the variable is set in `config.status', edit `config.status'
  40.415 +#     (which will cause the Makefiles to be regenerated when you run `make');
  40.416 +# (2) otherwise, pass the desired values on the `make' command line.
  40.417 +$(RECURSIVE_TARGETS):
  40.418 +	@set fnord $$MAKEFLAGS; amf=$$2; \
  40.419 +	dot_seen=no; \
  40.420 +	target=`echo $@ | sed s/-recursive//`; \
  40.421 +	list='$(SUBDIRS)'; for subdir in $$list; do \
  40.422 +	  echo "Making $$target in $$subdir"; \
  40.423 +	  if test "$$subdir" = "."; then \
  40.424 +	    dot_seen=yes; \
  40.425 +	    local_target="$$target-am"; \
  40.426 +	  else \
  40.427 +	    local_target="$$target"; \
  40.428 +	  fi; \
  40.429 +	  (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
  40.430 +	   || case "$$amf" in *=*) exit 1;; *k*) fail=yes;; *) exit 1;; esac; \
  40.431 +	done; \
  40.432 +	if test "$$dot_seen" = "no"; then \
  40.433 +	  $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \
  40.434 +	fi; test -z "$$fail"
  40.435 +
  40.436 +mostlyclean-recursive clean-recursive distclean-recursive \
  40.437 +maintainer-clean-recursive:
  40.438 +	@set fnord $$MAKEFLAGS; amf=$$2; \
  40.439 +	dot_seen=no; \
  40.440 +	case "$@" in \
  40.441 +	  distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
  40.442 +	  *) list='$(SUBDIRS)' ;; \
  40.443 +	esac; \
  40.444 +	rev=''; for subdir in $$list; do \
  40.445 +	  if test "$$subdir" = "."; then :; else \
  40.446 +	    rev="$$subdir $$rev"; \
  40.447 +	  fi; \
  40.448 +	done; \
  40.449 +	rev="$$rev ."; \
  40.450 +	target=`echo $@ | sed s/-recursive//`; \
  40.451 +	for subdir in $$rev; do \
  40.452 +	  echo "Making $$target in $$subdir"; \
  40.453 +	  if test "$$subdir" = "."; then \
  40.454 +	    local_target="$$target-am"; \
  40.455 +	  else \
  40.456 +	    local_target="$$target"; \
  40.457 +	  fi; \
  40.458 +	  (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
  40.459 +	   || case "$$amf" in *=*) exit 1;; *k*) fail=yes;; *) exit 1;; esac; \
  40.460 +	done && test -z "$$fail"
  40.461 +tags-recursive:
  40.462 +	list='$(SUBDIRS)'; for subdir in $$list; do \
  40.463 +	  test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \
  40.464 +	done
  40.465 +ctags-recursive:
  40.466 +	list='$(SUBDIRS)'; for subdir in $$list; do \
  40.467 +	  test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \
  40.468 +	done
  40.469 +
  40.470 +ETAGS = etags
  40.471 +ETAGSFLAGS =
  40.472 +
  40.473 +CTAGS = ctags
  40.474 +CTAGSFLAGS =
  40.475 +
  40.476 +tags: TAGS
  40.477 +
  40.478 +ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
  40.479 +	list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
  40.480 +	unique=`for i in $$list; do \
  40.481 +	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
  40.482 +	  done | \
  40.483 +	  $(AWK) '    { files[$$0] = 1; } \
  40.484 +	       END { for (i in files) print i; }'`; \
  40.485 +	mkid -fID $$unique
  40.486 +
  40.487 +TAGS: tags-recursive $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
  40.488 +		$(TAGS_FILES) $(LISP)
  40.489 +	tags=; \
  40.490 +	here=`pwd`; \
  40.491 +	if (etags --etags-include --version) >/dev/null 2>&1; then \
  40.492 +	  include_option=--etags-include; \
  40.493 +	else \
  40.494 +	  include_option=--include; \
  40.495 +	fi; \
  40.496 +	list='$(SUBDIRS)'; for subdir in $$list; do \
  40.497 +	  if test "$$subdir" = .; then :; else \
  40.498 +	    test -f $$subdir/TAGS && \
  40.499 +	      tags="$$tags $$include_option=$$here/$$subdir/TAGS"; \
  40.500 +	  fi; \
  40.501 +	done; \
  40.502 +	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
  40.503 +	unique=`for i in $$list; do \
  40.504 +	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
  40.505 +	  done | \
  40.506 +	  $(AWK) '    { files[$$0] = 1; } \
  40.507 +	       END { for (i in files) print i; }'`; \
  40.508 +	test -z "$(ETAGS_ARGS)$$tags$$unique" \
  40.509 +	  || $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
  40.510 +	     $$tags $$unique
  40.511 +
  40.512 +ctags: CTAGS
  40.513 +CTAGS: ctags-recursive $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
  40.514 +		$(TAGS_FILES) $(LISP)
  40.515 +	tags=; \
  40.516 +	here=`pwd`; \
  40.517 +	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
  40.518 +	unique=`for i in $$list; do \
  40.519 +	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
  40.520 +	  done | \
  40.521 +	  $(AWK) '    { files[$$0] = 1; } \
  40.522 +	       END { for (i in files) print i; }'`; \
  40.523 +	test -z "$(CTAGS_ARGS)$$tags$$unique" \
  40.524 +	  || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
  40.525 +	     $$tags $$unique
  40.526 +
  40.527 +GTAGS:
  40.528 +	here=`$(am__cd) $(top_builddir) && pwd` \
  40.529 +	  && cd $(top_srcdir) \
  40.530 +	  && gtags -i $(GTAGS_ARGS) $$here
  40.531 +
  40.532 +distclean-tags:
  40.533 +	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
  40.534 +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
  40.535 +
  40.536 +top_distdir = ..
  40.537 +distdir = $(top_distdir)/$(PACKAGE)-$(VERSION)
  40.538 +
  40.539 +distdir: $(DISTFILES)
  40.540 +	@srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \
  40.541 +	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \
  40.542 +	list='$(DISTFILES)'; for file in $$list; do \
  40.543 +	  case $$file in \
  40.544 +	    $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \
  40.545 +	    $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \
  40.546 +	  esac; \
  40.547 +	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
  40.548 +	  dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \
  40.549 +	  if test "$$dir" != "$$file" && test "$$dir" != "."; then \
  40.550 +	    dir="/$$dir"; \
  40.551 +	    $(mkinstalldirs) "$(distdir)$$dir"; \
  40.552 +	  else \
  40.553 +	    dir=''; \
  40.554 +	  fi; \
  40.555 +	  if test -d $$d/$$file; then \
  40.556 +	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
  40.557 +	      cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
  40.558 +	    fi; \
  40.559 +	    cp -pR $$d/$$file $(distdir)$$dir || exit 1; \
  40.560 +	  else \
  40.561 +	    test -f $(distdir)/$$file \
  40.562 +	    || cp -p $$d/$$file $(distdir)/$$file \
  40.563 +	    || exit 1; \
  40.564 +	  fi; \
  40.565 +	done
  40.566 +	list='$(SUBDIRS)'; for subdir in $$list; do \
  40.567 +	  if test "$$subdir" = .; then :; else \
  40.568 +	    test -d $(distdir)/$$subdir \
  40.569 +	    || mkdir $(distdir)/$$subdir \
  40.570 +	    || exit 1; \
  40.571 +	    (cd $$subdir && \
  40.572 +	      $(MAKE) $(AM_MAKEFLAGS) \
  40.573 +	        top_distdir="$(top_distdir)" \
  40.574 +	        distdir=../$(distdir)/$$subdir \
  40.575 +	        distdir) \
  40.576 +	      || exit 1; \
  40.577 +	  fi; \
  40.578 +	done
  40.579 +check-am: all-am
  40.580 +check: check-recursive
  40.581 +all-am: Makefile $(LTLIBRARIES)
  40.582 +installdirs: installdirs-recursive
  40.583 +installdirs-am:
  40.584 +	$(mkinstalldirs) $(DESTDIR)$(plugindir)
  40.585 +
  40.586 +install: install-recursive
  40.587 +install-exec: install-exec-recursive
  40.588 +install-data: install-data-recursive
  40.589 +uninstall: uninstall-recursive
  40.590 +
  40.591 +install-am: all-am
  40.592 +	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
  40.593 +
  40.594 +installcheck: installcheck-recursive
  40.595 +install-strip:
  40.596 +	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
  40.597 +	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
  40.598 +	  `test -z '$(STRIP)' || \
  40.599 +	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
  40.600 +mostlyclean-generic:
  40.601 +
  40.602 +clean-generic:
  40.603 +
  40.604 +distclean-generic:
  40.605 +	-rm -f $(CONFIG_CLEAN_FILES)
  40.606 +
  40.607 +maintainer-clean-generic:
  40.608 +	@echo "This command is intended for maintainers to use"
  40.609 +	@echo "it deletes files that may require special tools to rebuild."
  40.610 +clean: clean-recursive
  40.611 +
  40.612 +clean-am: clean-generic clean-libtool clean-pluginLTLIBRARIES \
  40.613 +	mostlyclean-am
  40.614 +
  40.615 +distclean: distclean-recursive
  40.616 +	-rm -rf ./$(DEPDIR)
  40.617 +	-rm -f Makefile
  40.618 +distclean-am: clean-am distclean-compile distclean-generic \
  40.619 +	distclean-libtool distclean-tags
  40.620 +
  40.621 +dvi: dvi-recursive
  40.622 +
  40.623 +dvi-am:
  40.624 +
  40.625 +info: info-recursive
  40.626 +
  40.627 +info-am:
  40.628 +
  40.629 +install-data-am: install-pluginLTLIBRARIES
  40.630 +
  40.631 +install-exec-am:
  40.632 +
  40.633 +install-info: install-info-recursive
  40.634 +
  40.635 +install-man:
  40.636 +
  40.637 +installcheck-am:
  40.638 +
  40.639 +maintainer-clean: maintainer-clean-recursive
  40.640 +	-rm -rf ./$(DEPDIR)
  40.641 +	-rm -f Makefile
  40.642 +maintainer-clean-am: distclean-am maintainer-clean-generic
  40.643 +
  40.644 +mostlyclean: mostlyclean-recursive
  40.645 +
  40.646 +mostlyclean-am: mostlyclean-compile mostlyclean-generic \
  40.647 +	mostlyclean-libtool
  40.648 +
  40.649 +pdf: pdf-recursive
  40.650 +
  40.651 +pdf-am:
  40.652 +
  40.653 +ps: ps-recursive
  40.654 +
  40.655 +ps-am:
  40.656 +
  40.657 +uninstall-am: uninstall-info-am uninstall-pluginLTLIBRARIES
  40.658 +
  40.659 +uninstall-info: uninstall-info-recursive
  40.660 +
  40.661 +.PHONY: $(RECURSIVE_TARGETS) CTAGS GTAGS all all-am check check-am clean \
  40.662 +	clean-generic clean-libtool clean-pluginLTLIBRARIES \
  40.663 +	clean-recursive ctags ctags-recursive distclean \
  40.664 +	distclean-compile distclean-generic distclean-libtool \
  40.665 +	distclean-recursive distclean-tags distdir dvi dvi-am \
  40.666 +	dvi-recursive info info-am info-recursive install install-am \
  40.667 +	install-data install-data-am install-data-recursive \
  40.668 +	install-exec install-exec-am install-exec-recursive \
  40.669 +	install-info install-info-am install-info-recursive install-man \
  40.670 +	install-pluginLTLIBRARIES install-recursive install-strip \
  40.671 +	installcheck installcheck-am installdirs installdirs-am \
  40.672 +	installdirs-recursive maintainer-clean maintainer-clean-generic \
  40.673 +	maintainer-clean-recursive mostlyclean mostlyclean-compile \
  40.674 +	mostlyclean-generic mostlyclean-libtool mostlyclean-recursive \
  40.675 +	pdf pdf-am pdf-recursive ps ps-am ps-recursive tags \
  40.676 +	tags-recursive uninstall uninstall-am uninstall-info-am \
  40.677 +	uninstall-info-recursive uninstall-pluginLTLIBRARIES \
  40.678 +	uninstall-recursive
  40.679 +
  40.680 +# Tell versions [3.59,3.63) of GNU make to not export all variables.
  40.681 +# Otherwise a system limit (for SysV at least) may be exceeded.
  40.682 +.NOEXPORT:
    41.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    41.2 +++ b/src/Makefile.msvc	Sat Feb 20 21:18:28 2010 -0800
    41.3 @@ -0,0 +1,115 @@
    41.4 +# $Id: Makefile.msvc,v 1.18 2004/03/27 00:36:20 mkern Exp $
    41.5 +
    41.6 +!include ../Make.msvc
    41.7 +
    41.8 +INCLUDES = $(INCLUDES) -I. -Iio
    41.9 +
   41.10 +!if defined(dynamic) || defined(DYNAMIC)
   41.11 +
   41.12 +LIBS       = $(LIBS) $(LIBGIFT_LIB) $(LIBGIFTPROTO_LIB) $(GIFT_LIB)
   41.13 +TARGET     = $(GNUTELLA_DLL)
   41.14 +
   41.15 +!else # !(defined(dynamic) || defined(DYNAMIC))
   41.16 +
   41.17 +LIBS       = $(LIBS) $(LIBGIFT_STATIC) $(LIBGIFTPROTO_STATIC) $(GIFT_LIB)
   41.18 +TARGET     = $(GNUTELLA_STATIC)
   41.19 +
   41.20 +!endif # defined(dynamic) || defined(DYNAMIC)
   41.21 +
   41.22 +
   41.23 +OBJECTS = \
   41.24 +	dns$(O) \
   41.25 +	file_cache$(O) \
   41.26 +	gt_accept$(O) \
   41.27 +	gt_ban$(O) \
   41.28 +	gt_bind$(O) \
   41.29 +	gt_conf$(O) \
   41.30 +	gt_connect$(O) \
   41.31 +	gt_gnutella$(O) \
   41.32 +	gt_guid$(O) \
   41.33 +	gt_http_client$(O) \
   41.34 +	gt_http_server$(O) \
   41.35 +	gt_netorg$(O) \
   41.36 +	gt_node$(O) \
   41.37 +	gt_node_cache$(O) \
   41.38 +	gt_node_list$(O) \
   41.39 +	gt_packet$(O) \
   41.40 +	gt_query_route$(O) \
   41.41 +	gt_search$(O) \
   41.42 +	gt_search_exec$(O) \
   41.43 +	gt_share$(O) \
   41.44 +	gt_share_file$(O) \
   41.45 +	gt_share_state$(O) \
   41.46 +	gt_stats$(O) \
   41.47 +	gt_urn$(O) \
   41.48 +	gt_utils$(O) \
   41.49 +	gt_version$(O) \
   41.50 +	gt_web_cache$(O) \
   41.51 +	gt_xfer$(O) \
   41.52 +	gt_xfer_obj$(O) \
   41.53 +	http_request$(O) \
   41.54 +	sha1$(O) \
   41.55 +	trie$(O) \
   41.56 +	xml$(O) \
   41.57 +	encoding\base32$(O) \
   41.58 +	encoding\url$(O) \
   41.59 +	io\io_buf$(O) \
   41.60 +	io\rx_inflate$(O) \
   41.61 +	io\rx_layer$(O) \
   41.62 +	io\rx_link$(O) \
   41.63 +	io\rx_packet$(O) \
   41.64 +	io\rx_stack$(O) \
   41.65 +	io\tx_deflate$(O) \
   41.66 +	io\tx_layer$(O) \
   41.67 +	io\tx_link$(O) \
   41.68 +	io\tx_packet$(O) \
   41.69 +	io\tx_stack$(O) \
   41.70 +	message\bye$(O) \
   41.71 +	message\gt_message$(O) \
   41.72 +	message\ping$(O) \
   41.73 +	message\ping_reply$(O) \
   41.74 +	message\push$(O) \
   41.75 +	message\query$(O) \
   41.76 +	message\query_reply$(O) \
   41.77 +	message\query_route$(O) \
   41.78 +	message\vendor$(O) \
   41.79 +	transfer\download$(O) \
   41.80 +	transfer\push_proxy$(O) \
   41.81 +	transfer\source$(O)
   41.82 +
   41.83 +
   41.84 +all : $(TARGET)
   41.85 +
   41.86 +
   41.87 +clean :
   41.88 +	@-del /Q /F *$(O)
   41.89 +	@-del /Q /F $(GNUTELLA_LIB)
   41.90 +	@-del /Q /F $(GNUTELLA_DLL)
   41.91 +	@-del /Q /F $(GNUTELLA_STATIC)
   41.92 +	@-del /Q /F *.exp
   41.93 +	@-del /Q /F *.idb
   41.94 +	@-del /Q /F *.ilk
   41.95 +	@-del /Q /F *.pch
   41.96 +	@-del /Q /F *.pdb
   41.97 +	@-del /Q /F *.plg
   41.98 +	@-del /Q /F io\*$(O)
   41.99 +	@-del /Q /F transfer\*$(O)
  41.100 +	@-del /Q /F message\*$(O)
  41.101 +	@-del /Q /F encoding\*$(O)
  41.102 +
  41.103 +
  41.104 +!if defined(dynamic) || defined(DYNAMIC)
  41.105 +
  41.106 +$(TARGET) : $(OBJECTS)
  41.107 +	$(LD) $(LDFLAGS) -dll -out:$(TARGET)  $(LIBS) $(OBJECTS)
  41.108 +
  41.109 +!else # !(defined(dynamic) || defined(DYNAMIC))
  41.110 +
  41.111 +$(TARGET) : $(OBJECTS)
  41.112 +	$(LT) -nologo -out:$(TARGET) $(OBJECTS)
  41.113 +
  41.114 +!endif # defined(dynamic) || defined(DYNAMIC)
  41.115 +
  41.116 +
  41.117 +.c$(O):
  41.118 +	$(CC) $(CFLAGS) $(DEFS) $(INCLUDES) -Fo$@ -c $<
    42.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    42.2 +++ b/src/dns.c	Sat Feb 20 21:18:28 2010 -0800
    42.3 @@ -0,0 +1,57 @@
    42.4 +/*
    42.5 + * $Id: dns.c,v 1.2 2003/12/26 12:02:20 mkern Exp $
    42.6 + *
    42.7 + * Copyright (C) 2003 giFT project (gift.sourceforge.net)
    42.8 + *
    42.9 + * This program is free software; you can redistribute it and/or modify it
   42.10 + * under the terms of the GNU General Public License as published by the
   42.11 + * Free Software Foundation; either version 2, or (at your option) any
   42.12 + * later version.
   42.13 + *
   42.14 + * This program is distributed in the hope that it will be useful, but
   42.15 + * WITHOUT ANY WARRANTY; without even the implied warranty of
   42.16 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
   42.17 + * General Public License for more details.
   42.18 + */
   42.19 +
   42.20 +#include "gt_gnutella.h"
   42.21 +#include "dns.h"
   42.22 +
   42.23 +/*****************************************************************************/
   42.24 +
   42.25 +struct hostent *gt_dns_lookup (const char *name)
   42.26 +{
   42.27 +	return gethostbyname (name);
   42.28 +}
   42.29 +
   42.30 +int gt_dns_get_errno (void)
   42.31 +{
   42.32 +#ifdef HAVE_HSTRERROR /* assume h_errno present if hstrerror() is */
   42.33 +	return h_errno;
   42.34 +#else
   42.35 +#ifdef WIN32
   42.36 +	return WSAGetLastError ();
   42.37 +#endif /* WIN32 */
   42.38 +	return 0;
   42.39 +#endif
   42.40 +}
   42.41 +
   42.42 +void gt_dns_set_errno (int error_code)
   42.43 +{
   42.44 +#ifdef HAVE_HSTRERROR
   42.45 +	h_errno = 0;
   42.46 +#else
   42.47 +#ifdef WIN32
   42.48 +	WSASetLastError (error_code);
   42.49 +#endif /* WIN32 */
   42.50 +#endif
   42.51 +}
   42.52 +
   42.53 +const char *gt_dns_strerror (int error_code)
   42.54 +{
   42.55 +#ifdef HAVE_HSTRERROR
   42.56 +	return hstrerror (error_code);
   42.57 +#else
   42.58 +	return "Host name lookup failure";
   42.59 +#endif
   42.60 +}
    43.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    43.2 +++ b/src/dns.h	Sat Feb 20 21:18:28 2010 -0800
    43.3 @@ -0,0 +1,39 @@
    43.4 +/*
    43.5 + * $Id: dns.h,v 1.1 2003/12/22 01:57:51 hipnod Exp $
    43.6 + *
    43.7 + * Copyright (C) 2003 giFT project (gift.sourceforge.net)
    43.8 + *
    43.9 + * This program is free software; you can redistribute it and/or modify it
   43.10 + * under the terms of the GNU General Public License as published by the
   43.11 + * Free Software Foundation; either version 2, or (at your option) any
   43.12 + * later version.
   43.13 + *
   43.14 + * This program is distributed in the hope that it will be useful, but
   43.15 + * WITHOUT ANY WARRANTY; without even the implied warranty of
   43.16 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
   43.17 + * General Public License for more details.
   43.18 + */
   43.19 +
   43.20 +#ifndef GIFT_GT_DNS_H_
   43.21 +#define GIFT_GT_DNS_H_
   43.22 +
   43.23 +/*****************************************************************************/
   43.24 +
   43.25 +/*
   43.26 + * This depends on the right header file being included before this file.
   43.27 + */
   43.28 +#ifndef NO_ADDRESS
   43.29 +#define NO_ADDRESS NO_DATA
   43.30 +#endif
   43.31 +
   43.32 +/*****************************************************************************/
   43.33 +
   43.34 +struct hostent *gt_dns_lookup      (const char *name);
   43.35 +
   43.36 +int             gt_dns_get_errno   (void);
   43.37 +void            gt_dns_set_errno   (int error_code);
   43.38 +const char     *gt_dns_strerror    (int error_code);
   43.39 +
   43.40 +/*****************************************************************************/
   43.41 +
   43.42 +#endif /* GIFT_GT_DNS_H_ */
    44.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    44.2 +++ b/src/encoding/Makefile.am	Sat Feb 20 21:18:28 2010 -0800
    44.3 @@ -0,0 +1,14 @@
    44.4 +# $Id: Makefile.am,v 1.2 2004/03/24 06:34:36 hipnod Exp $
    44.5 +
    44.6 +AM_CFLAGS = \
    44.7 +	$(GNUTELLA_CFLAGS)
    44.8 +
    44.9 +INCLUDES = \
   44.10 +	-I$(top_srcdir)/src
   44.11 +
   44.12 +noinst_LTLIBRARIES = \
   44.13 +	libgt_encoding.la
   44.14 +
   44.15 +libgt_encoding_la_SOURCES = \
   44.16 +	base32.c          base32.h \
   44.17 +	url.c             url.h
    45.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    45.2 +++ b/src/encoding/Makefile.in	Sat Feb 20 21:18:28 2010 -0800
    45.3 @@ -0,0 +1,438 @@
    45.4 +# Makefile.in generated by automake 1.7.9 from Makefile.am.
    45.5 +# @configure_input@
    45.6 +
    45.7 +# Copyright 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003
    45.8 +# Free Software Foundation, Inc.
    45.9 +# This Makefile.in is free software; the Free Software Foundation
   45.10 +# gives unlimited permission to copy and/or distribute it,
   45.11 +# with or without modifications, as long as this notice is preserved.
   45.12 +
   45.13 +# This program is distributed in the hope that it will be useful,
   45.14 +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
   45.15 +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
   45.16 +# PARTICULAR PURPOSE.
   45.17 +
   45.18 +@SET_MAKE@
   45.19 +
   45.20 +# $Id: Makefile.am,v 1.2 2004/03/24 06:34:36 hipnod Exp $
   45.21 +
   45.22 +srcdir = @srcdir@
   45.23 +top_srcdir = @top_srcdir@
   45.24 +VPATH = @srcdir@
   45.25 +pkgdatadir = $(datadir)/@PACKAGE@
   45.26 +pkglibdir = $(libdir)/@PACKAGE@
   45.27 +pkgincludedir = $(includedir)/@PACKAGE@
   45.28 +top_builddir = ../..
   45.29 +
   45.30 +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
   45.31 +INSTALL = @INSTALL@
   45.32 +install_sh_DATA = $(install_sh) -c -m 644
   45.33 +install_sh_PROGRAM = $(install_sh) -c
   45.34 +install_sh_SCRIPT = $(install_sh) -c
   45.35 +INSTALL_HEADER = $(INSTALL_DATA)
   45.36 +transform = $(program_transform_name)
   45.37 +NORMAL_INSTALL = :
   45.38 +PRE_INSTALL = :
   45.39 +POST_INSTALL = :
   45.40 +NORMAL_UNINSTALL = :
   45.41 +PRE_UNINSTALL = :
   45.42 +POST_UNINSTALL = :
   45.43 +host_triplet = @host@
   45.44 +ACLOCAL = @ACLOCAL@
   45.45 +AMDEP_FALSE = @AMDEP_FALSE@
   45.46 +AMDEP_TRUE = @AMDEP_TRUE@
   45.47 +AMTAR = @AMTAR@
   45.48 +AR = @AR@
   45.49 +AUTOCONF = @AUTOCONF@
   45.50 +AUTOHEADER = @AUTOHEADER@
   45.51 +AUTOMAKE = @AUTOMAKE@
   45.52 +AWK = @AWK@
   45.53 +CC = @CC@
   45.54 +CCDEPMODE = @CCDEPMODE@
   45.55 +CFLAGS = @CFLAGS@
   45.56 +CPP = @CPP@
   45.57 +CPPFLAGS = @CPPFLAGS@
   45.58 +CXX = @CXX@
   45.59 +CXXCPP = @CXXCPP@
   45.60 +CXXDEPMODE = @CXXDEPMODE@
   45.61 +CXXFLAGS = @CXXFLAGS@
   45.62 +CYGPATH_W = @CYGPATH_W@
   45.63 +DEFS = @DEFS@
   45.64 +DEPDIR = @DEPDIR@
   45.65 +ECHO = @ECHO@
   45.66 +ECHO_C = @ECHO_C@
   45.67 +ECHO_N = @ECHO_N@
   45.68 +ECHO_T = @ECHO_T@
   45.69 +EGREP = @EGREP@
   45.70 +EXEEXT = @EXEEXT@
   45.71 +F77 = @F77@
   45.72 +FFLAGS = @FFLAGS@
   45.73 +GNUTELLA_CFLAGS = @GNUTELLA_CFLAGS@
   45.74 +GNUTELLA_LIBS = @GNUTELLA_LIBS@
   45.75 +INSTALL_DATA = @INSTALL_DATA@
   45.76 +INSTALL_PROGRAM = @INSTALL_PROGRAM@
   45.77 +INSTALL_SCRIPT = @INSTALL_SCRIPT@
   45.78 +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
   45.79 +LDFLAGS = @LDFLAGS@
   45.80 +LIBOBJS = @LIBOBJS@
   45.81 +LIBS = @LIBS@
   45.82 +LIBTOOL = @LIBTOOL@
   45.83 +LIBXML2_CFLAGS = @LIBXML2_CFLAGS@
   45.84 +LIBXML2_LIBS = @LIBXML2_LIBS@
   45.85 +LN_S = @LN_S@
   45.86 +LTLIBOBJS = @LTLIBOBJS@
   45.87 +MAINT = @MAINT@
   45.88 +MAINTAINER_MODE_FALSE = @MAINTAINER_MODE_FALSE@
   45.89 +MAINTAINER_MODE_TRUE = @MAINTAINER_MODE_TRUE@
   45.90 +MAKEINFO = @MAKEINFO@
   45.91 +OBJEXT = @OBJEXT@
   45.92 +PACKAGE = @PACKAGE@
   45.93 +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
   45.94 +PACKAGE_NAME = @PACKAGE_NAME@
   45.95 +PACKAGE_STRING = @PACKAGE_STRING@
   45.96 +PACKAGE_TARNAME = @PACKAGE_TARNAME@
   45.97 +PACKAGE_VERSION = @PACKAGE_VERSION@
   45.98 +PATH_SEPARATOR = @PATH_SEPARATOR@
   45.99 +PKG_CONFIG = @PKG_CONFIG@
  45.100 +PLUGIN_LDFLAGS = @PLUGIN_LDFLAGS@
  45.101 +RANLIB = @RANLIB@
  45.102 +SET_MAKE = @SET_MAKE@
  45.103 +SHELL = @SHELL@
  45.104 +STRIP = @STRIP@
  45.105 +USE_ZLIB = @USE_ZLIB@
  45.106 +VERSION = @VERSION@
  45.107 +XML2_CONFIG = @XML2_CONFIG@
  45.108 +ac_ct_AR = @ac_ct_AR@
  45.109 +ac_ct_CC = @ac_ct_CC@
  45.110 +ac_ct_CXX = @ac_ct_CXX@
  45.111 +ac_ct_F77 = @ac_ct_F77@
  45.112 +ac_ct_RANLIB = @ac_ct_RANLIB@
  45.113 +ac_ct_STRIP = @ac_ct_STRIP@
  45.114 +am__fastdepCC_FALSE = @am__fastdepCC_FALSE@
  45.115 +am__fastdepCC_TRUE = @am__fastdepCC_TRUE@
  45.116 +am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@
  45.117 +am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@
  45.118 +am__include = @am__include@
  45.119 +am__leading_dot = @am__leading_dot@
  45.120 +am__quote = @am__quote@
  45.121 +bindir = @bindir@
  45.122 +build = @build@
  45.123 +build_alias = @build_alias@
  45.124 +build_cpu = @build_cpu@
  45.125 +build_os = @build_os@
  45.126 +build_vendor = @build_vendor@
  45.127 +datadir = @datadir@
  45.128 +exec_prefix = @exec_prefix@
  45.129 +host = @host@
  45.130 +host_alias = @host_alias@
  45.131 +host_cpu = @host_cpu@
  45.132 +host_os = @host_os@
  45.133 +host_vendor = @host_vendor@
  45.134 +includedir = @includedir@
  45.135 +infodir = @infodir@
  45.136 +install_sh = @install_sh@
  45.137 +libdir = @libdir@
  45.138 +libexecdir = @libexecdir@
  45.139 +localstatedir = @localstatedir@
  45.140 +mandir = @mandir@
  45.141 +oldincludedir = @oldincludedir@
  45.142 +prefix = @prefix@
  45.143 +program_transform_name = @program_transform_name@
  45.144 +sbindir = @sbindir@
  45.145 +sharedstatedir = @sharedstatedir@
  45.146 +sysconfdir = @sysconfdir@
  45.147 +target_alias = @target_alias@
  45.148 +
  45.149 +AM_CFLAGS = \
  45.150 +	$(GNUTELLA_CFLAGS)
  45.151 +
  45.152 +
  45.153 +INCLUDES = \
  45.154 +	-I$(top_srcdir)/src
  45.155 +
  45.156 +
  45.157 +noinst_LTLIBRARIES = \
  45.158 +	libgt_encoding.la
  45.159 +
  45.160 +
  45.161 +libgt_encoding_la_SOURCES = \
  45.162 +	base32.c          base32.h \
  45.163 +	url.c             url.h
  45.164 +
  45.165 +subdir = src/encoding
  45.166 +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
  45.167 +mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
  45.168 +CONFIG_HEADER = $(top_builddir)/config.h
  45.169 +CONFIG_CLEAN_FILES =
  45.170 +LTLIBRARIES = $(noinst_LTLIBRARIES)
  45.171 +
  45.172 +libgt_encoding_la_LDFLAGS =
  45.173 +libgt_encoding_la_LIBADD =
  45.174 +am_libgt_encoding_la_OBJECTS = base32.lo url.lo
  45.175 +libgt_encoding_la_OBJECTS = $(am_libgt_encoding_la_OBJECTS)
  45.176 +
  45.177 +DEFAULT_INCLUDES =  -I. -I$(srcdir) -I$(top_builddir)
  45.178 +depcomp = $(SHELL) $(top_srcdir)/depcomp
  45.179 +am__depfiles_maybe = depfiles
  45.180 +@AMDEP_TRUE@DEP_FILES = ./$(DEPDIR)/base32.Plo ./$(DEPDIR)/url.Plo
  45.181 +COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
  45.182 +	$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
  45.183 +LTCOMPILE = $(LIBTOOL) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) \
  45.184 +	$(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
  45.185 +CCLD = $(CC)
  45.186 +LINK = $(LIBTOOL) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
  45.187 +	$(AM_LDFLAGS) $(LDFLAGS) -o $@
  45.188 +DIST_SOURCES = $(libgt_encoding_la_SOURCES)
  45.189 +DIST_COMMON = $(srcdir)/Makefile.in Makefile.am
  45.190 +SOURCES = $(libgt_encoding_la_SOURCES)
  45.191 +
  45.192 +all: all-am
  45.193 +
  45.194 +.SUFFIXES:
  45.195 +.SUFFIXES: .c .lo .o .obj
  45.196 +$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ Makefile.am  $(top_srcdir)/configure.ac $(ACLOCAL_M4)
  45.197 +	cd $(top_srcdir) && \
  45.198 +	  $(AUTOMAKE) --gnu  src/encoding/Makefile
  45.199 +Makefile: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.in  $(top_builddir)/config.status
  45.200 +	cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)
  45.201 +
  45.202 +clean-noinstLTLIBRARIES:
  45.203 +	-test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES)
  45.204 +	@list='$(noinst_LTLIBRARIES)'; for p in $$list; do \
  45.205 +	  dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \
  45.206 +	  test "$$dir" = "$$p" && dir=.; \
  45.207 +	  echo "rm -f \"$${dir}/so_locations\""; \
  45.208 +	  rm -f "$${dir}/so_locations"; \
  45.209 +	done
  45.210 +libgt_encoding.la: $(libgt_encoding_la_OBJECTS) $(libgt_encoding_la_DEPENDENCIES) 
  45.211 +	$(LINK)  $(libgt_encoding_la_LDFLAGS) $(libgt_encoding_la_OBJECTS) $(libgt_encoding_la_LIBADD) $(LIBS)
  45.212 +
  45.213 +mostlyclean-compile:
  45.214 +	-rm -f *.$(OBJEXT) core *.core
  45.215 +
  45.216 +distclean-compile:
  45.217 +	-rm -f *.tab.c
  45.218 +
  45.219 +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/base32.Plo@am__quote@
  45.220 +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/url.Plo@am__quote@
  45.221 +
  45.222 +.c.o:
  45.223 +@am__fastdepCC_TRUE@	if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" \
  45.224 +@am__fastdepCC_TRUE@	  -c -o $@ `test -f '$<' || echo '$(srcdir)/'`$<; \
  45.225 +@am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; \
  45.226 +@am__fastdepCC_TRUE@	else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; \
  45.227 +@am__fastdepCC_TRUE@	fi
  45.228 +@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
  45.229 +@AMDEP_TRUE@@am__fastdepCC_FALSE@	depfile='$(DEPDIR)/$*.Po' tmpdepfile='$(DEPDIR)/$*.TPo' @AMDEPBACKSLASH@
  45.230 +@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
  45.231 +@am__fastdepCC_FALSE@	$(COMPILE) -c `test -f '$<' || echo '$(srcdir)/'`$<
  45.232 +
  45.233 +.c.obj:
  45.234 +@am__fastdepCC_TRUE@	if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" \
  45.235 +@am__fastdepCC_TRUE@	  -c -o $@ `if test -f '$<'; then $(CYGPATH_W) '$<'; else $(CYGPATH_W) '$(srcdir)/$<'; fi`; \
  45.236 +@am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; \
  45.237 +@am__fastdepCC_TRUE@	else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; \
  45.238 +@am__fastdepCC_TRUE@	fi
  45.239 +@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
  45.240 +@AMDEP_TRUE@@am__fastdepCC_FALSE@	depfile='$(DEPDIR)/$*.Po' tmpdepfile='$(DEPDIR)/$*.TPo' @AMDEPBACKSLASH@
  45.241 +@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
  45.242 +@am__fastdepCC_FALSE@	$(COMPILE) -c `if test -f '$<'; then $(CYGPATH_W) '$<'; else $(CYGPATH_W) '$(srcdir)/$<'; fi`
  45.243 +
  45.244 +.c.lo:
  45.245 +@am__fastdepCC_TRUE@	if $(LTCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" \
  45.246 +@am__fastdepCC_TRUE@	  -c -o $@ `test -f '$<' || echo '$(srcdir)/'`$<; \
  45.247 +@am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Plo"; \
  45.248 +@am__fastdepCC_TRUE@	else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; \
  45.249 +@am__fastdepCC_TRUE@	fi
  45.250 +@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
  45.251 +@AMDEP_TRUE@@am__fastdepCC_FALSE@	depfile='$(DEPDIR)/$*.Plo' tmpdepfile='$(DEPDIR)/$*.TPlo' @AMDEPBACKSLASH@
  45.252 +@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
  45.253 +@am__fastdepCC_FALSE@	$(LTCOMPILE) -c -o $@ `test -f '$<' || echo '$(srcdir)/'`$<
  45.254 +
  45.255 +mostlyclean-libtool:
  45.256 +	-rm -f *.lo
  45.257 +
  45.258 +clean-libtool:
  45.259 +	-rm -rf .libs _libs
  45.260 +
  45.261 +distclean-libtool:
  45.262 +	-rm -f libtool
  45.263 +uninstall-info-am:
  45.264 +
  45.265 +ETAGS = etags
  45.266 +ETAGSFLAGS =
  45.267 +
  45.268 +CTAGS = ctags
  45.269 +CTAGSFLAGS =
  45.270 +
  45.271 +tags: TAGS
  45.272 +
  45.273 +ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
  45.274 +	list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
  45.275 +	unique=`for i in $$list; do \
  45.276 +	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
  45.277 +	  done | \
  45.278 +	  $(AWK) '    { files[$$0] = 1; } \
  45.279 +	       END { for (i in files) print i; }'`; \
  45.280 +	mkid -fID $$unique
  45.281 +
  45.282 +TAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
  45.283 +		$(TAGS_FILES) $(LISP)
  45.284 +	tags=; \
  45.285 +	here=`pwd`; \
  45.286 +	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
  45.287 +	unique=`for i in $$list; do \
  45.288 +	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
  45.289 +	  done | \
  45.290 +	  $(AWK) '    { files[$$0] = 1; } \
  45.291 +	       END { for (i in files) print i; }'`; \
  45.292 +	test -z "$(ETAGS_ARGS)$$tags$$unique" \
  45.293 +	  || $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
  45.294 +	     $$tags $$unique
  45.295 +
  45.296 +ctags: CTAGS
  45.297 +CTAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
  45.298 +		$(TAGS_FILES) $(LISP)
  45.299 +	tags=; \
  45.300 +	here=`pwd`; \
  45.301 +	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
  45.302 +	unique=`for i in $$list; do \
  45.303 +	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
  45.304 +	  done | \
  45.305 +	  $(AWK) '    { files[$$0] = 1; } \
  45.306 +	       END { for (i in files) print i; }'`; \
  45.307 +	test -z "$(CTAGS_ARGS)$$tags$$unique" \
  45.308 +	  || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
  45.309 +	     $$tags $$unique
  45.310 +
  45.311 +GTAGS:
  45.312 +	here=`$(am__cd) $(top_builddir) && pwd` \
  45.313 +	  && cd $(top_srcdir) \
  45.314 +	  && gtags -i $(GTAGS_ARGS) $$here
  45.315 +
  45.316 +distclean-tags:
  45.317 +	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
  45.318 +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
  45.319 +
  45.320 +top_distdir = ../..
  45.321 +distdir = $(top_distdir)/$(PACKAGE)-$(VERSION)
  45.322 +
  45.323 +distdir: $(DISTFILES)
  45.324 +	@srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \
  45.325 +	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \
  45.326 +	list='$(DISTFILES)'; for file in $$list; do \
  45.327 +	  case $$file in \
  45.328 +	    $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \
  45.329 +	    $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \
  45.330 +	  esac; \
  45.331 +	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
  45.332 +	  dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \
  45.333 +	  if test "$$dir" != "$$file" && test "$$dir" != "."; then \
  45.334 +	    dir="/$$dir"; \
  45.335 +	    $(mkinstalldirs) "$(distdir)$$dir"; \
  45.336 +	  else \
  45.337 +	    dir=''; \
  45.338 +	  fi; \
  45.339 +	  if test -d $$d/$$file; then \
  45.340 +	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
  45.341 +	      cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
  45.342 +	    fi; \
  45.343 +	    cp -pR $$d/$$file $(distdir)$$dir || exit 1; \
  45.344 +	  else \
  45.345 +	    test -f $(distdir)/$$file \
  45.346 +	    || cp -p $$d/$$file $(distdir)/$$file \
  45.347 +	    || exit 1; \
  45.348 +	  fi; \
  45.349 +	done
  45.350 +check-am: all-am
  45.351 +check: check-am
  45.352 +all-am: Makefile $(LTLIBRARIES)
  45.353 +
  45.354 +installdirs:
  45.355 +install: install-am
  45.356 +install-exec: install-exec-am
  45.357 +install-data: install-data-am
  45.358 +uninstall: uninstall-am
  45.359 +
  45.360 +install-am: all-am
  45.361 +	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
  45.362 +
  45.363 +installcheck: installcheck-am
  45.364 +install-strip:
  45.365 +	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
  45.366 +	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
  45.367 +	  `test -z '$(STRIP)' || \
  45.368 +	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
  45.369 +mostlyclean-generic:
  45.370 +
  45.371 +clean-generic:
  45.372 +
  45.373 +distclean-generic:
  45.374 +	-rm -f $(CONFIG_CLEAN_FILES)
  45.375 +
  45.376 +maintainer-clean-generic:
  45.377 +	@echo "This command is intended for maintainers to use"
  45.378 +	@echo "it deletes files that may require special tools to rebuild."
  45.379 +clean: clean-am
  45.380 +
  45.381 +clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \
  45.382 +	mostlyclean-am
  45.383 +
  45.384 +distclean: distclean-am
  45.385 +	-rm -rf ./$(DEPDIR)
  45.386 +	-rm -f Makefile
  45.387 +distclean-am: clean-am distclean-compile distclean-generic \
  45.388 +	distclean-libtool distclean-tags
  45.389 +
  45.390 +dvi: dvi-am
  45.391 +
  45.392 +dvi-am:
  45.393 +
  45.394 +info: info-am
  45.395 +
  45.396 +info-am:
  45.397 +
  45.398 +install-data-am:
  45.399 +
  45.400 +install-exec-am:
  45.401 +
  45.402 +install-info: install-info-am
  45.403 +
  45.404 +install-man:
  45.405 +
  45.406 +installcheck-am:
  45.407 +
  45.408 +maintainer-clean: maintainer-clean-am
  45.409 +	-rm -rf ./$(DEPDIR)
  45.410 +	-rm -f Makefile
  45.411 +maintainer-clean-am: distclean-am maintainer-clean-generic
  45.412 +
  45.413 +mostlyclean: mostlyclean-am
  45.414 +
  45.415 +mostlyclean-am: mostlyclean-compile mostlyclean-generic \
  45.416 +	mostlyclean-libtool
  45.417 +
  45.418 +pdf: pdf-am
  45.419 +
  45.420 +pdf-am:
  45.421 +
  45.422 +ps: ps-am
  45.423 +
  45.424 +ps-am:
  45.425 +
  45.426 +uninstall-am: uninstall-info-am
  45.427 +
  45.428 +.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
  45.429 +	clean-libtool clean-noinstLTLIBRARIES ctags distclean \
  45.430 +	distclean-compile distclean-generic distclean-libtool \
  45.431 +	distclean-tags distdir dvi dvi-am info info-am install \
  45.432 +	install-am install-data install-data-am install-exec \
  45.433 +	install-exec-am install-info install-info-am install-man \
  45.434 +	install-strip installcheck installcheck-am installdirs \
  45.435 +	maintainer-clean maintainer-clean-generic mostlyclean \
  45.436 +	mostlyclean-compile mostlyclean-generic mostlyclean-libtool pdf \
  45.437 +	pdf-am ps ps-am tags uninstall uninstall-am uninstall-info-am
  45.438 +
  45.439 +# Tell versions [3.59,3.63) of GNU make to not export all variables.
  45.440 +# Otherwise a system limit (for SysV at least) may be exceeded.
  45.441 +.NOEXPORT:
    46.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    46.2 +++ b/src/encoding/base32.c	Sat Feb 20 21:18:28 2010 -0800
    46.3 @@ -0,0 +1,167 @@
    46.4 +/*
    46.5 + * $Id: base32.c,v 1.2 2004/03/27 00:34:25 mkern Exp $
    46.6 + *
    46.7 + * Copyright (C) 2003-2004 giFT project (gift.sourceforge.net)
    46.8 + *
    46.9 + * This program is free software; you can redistribute it and/or modify it
   46.10 + * under the terms of the GNU General Public License as published by the
   46.11 + * Free Software Foundation; either version 2, or (at your option) any
   46.12 + * later version.
   46.13 + *
   46.14 + * This program is distributed in the hope that it will be useful, but
   46.15 + * WITHOUT ANY WARRANTY; without even the implied warranty of
   46.16 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
   46.17 + * General Public License for more details.
   46.18 + */
   46.19 +
   46.20 +#include "gt_gnutella.h"
   46.21 +#include "encoding/base32.h"
   46.22 +
   46.23 +/*****************************************************************************/
   46.24 +
   46.25 +/* base32 alphabet */
   46.26 +static const char *ALPHA = "ABCDEFGHIJKLMNOPQRSTUVWXYZ234567";
   46.27 +
   46.28 +static uint8_t base32_bits[256] = { 0 };
   46.29 +
   46.30 +/*****************************************************************************/
   46.31 +
   46.32 +/* convert 5 bytes to 8 characters in base 32 */
   46.33 +static void bin_to_base32 (const uint8_t *in, char *out)
   46.34 +{
   46.35 +	out[0] = ALPHA[(in[0]       ) >> 3];
   46.36 +	out[1] = ALPHA[(in[0] & 0x07) << 2 | (in[1] & 0xc0) >> 6];
   46.37 +	out[2] = ALPHA[(in[1] & 0x3e) >> 1];
   46.38 +	out[3] = ALPHA[(in[1] & 0x01) << 4 | (in[2] & 0xf0) >> 4];
   46.39 +	out[4] = ALPHA[(in[2] & 0x0f) << 1 | (in[3] & 0x80) >> 7];
   46.40 +	out[5] = ALPHA[(in[3] & 0x7c) >> 2];
   46.41 +	out[6] = ALPHA[(in[3] & 0x03) << 3 | (in[4] & 0xe0) >> 5];
   46.42 +	out[7] = ALPHA[(in[4] & 0x1f)];
   46.43 +}
   46.44 +
   46.45 +/* convert 8 characters in base 32 to 5 bytes */
   46.46 +static void base32_to_bin (const char *base32, uint8_t *out)
   46.47 +{
   46.48 +	const unsigned char *in   = base32;
   46.49 +	const uint8_t       *bits = base32_bits;
   46.50 +
   46.51 +	out[0] = ((bits[in[0]]       ) << 3) | (bits[in[1]] & 0x1C) >> 2;
   46.52 +	out[1] = ((bits[in[1]] & 0x03) << 6) | (bits[in[2]]       ) << 1
   46.53 +	                                     | (bits[in[3]] & 0x10) >> 4;
   46.54 +	out[2] = ((bits[in[3]] & 0x0F) << 4) | (bits[in[4]] & 0x1E) >> 1;
   46.55 +	out[3] = ((bits[in[4]] & 0x01) << 7) | (bits[in[5]]       ) << 2
   46.56 +	                                     | (bits[in[6]] & 0x18) >> 3;
   46.57 +	out[4] = ((bits[in[6]] & 0x07) << 5) | (bits[in[7]]);
   46.58 +}
   46.59 +
   46.60 +static void init_base32_bits (void)
   46.61 +{
   46.62 +	int   i;
   46.63 +	char *pos;
   46.64 +
   46.65 +	/* set the each char's corresponding bit value in a lookup table */
   46.66 +	for (i = 0; i < sizeof(base32_bits); i++)
   46.67 +	{
   46.68 +		if ((pos = strchr (ALPHA, toupper (i))))
   46.69 +			base32_bits[i] = pos - ALPHA;
   46.70 +	}
   46.71 +}
   46.72 +
   46.73 +/*****************************************************************************/
   46.74 +
   46.75 +BOOL gt_base32_valid (const char *base32, size_t len)
   46.76 +{
   46.77 +	while (len > 0)
   46.78 +	{
   46.79 +		unsigned char c = toupper (*base32);
   46.80 +
   46.81 +		if (!((c >= 'A' && c <= 'Z') || (c >= '2' && c <= '7')))
   46.82 +			break;
   46.83 +
   46.84 +		base32++;
   46.85 +		len--;
   46.86 +	}
   46.87 +
   46.88 +	return (len > 0 ? FALSE : TRUE);
   46.89 +}
   46.90 +
   46.91 +void gt_base32_encode (const uint8_t *in, size_t in_len,
   46.92 +                       char *out, size_t out_len)
   46.93 +{
   46.94 +	assert (in_len == 20);
   46.95 +	assert (out_len == 32);
   46.96 +
   46.97 +	bin_to_base32 (in,      out);
   46.98 +	bin_to_base32 (in + 5,  out + 8);
   46.99 +	bin_to_base32 (in + 10, out + 16);
  46.100 +	bin_to_base32 (in + 15, out + 24);
  46.101 +}
  46.102 +
  46.103 +void gt_base32_decode (const char *in, size_t in_len,
  46.104 +                       uint8_t *out, size_t out_len)
  46.105 +{
  46.106 +	/* initialize lookup table */
  46.107 +	if (base32_bits['b'] == 0)
  46.108 +		init_base32_bits ();
  46.109 +
  46.110 +	assert (in_len == 32);
  46.111 +	assert (out_len == 20);
  46.112 +
  46.113 +	base32_to_bin (in     , out     );
  46.114 +	base32_to_bin (in +  8, out +  5);
  46.115 +	base32_to_bin (in + 16, out + 10);
  46.116 +	base32_to_bin (in + 24, out + 15);
  46.117 +}
  46.118 +
  46.119 +/*****************************************************************************/
  46.120 +
  46.121 +#if 0
  46.122 +static void test_str (const char *test)
  46.123 +{
  46.124 +	unsigned char bin[20];
  46.125 +	char          hash[33];
  46.126 +
  46.127 +	hash[32] = 0;
  46.128 +
  46.129 +	gt_base32_decode (test, strlen (test), bin, sizeof(bin));
  46.130 +	gt_base32_encode (bin, sizeof(bin), hash, sizeof(hash) - 1);
  46.131 +
  46.132 +	if (!gt_base32_valid (hash, 32))
  46.133 +		abort ();
  46.134 +
  46.135 +	if (strcmp (hash, test) != 0)
  46.136 +	{
  46.137 +		printf ("\ntest=%s(%d)\nhash=%s(%d)\n", test,
  46.138 +		         strlen (test), hash, strlen (hash));
  46.139 +		fflush (stdout);
  46.140 +	}
  46.141 +}
  46.142 +
  46.143 +int main (int argc, char **argv)
  46.144 +{
  46.145 +	int   i, j;
  46.146 +	char  str[33];
  46.147 +	int   len   = strlen (ALPHA);
  46.148 +
  46.149 +	str[sizeof (str) - 1] = 0;
  46.150 +
  46.151 +	test_str (ALPHA);
  46.152 +
  46.153 +	for (i = 1; i <= 100000; i++)
  46.154 +	{
  46.155 +		for (j = 0; j < 32; j++)
  46.156 +			str[j] = ALPHA[rand () % len];
  46.157 +
  46.158 +		if (!gt_base32_valid (str, 32))
  46.159 +			abort ();
  46.160 +
  46.161 +		printf ("%i\r", i);
  46.162 +		fflush (stdout);
  46.163 +		test_str (str);
  46.164 +		usleep (1);
  46.165 +	}
  46.166 +
  46.167 +	printf ("\n");
  46.168 +	return 0;
  46.169 +}
  46.170 +#endif
    47.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    47.2 +++ b/src/encoding/base32.h	Sat Feb 20 21:18:28 2010 -0800
    47.3 @@ -0,0 +1,32 @@
    47.4 +/*
    47.5 + * $Id: base32.h,v 1.1 2004/03/05 17:47:29 hipnod Exp $
    47.6 + *
    47.7 + * Copyright (C) 2003-2004 giFT project (gift.sourceforge.net)
    47.8 + *
    47.9 + * This program is free software; you can redistribute it and/or modify it
   47.10 + * under the terms of the GNU General Public License as published by the
   47.11 + * Free Software Foundation; either version 2, or (at your option) any
   47.12 + * later version.
   47.13 + *
   47.14 + * This program is distributed in the hope that it will be useful, but
   47.15 + * WITHOUT ANY WARRANTY; without even the implied warranty of
   47.16 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
   47.17 + * General Public License for more details.
   47.18 + */
   47.19 +
   47.20 +#ifndef GIFT_GT_BASE32_H_
   47.21 +#define GIFT_GT_BASE32_H_
   47.22 +
   47.23 +/*****************************************************************************/
   47.24 +
   47.25 +BOOL gt_base32_valid  (const char *base32, size_t len);
   47.26 +
   47.27 +void gt_base32_encode (const uint8_t *in, size_t in_len,
   47.28 +                       char *out, size_t out_len);
   47.29 +
   47.30 +void gt_base32_decode (const char *in, size_t in_len,
   47.31 +                       uint8_t *out, size_t out_len);
   47.32 +
   47.33 +/*****************************************************************************/
   47.34 +
   47.35 +#endif /* GIFT_GT_BASE32_H_ */
    48.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    48.2 +++ b/src/encoding/url.c	Sat Feb 20 21:18:28 2010 -0800
    48.3 @@ -0,0 +1,169 @@
    48.4 +/*
    48.5 + * $Id: url.c,v 1.1 2004/03/24 06:34:36 hipnod Exp $
    48.6 + *
    48.7 + * Copyright (C) 2001-2003 giFT project (gift.sourceforge.net)
    48.8 + *
    48.9 + * This program is free software; you can redistribute it and/or modify it
   48.10 + * under the terms of the GNU General Public License as published by the
   48.11 + * Free Software Foundation; either version 2, or (at your option) any
   48.12 + * later version.
   48.13 + *
   48.14 + * This program is distributed in the hope that it will be useful, but
   48.15 + * WITHOUT ANY WARRANTY; without even the implied warranty of
   48.16 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
   48.17 + * General Public License for more details.
   48.18 + */
   48.19 +
   48.20 +#include "gt_gnutella.h"
   48.21 +#include "encoding/url.h"
   48.22 +
   48.23 +#include <ctype.h>
   48.24 +
   48.25 +/*****************************************************************************/
   48.26 +/* url decode/encode helpers */
   48.27 +
   48.28 +static int oct_value_from_hex (char hex_char)
   48.29 +{
   48.30 +	if (!isxdigit (hex_char))
   48.31 +		return 0;
   48.32 +
   48.33 +	if (hex_char >= '0' && hex_char <= '9')
   48.34 +		return (hex_char - '0');
   48.35 +
   48.36 +	hex_char = toupper (hex_char);
   48.37 +
   48.38 +	return ((hex_char - 'A') + 10);
   48.39 +}
   48.40 +
   48.41 +char *gt_url_decode (const char *encoded)
   48.42 +{
   48.43 +	char *decoded, *ptr;
   48.44 +
   48.45 +	if (!encoded)
   48.46 +		return NULL;
   48.47 +
   48.48 +	/* make sure we are using our own memory here ... */
   48.49 +	ptr = strdup (encoded);
   48.50 +
   48.51 +	/* save the head */
   48.52 +	decoded = ptr;
   48.53 +
   48.54 +	/* convert '+' -> ' ' and %2x -> char value */
   48.55 +	while (*ptr)
   48.56 +	{
   48.57 +		switch (*ptr)
   48.58 +		{
   48.59 +		 case '+':
   48.60 +			*ptr = ' ';
   48.61 +			break;
   48.62 +		 case '%':
   48.63 +			if (isxdigit (ptr[1]) && isxdigit (ptr[2]))
   48.64 +			{
   48.65 +				int oct_val;
   48.66 +
   48.67 +				oct_val =  oct_value_from_hex (ptr[1]) * 16;
   48.68 +				oct_val += oct_value_from_hex (ptr[2]);
   48.69 +
   48.70 +				*ptr = (char) oct_val;
   48.71 +
   48.72 +				string_move (ptr + 1, ptr + 3);
   48.73 +			}
   48.74 +			break;
   48.75 +		 default:
   48.76 +			break;
   48.77 +		}
   48.78 +
   48.79 +		ptr++;
   48.80 +	}
   48.81 +
   48.82 +	return decoded;
   48.83 +}
   48.84 +
   48.85 +static char *gt_url_encode_char (char *stream, unsigned char c)
   48.86 +{
   48.87 +	const char hex_alpha[] = "0123456789abcdef";
   48.88 +
   48.89 +	*stream++ = '%';
   48.90 +
   48.91 +	*stream++ = hex_alpha[(c & 0xf0) >> 4];
   48.92 +	*stream++ = hex_alpha[(c & 0x0f)];
   48.93 +
   48.94 +	return stream;
   48.95 +}
   48.96 +
   48.97 +/*
   48.98 + * This is a bit overzealous about what to encode..hopefully that's ok.  This
   48.99 + * escapes path components ('/').
  48.100 + */
  48.101 +static BOOL is_safe_char (unsigned char c)
  48.102 +{
  48.103 +	if (c >= 'A' && c <= 'Z')
  48.104 +		return TRUE;
  48.105 +
  48.106 +	if (c >= 'a' && c <= 'z')
  48.107 +		return TRUE;
  48.108 +
  48.109 +	if (c >= '0' && c <= '9')
  48.110 +		return TRUE;
  48.111 +
  48.112 +	switch (c)
  48.113 +	{
  48.114 +	 case '-':
  48.115 +	 case '.':
  48.116 +	 case '_':
  48.117 +		return TRUE;
  48.118 +	 default:
  48.119 +		return FALSE;
  48.120 +	}
  48.121 +
  48.122 +	return FALSE;
  48.123 +}
  48.124 +
  48.125 +char *gt_url_encode (const char *decoded)
  48.126 +{
  48.127 +	char         *encoded, *ptr;
  48.128 +	unsigned char chr;
  48.129 +
  48.130 +	if (!decoded)
  48.131 +		return NULL;
  48.132 +
  48.133 +	/* allocate a large enough buffer for all cases */
  48.134 +	encoded = ptr = malloc ((strlen (decoded) * 3) + 1);
  48.135 +
  48.136 +	while ((chr = *decoded) != 0)
  48.137 +	{
  48.138 +		if (is_safe_char (chr))
  48.139 +			*ptr++ = chr;
  48.140 +		else
  48.141 +			ptr = gt_url_encode_char (ptr, chr);
  48.142 +
  48.143 +		decoded++;
  48.144 +	}
  48.145 +
  48.146 +	*ptr = 0;
  48.147 +
  48.148 +	return encoded;
  48.149 +}
  48.150 +
  48.151 +/*****************************************************************************/
  48.152 +
  48.153 +#if 0
  48.154 +int main (int argc, char **argv)
  48.155 +{
  48.156 +	int i;
  48.157 +
  48.158 +	for (i = 1; i < argc; i++)
  48.159 +	{
  48.160 +		char *enc, *dec;
  48.161 +
  48.162 +		enc = gt_url_encode (argv[i]);
  48.163 +		dec = gt_url_decode (enc);
  48.164 +
  48.165 +		printf ("%s\n%s\n%s\n", argv[i], enc, dec);
  48.166 +
  48.167 +		assert (strcmp (argv[i], dec) == 0);
  48.168 +	}
  48.169 +
  48.170 +	return 0;
  48.171 +}
  48.172 +#endif
    49.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    49.2 +++ b/src/encoding/url.h	Sat Feb 20 21:18:28 2010 -0800
    49.3 @@ -0,0 +1,27 @@
    49.4 +/*
    49.5 + * $Id: url.h,v 1.1 2004/03/24 06:34:36 hipnod Exp $
    49.6 + *
    49.7 + * Copyright (C) 2001-2003 giFT project (gift.sourceforge.net)
    49.8 + *
    49.9 + * This program is free software; you can redistribute it and/or modify it
   49.10 + * under the terms of the GNU General Public License as published by the
   49.11 + * Free Software Foundation; either version 2, or (at your option) any
   49.12 + * later version.
   49.13 + *
   49.14 + * This program is distributed in the hope that it will be useful, but
   49.15 + * WITHOUT ANY WARRANTY; without even the implied warranty of
   49.16 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
   49.17 + * General Public License for more details.
   49.18 + */
   49.19 +
   49.20 +#ifndef GIFT_GT_URL_H_
   49.21 +#define GIFT_GT_URL_H_
   49.22 +
   49.23 +/*****************************************************************************/
   49.24 +
   49.25 +char *gt_url_encode (const char *url);
   49.26 +char *gt_url_decode (const char *url);
   49.27 +
   49.28 +/*****************************************************************************/
   49.29 +
   49.30 +#endif /* GIFT_GT_URL_H_ */
    50.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    50.2 +++ b/src/file_cache.c	Sat Feb 20 21:18:28 2010 -0800
    50.3 @@ -0,0 +1,202 @@
    50.4 +/*
    50.5 + * $Id: file_cache.c,v 1.15 2004/03/24 06:28:16 hipnod Exp $
    50.6 + *
    50.7 + * Copyright (C) 2001-2003 giFT project (gift.sourceforge.net)
    50.8 + *
    50.9 + * This program is free software; you can redistribute it and/or modify it
   50.10 + * under the terms of the GNU General Public License as published by the
   50.11 + * Free Software Foundation; either version 2, or (at your option) any
   50.12 + * later version.
   50.13 + *
   50.14 + * This program is distributed in the hope that it will be useful, but
   50.15 + * WITHOUT ANY WARRANTY; without even the implied warranty of
   50.16 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
   50.17 + * General Public License for more details.
   50.18 + */
   50.19 +
   50.20 +#include "gt_gnutella.h"
   50.21 +
   50.22 +#include "file_cache.h"
   50.23 +
   50.24 +/*****************************************************************************/
   50.25 +
   50.26 +FileCache *file_cache_new (const char *file)
   50.27 +{
   50.28 +	FileCache *file_cache;
   50.29 +
   50.30 +	if (!(file_cache = malloc (sizeof (FileCache))))
   50.31 +		return NULL;
   50.32 +
   50.33 +	memset (file_cache, 0, sizeof (FileCache));
   50.34 +
   50.35 +	file_cache->file = STRDUP (file);
   50.36 +
   50.37 +	if (!file_cache_load (file_cache))
   50.38 +		GT->DBGFN (GT, "failed loading %s", file);
   50.39 +
   50.40 +	return file_cache;
   50.41 +}
   50.42 +
   50.43 +void file_cache_free (FileCache *cache)
   50.44 +{
   50.45 +	if (!cache)
   50.46 +		return;
   50.47 +
   50.48 +	dataset_clear (cache->d);
   50.49 +
   50.50 +	free (cache->file);
   50.51 +	free (cache);
   50.52 +}
   50.53 +
   50.54 +/*****************************************************************************/
   50.55 +
   50.56 +int file_cache_load (FileCache *cache)
   50.57 +{
   50.58 +	struct stat st;
   50.59 +	time_t      mtime;
   50.60 +	char       *line  = NULL;
   50.61 +	FILE       *f;
   50.62 +	int         nlines;
   50.63 +
   50.64 +	if (!cache)
   50.65 +		return FALSE;
   50.66 +
   50.67 +	if (!(f = fopen (cache->file, "r")))
   50.68 +	{
   50.69 +		GT->DBGFN (GT, "couldnt open %s for reading: %s", cache->file,
   50.70 +		           GIFT_STRERROR ());
   50.71 +		return FALSE;
   50.72 +	}
   50.73 +
   50.74 +	mtime = 0;
   50.75 +
   50.76 +	if (file_stat (cache->file, &st))
   50.77 +		mtime = st.st_mtime;
   50.78 +
   50.79 +	dataset_clear (cache->d);
   50.80 +
   50.81 +	cache->d     = dataset_new (DATASET_HASH);
   50.82 +	cache->mtime = mtime;
   50.83 +
   50.84 +	nlines = 0;
   50.85 +
   50.86 +	while (file_read_line (f, &line))
   50.87 +	{
   50.88 +		char *key;
   50.89 +		char *value = line;
   50.90 +
   50.91 +		key = string_sep (&value, " ");
   50.92 +
   50.93 +		string_trim (key);
   50.94 +		string_trim (value);
   50.95 +
   50.96 +		if (!key)
   50.97 +			continue;
   50.98 +
   50.99 +		if (!value)
  50.100 +			value = "";
  50.101 +
  50.102 +		dataset_insertstr (&cache->d, key, value);
  50.103 +
  50.104 +		nlines++;
  50.105 +	}
  50.106 +
  50.107 +	if (fclose (f) != 0)
  50.108 +		return FALSE;
  50.109 +
  50.110 +	GT->DBGFN (GT, "loaded filecache for %s. nlines = %i", cache->file, nlines);
  50.111 +	return TRUE;
  50.112 +}
  50.113 +
  50.114 +static void sync_one (ds_data_t *key, ds_data_t *value, String *s)
  50.115 +{
  50.116 +	char *keystr   = key->data;
  50.117 +	char *valuestr = value->data;
  50.118 +
  50.119 +	string_appendf (s, "%s %s\n", keystr, valuestr);
  50.120 +}
  50.121 +
  50.122 +BOOL file_cache_sync (FileCache *cache)
  50.123 +{
  50.124 +	FILE    *f;
  50.125 +	String  *s;
  50.126 +	char     tmp_path[PATH_MAX];
  50.127 +
  50.128 +	if (!cache)
  50.129 +		return FALSE;
  50.130 +
  50.131 +	snprintf (tmp_path, sizeof (tmp_path), "%s.tmp", cache->file);
  50.132 +
  50.133 +	if (!(s = string_new (NULL, 0, 0, TRUE)))
  50.134 +		return FALSE;
  50.135 +
  50.136 +	if (!(f = fopen (tmp_path, "w")))
  50.137 +	{
  50.138 +		GT->DBGFN (GT, "couldnt write to %s: %s", tmp_path, GIFT_STRERROR ());
  50.139 +		string_free (s);
  50.140 +		return FALSE;
  50.141 +	}
  50.142 +
  50.143 +	GT->DBGFN (GT, "syncing %s to disk", tmp_path);
  50.144 +
  50.145 +	dataset_foreach (cache->d, DS_FOREACH(sync_one), s);
  50.146 +
  50.147 +	if (fwrite (s->str, 1, s->len, f) != s->len)
  50.148 +	{
  50.149 +		GT->DBGFN (GT, "failed writing %s: %s", tmp_path, GIFT_STRERROR());
  50.150 +		string_free (s);
  50.151 +		fclose (f);
  50.152 +		return FALSE;
  50.153 +	}
  50.154 +
  50.155 +	string_free (s);
  50.156 +
  50.157 +	if (fclose (f) != 0)
  50.158 +	{
  50.159 +		GT->DBGFN (GT, "failed closing %s: %s", tmp_path, GIFT_STRERROR());
  50.160 +		return FALSE;
  50.161 +	}
  50.162 +
  50.163 +	if (!file_mv (tmp_path, cache->file))
  50.164 +	{
  50.165 +		GT->DBGFN (GT, "file move %s -> %s failed", tmp_path, cache->file);
  50.166 +		return FALSE;
  50.167 +	}
  50.168 +
  50.169 +	return TRUE;
  50.170 +}
  50.171 +
  50.172 +void file_cache_flush (FileCache *cache)
  50.173 +{
  50.174 +	if (!cache)
  50.175 +		return;
  50.176 +
  50.177 +	dataset_clear (cache->d);
  50.178 +	cache->d = NULL;
  50.179 +}
  50.180 +
  50.181 +/*****************************************************************************/
  50.182 +
  50.183 +char *file_cache_lookup (FileCache *cache, const char *key)
  50.184 +{
  50.185 +	if (!cache)
  50.186 +		return NULL;
  50.187 +
  50.188 +	return dataset_lookupstr (cache->d, key);
  50.189 +}
  50.190 +
  50.191 +void file_cache_insert (FileCache *cache, const char *key, const char *value)
  50.192 +{
  50.193 +	if (!cache)
  50.194 +		return;
  50.195 +
  50.196 +	dataset_insertstr (&cache->d, key, value);
  50.197 +}
  50.198 +
  50.199 +void file_cache_remove (FileCache *cache, const char *key)
  50.200 +{
  50.201 +	if (!cache)
  50.202 +		return;
  50.203 +
  50.204 +	dataset_removestr (cache->d, key);
  50.205 +}
    51.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    51.2 +++ b/src/file_cache.h	Sat Feb 20 21:18:28 2010 -0800
    51.3 @@ -0,0 +1,46 @@
    51.4 +/*
    51.5 + * $Id: file_cache.h,v 1.6 2004/03/24 06:28:16 hipnod Exp $
    51.6 + *
    51.7 + * Copyright (C) 2001-2003 giFT project (gift.sourceforge.net)
    51.8 + *
    51.9 + * This program is free software; you can redistribute it and/or modify it
   51.10 + * under the terms of the GNU General Public License as published by the
   51.11 + * Free Software Foundation; either version 2, or (at your option) any
   51.12 + * later version.
   51.13 + *
   51.14 + * This program is distributed in the hope that it will be useful, but
   51.15 + * WITHOUT ANY WARRANTY; without even the implied warranty of
   51.16 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
   51.17 + * General Public License for more details.
   51.18 + */
   51.19 +
   51.20 +#ifndef GIFT_GT_FILE_CACHE_H_
   51.21 +#define GIFT_GT_FILE_CACHE_H_
   51.22 +
   51.23 +/*****************************************************************************/
   51.24 +
   51.25 +typedef struct _file_cache
   51.26 +{
   51.27 +	Dataset *d;
   51.28 +	time_t   mtime;
   51.29 +	char    *file;
   51.30 +} FileCache;
   51.31 +
   51.32 +/*****************************************************************************/
   51.33 +
   51.34 +FileCache    *file_cache_new    (const char *file);
   51.35 +void          file_cache_free   (FileCache *cache);
   51.36 +int           file_cache_load   (FileCache *cache);
   51.37 +void          file_cache_flush  (FileCache *cache);
   51.38 +BOOL          file_cache_sync   (FileCache *cache);
   51.39 +
   51.40 +/*****************************************************************************/
   51.41 +
   51.42 +char         *file_cache_lookup (FileCache *cache, const char *key);
   51.43 +void          file_cache_insert (FileCache *cache, const char *key,
   51.44 +                                 const char *value);
   51.45 +void          file_cache_remove (FileCache *cache, const char *key);
   51.46 +
   51.47 +/*****************************************************************************/
   51.48 +
   51.49 +#endif /* GIFT_GT_FILE_CACHE_H_ */
    52.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    52.2 +++ b/src/gt_accept.c	Sat Feb 20 21:18:28 2010 -0800
    52.3 @@ -0,0 +1,795 @@
    52.4 +/*
    52.5 + * $Id: gt_accept.c,v 1.64 2005/01/04 15:03:40 mkern Exp $
    52.6 + *
    52.7 + * Copyright (C) 2001-2003 giFT project (gift.sourceforge.net)
    52.8 + *
    52.9 + * This program is free software; you can redistribute it and/or modify it
   52.10 + * under the terms of the GNU General Public License as published by the
   52.11 + * Free Software Foundation; either version 2, or (at your option) any
   52.12 + * later version.
   52.13 + *
   52.14 + * This program is distributed in the hope that it will be useful, but
   52.15 + * WITHOUT ANY WARRANTY; without even the implied warranty of
   52.16 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
   52.17 + * General Public License for more details.
   52.18 + */
   52.19 +
   52.20 +#include "gt_gnutella.h"
   52.21 +
   52.22 +#include "gt_packet.h"
   52.23 +#include "gt_utils.h"
   52.24 +
   52.25 +#include "gt_connect.h"
   52.26 +
   52.27 +#include "gt_node.h"
   52.28 +#include "gt_node_cache.h"
   52.29 +#include "gt_netorg.h"
   52.30 +
   52.31 +#include "gt_xfer_obj.h"
   52.32 +#include "gt_xfer.h"
   52.33 +#include "gt_http_server.h"
   52.34 +
   52.35 +#include "gt_accept.h"
   52.36 +#include "gt_bind.h"
   52.37 +#include "gt_ban.h"
   52.38 +#include "gt_version.h"
   52.39 +
   52.40 +#include "message/gt_message.h"    /* gnutella_start_connection */
   52.41 +
   52.42 +/*****************************************************************************/
   52.43 +
   52.44 +#define MAX_FDBUF_SIZE     16384
   52.45 +
   52.46 +#define INCOMING_TIMEOUT   (1 * MINUTES)
   52.47 +
   52.48 +/*****************************************************************************/
   52.49 +/* Handle incoming connections to this node */
   52.50 +
   52.51 +/*
   52.52 + * Wrap TCPC and associated timeout for incoming connections in order to limit
   52.53 + * the number of incoming connections.
   52.54 + */
   52.55 +struct incoming_conn
   52.56 +{
   52.57 +	TCPC      *c;
   52.58 +	timer_id   timer;
   52.59 +};
   52.60 +
   52.61 +#define GT_METHOD(func) void func (int fd, input_id id, \
   52.62 +                                   struct incoming_conn *conn)
   52.63 +typedef void (*GtAcceptFunc) (int fd, input_id id, struct incoming_conn *conn);
   52.64 +
   52.65 +GT_METHOD(gt_server_accept);
   52.66 +GT_METHOD(gt_server_get);
   52.67 +GT_METHOD(gt_server_giv);
   52.68 +
   52.69 +static struct server_cmd
   52.70 +{
   52.71 +	char         *name;
   52.72 +	GtAcceptFunc  callback;
   52.73 +}
   52.74 +server_commands[] =
   52.75 +{
   52.76 +	{ "GNUTELLA",   gt_server_accept    },
   52.77 +	{ "GET",        gt_server_get       },
   52.78 +	{ "HEAD",       gt_server_get       },
   52.79 +	{ "GIV",        gt_server_giv       },
   52.80 +	{ NULL,         NULL                }
   52.81 +};
   52.82 +
   52.83 +/*****************************************************************************/
   52.84 +
   52.85 +static void send_node_headers    (int fd, input_id id, TCPC *c);
   52.86 +static void recv_final_handshake (int fd, input_id id, TCPC *c);
   52.87 +static void determine_method     (int fd, input_id id,
   52.88 +                                  struct incoming_conn *conn);
   52.89 +
   52.90 +/*****************************************************************************/
   52.91 +
   52.92 +static void incoming_conn_free (struct incoming_conn *conn)
   52.93 +{
   52.94 +	timer_remove (conn->timer);
   52.95 +	free (conn);
   52.96 +}
   52.97 +
   52.98 +static void incoming_conn_close (struct incoming_conn *conn)
   52.99 +{
  52.100 +	tcp_close (conn->c);
  52.101 +	incoming_conn_free (conn);
  52.102 +}
  52.103 +
  52.104 +static BOOL conn_timeout (struct incoming_conn *conn)
  52.105 +{
  52.106 +	incoming_conn_close (conn);
  52.107 +	return FALSE;
  52.108 +}
  52.109 +
  52.110 +static struct incoming_conn *incoming_conn_alloc (TCPC *c)
  52.111 +{
  52.112 +	struct incoming_conn *conn;
  52.113 +
  52.114 +	conn = malloc (sizeof (struct incoming_conn));
  52.115 +	if (!conn)
  52.116 +		return NULL;
  52.117 +
  52.118 +	conn->c = c;
  52.119 +	conn->timer = timer_add (INCOMING_TIMEOUT, (TimerCallback)conn_timeout,
  52.120 +	                         conn);
  52.121 +
  52.122 +	return conn;
  52.123 +}
  52.124 +
  52.125 +/*****************************************************************************/
  52.126 +
  52.127 +BOOL gt_fdbuf_full (FDBuf *buf)
  52.128 +{
  52.129 +	size_t len = MAX_FDBUF_SIZE;
  52.130 +
  52.131 +	if (fdbuf_data (buf, &len) == NULL)
  52.132 +		return TRUE;
  52.133 +
  52.134 +	return len >= MAX_FDBUF_SIZE;
  52.135 +}
  52.136 +
  52.137 +/*****************************************************************************/
  52.138 +
  52.139 +/*
  52.140 + * Receive an incoming connection.
  52.141 + */
  52.142 +void gnutella_handle_incoming (int fd, input_id id, TCPC *listen)
  52.143 +{
  52.144 +	TCPC *c;
  52.145 +
  52.146 +	if (!(c = tcp_accept (listen, FALSE)))
  52.147 +		return;
  52.148 +
  52.149 +	if (HANDSHAKE_DEBUG)
  52.150 +		GT->DBGSOCK (GT, c, "got a new connection");
  52.151 +
  52.152 +	id = INPUT_NONE;
  52.153 +	gt_handshake_dispatch_incoming (fd, id, c);
  52.154 +}
  52.155 +
  52.156 +/*
  52.157 + * Mark not firewalled if the other end isn't local.
  52.158 + */
  52.159 +static void fw_status_update (TCPC *c)
  52.160 +{
  52.161 +	if (!c->outgoing && !net_match_host (c->host, "LOCAL"))
  52.162 +	{
  52.163 +		if (GT_SELF->firewalled)
  52.164 +			GT->DBGSOCK (GT, c, "connected, clearing firewalled status");
  52.165 +
  52.166 +		gt_bind_clear_firewalled ();
  52.167 +	}
  52.168 +}
  52.169 +
  52.170 +/*
  52.171 + * Allocate a structure to track this connection and continue the dispatching
  52.172 + * process.
  52.173 + */
  52.174 +void gt_handshake_dispatch_incoming (int fd, input_id id, TCPC *c)
  52.175 +{
  52.176 +	struct incoming_conn *conn;
  52.177 +	in_addr_t             peer_ip;
  52.178 +
  52.179 +	/*
  52.180 +	 * This will trigger if the connection was closed on the remote end
  52.181 +	 * or if there's a input timer setup to timeout this connection.  In the
  52.182 +	 * latter case, we have to avoid adding any inputs for the connection.
  52.183 +	 */
  52.184 +	if (net_sock_error (c->fd))
  52.185 +	{
  52.186 +		tcp_close (c);
  52.187 +		return;
  52.188 +	}
  52.189 +
  52.190 +	peer_ip = net_peer (c->fd);
  52.191 +
  52.192 +	/*
  52.193 +	 * While this might be nice for the banner, it's not nice to the ban-ee,
  52.194 +	 * and I'm sure there's some bugs in the banning code, so we should
  52.195 +	 * send back an error instead.
  52.196 +	 */
  52.197 +#if 0
  52.198 +	if (gt_ban_ipv4_is_banned (peer_ip))
  52.199 +	{
  52.200 +		if (HANDSHAKE_DEBUG)
  52.201 +			GT->DBGSOCK (GT, c, "not accepting connection [address banned]");
  52.202 +
  52.203 +		tcp_close (c);
  52.204 +		return;
  52.205 +	}
  52.206 +#endif
  52.207 +
  52.208 +	/*
  52.209 +	 * If there are too many HTTP connections for this IP, close the
  52.210 +	 * connection now before investing any more resources servicing it.
  52.211 +	 */
  52.212 +	if (gt_http_connection_length (GT_TRANSFER_UPLOAD, peer_ip) >=
  52.213 +	    HTTP_MAX_PERUSER_UPLOAD_CONNS)
  52.214 +	{
  52.215 +		if (HTTP_DEBUG)
  52.216 +			GT->DBGSOCK (GT, c, "too many connections for this user, closing");
  52.217 +
  52.218 +		tcp_close (c);
  52.219 +		return;
  52.220 +	}
  52.221 +
  52.222 +	/* local hosts_allow may need to be evaluated to keep outside sources
  52.223 +	 * away */
  52.224 +	if (GNUTELLA_LOCAL_MODE)
  52.225 +	{
  52.226 +		if (!net_match_host (peer_ip, GNUTELLA_LOCAL_ALLOW))
  52.227 +		{
  52.228 +			if (HANDSHAKE_DEBUG)
  52.229 +				GT->DBGSOCK (GT, c, "non-local connection, closing");
  52.230 +
  52.231 +			tcp_close (c);
  52.232 +			return;
  52.233 +		}
  52.234 +	}
  52.235 +
  52.236 +	if (!(conn = incoming_conn_alloc (c)))
  52.237 +	{
  52.238 +		tcp_close (c);
  52.239 +		return;
  52.240 +	}
  52.241 +
  52.242 +	input_remove (id);
  52.243 +	input_add (c->fd, conn, INPUT_READ,
  52.244 +	           (InputCallback)determine_method, 0);
  52.245 +}
  52.246 +
  52.247 +/*
  52.248 + * Dispatch incoming connections to the proper subsystem.
  52.249 + */
  52.250 +static void determine_method (int fd, input_id id, struct incoming_conn *conn)
  52.251 +{
  52.252 +	struct server_cmd  *command;
  52.253 +	FDBuf              *fdbuf;
  52.254 +	int                 ret;
  52.255 +	char               *request;
  52.256 +	TCPC               *c       = conn->c;
  52.257 +
  52.258 +	fdbuf = tcp_readbuf (c);
  52.259 +
  52.260 +	if ((ret = fdbuf_delim (fdbuf, "\n")) < 0)
  52.261 +	{
  52.262 +		if (HANDSHAKE_DEBUG)
  52.263 +			GT->DBGSOCK (GT, c, "error: %s", GIFT_NETERROR ());
  52.264 +
  52.265 +		incoming_conn_close (conn);
  52.266 +		return;
  52.267 +	}
  52.268 +
  52.269 +	/* some data was read: update fw status */
  52.270 +	fw_status_update (c);
  52.271 +
  52.272 +	if (gt_fdbuf_full (fdbuf))
  52.273 +	{
  52.274 +		incoming_conn_close (conn);
  52.275 +		return;
  52.276 +	}
  52.277 +
  52.278 +	if (ret > 0)
  52.279 +		return;
  52.280 +
  52.281 +	/*
  52.282 +	 * NOTE: fdbuf_release() is not called here, so the first line is left on
  52.283 +	 * the FDBuf.
  52.284 +	 */
  52.285 +	request = fdbuf_data (fdbuf, NULL);
  52.286 +
  52.287 +	for (command = server_commands; command->name != NULL; command++)
  52.288 +	{
  52.289 +		if (!strncasecmp (command->name, request, strlen (command->name)))
  52.290 +		{
  52.291 +			input_remove (id);
  52.292 +			input_add (fd, conn, INPUT_READ,
  52.293 +			           (InputCallback)command->callback, 0);
  52.294 +
  52.295 +			return;
  52.296 +		}
  52.297 +	}
  52.298 +
  52.299 +	if (HANDSHAKE_DEBUG)
  52.300 +		GT->DBGFN (GT, "bad command: %s", request);
  52.301 +
  52.302 +	incoming_conn_close (conn);
  52.303 +}
  52.304 +
  52.305 +/*****************************************************************************/
  52.306 +
  52.307 +/*
  52.308 + * Main connection acceptance routine.  This begins the connection's
  52.309 + * journey through the rest of the handshaking code.
  52.310 + */
  52.311 +GT_METHOD(gt_server_accept)
  52.312 +{
  52.313 +	char         *request;
  52.314 +	char         *version_str;
  52.315 +	size_t        request_len = 0;
  52.316 +	int           n;
  52.317 +	GtNode       *node;
  52.318 +	TCPC         *c           = conn->c;
  52.319 +	FDBuf        *buf;
  52.320 +
  52.321 +	if (HANDSHAKE_DEBUG)
  52.322 +		GT->DBGFN (GT, "entered");
  52.323 +
  52.324 +	buf = tcp_readbuf (c);
  52.325 +
  52.326 +	if ((n = fdbuf_delim (buf, "\n")) < 0)
  52.327 +	{
  52.328 +		if (HANDSHAKE_DEBUG)
  52.329 +			GT->DBGSOCK (GT, c, "error on recv: %s", GIFT_NETERROR ());
  52.330 +
  52.331 +		incoming_conn_close (conn);
  52.332 +		return;
  52.333 +	}
  52.334 +
  52.335 +	if (gt_fdbuf_full (buf))
  52.336 +	{
  52.337 +		incoming_conn_close (conn);
  52.338 +		return;
  52.339 +	}
  52.340 +
  52.341 +	if (n > 0)
  52.342 +		return;
  52.343 +
  52.344 +	request = fdbuf_data (buf, &request_len);
  52.345 +
  52.346 +	if (!gt_http_header_terminated (request, request_len))
  52.347 +		return;
  52.348 +
  52.349 +	fdbuf_release (buf);
  52.350 +
  52.351 +	if (HANDSHAKE_DEBUG)
  52.352 +		GT->DBGSOCK (GT, c, "accepted headers:\n%s", request);
  52.353 +
  52.354 +	version_str = strchr (request, '/');
  52.355 +	if (version_str)
  52.356 +		version_str++;
  52.357 +
  52.358 +	if (strncasecmp ("GNUTELLA CONNECT/", request,
  52.359 +	                  sizeof ("GNUTELLA CONNECT/") - 1) != 0)
  52.360 +	{
  52.361 +		if (HANDSHAKE_DEBUG)
  52.362 +			GT->DBGSOCK (GT, c, "bad handshake header");
  52.363 +
  52.364 +		incoming_conn_close (conn);
  52.365 +		return;
  52.366 +	}
  52.367 +
  52.368 +	/* deny 0.4 connections */
  52.369 +	if (!version_str || strncasecmp (version_str, "0.4", 3) == 0)
  52.370 +	{
  52.371 +		if (HANDSHAKE_DEBUG)
  52.372 +			GT->DBGSOCK (GT, c, "closing 0.4 connection");
  52.373 +
  52.374 +		incoming_conn_close (conn);
  52.375 +		return;
  52.376 +	}
  52.377 +
  52.378 +	/* make a node out of this connection */
  52.379 +	if (!(node = gt_node_instantiate (c)))
  52.380 +	{
  52.381 +		if (HANDSHAKE_DEBUG)
  52.382 +			GT->DBGFN (GT, "node_instantiate failed");
  52.383 +
  52.384 +		incoming_conn_close (conn);
  52.385 +		return;
  52.386 +	}
  52.387 +
  52.388 +	/*
  52.389 +	 * Update the start_connect_time so the node will stick around for a while
  52.390 +	 * even when the node list gets trimmed.
  52.391 +	 */
  52.392 +	node->start_connect_time = time (NULL);
  52.393 +
  52.394 +	gt_node_state_set (node, GT_NODE_CONNECTING_1);
  52.395 +	node->incoming = TRUE;
  52.396 +
  52.397 +	/*
  52.398 +	 * Store the http header.
  52.399 +	 *
  52.400 +	 * NOTE: We don't check the return code here. This function expects a
  52.401 +	 *       properly formatted HTTP response, but we are handing it a
  52.402 +	 *       Gnutella connection request instead, so it will return failure.
  52.403 +	 */
  52.404 +	gnutella_parse_response_headers (request, &node->hdr);
  52.405 +
  52.406 +	/*
  52.407 +	 * Use the node handshake timeout timer now, and get rid of the
  52.408 +	 * generic incoming connection timeout timer.
  52.409 +	 */
  52.410 +	gnutella_set_handshake_timeout (c, TIMEOUT_2 * SECONDS);
  52.411 +	incoming_conn_free (conn);
  52.412 +
  52.413 +	input_remove (id);
  52.414 +	input_add (fd, c, INPUT_WRITE,
  52.415 +	           (InputCallback)send_node_headers, TIMEOUT_DEF);
  52.416 +}
  52.417 +
  52.418 +GT_METHOD(gt_server_giv)
  52.419 +{
  52.420 +	FDBuf        *buf;
  52.421 +	int           n;
  52.422 +	in_addr_t     peer_ip;
  52.423 +	char         *response;
  52.424 +	size_t        response_len = 0;
  52.425 +	char         *client_id;
  52.426 +	gt_guid_t    *guid;
  52.427 +	TCPC         *c            = conn->c;
  52.428 +
  52.429 +	if (HTTP_DEBUG || HANDSHAKE_DEBUG)
  52.430 +		GT->DBGFN (GT, "entered");
  52.431 +
  52.432 +	buf = tcp_readbuf (c);
  52.433 +
  52.434 +	if ((n = fdbuf_delim (buf, "\n")) < 0)
  52.435 +	{
  52.436 +		incoming_conn_close (conn);
  52.437 +		return;
  52.438 +	}
  52.439 +
  52.440 +	if (gt_fdbuf_full (buf))
  52.441 +	{
  52.442 +		incoming_conn_close (conn);
  52.443 +		return;
  52.444 +	}
  52.445 +
  52.446 +	if (n > 0)
  52.447 +		return;
  52.448 +
  52.449 +	response = fdbuf_data (buf, &response_len);
  52.450 +
  52.451 +	if (!gt_http_header_terminated (response, response_len))
  52.452 +		return;
  52.453 +
  52.454 +	fdbuf_release (buf);
  52.455 +
  52.456 +	if (HTTP_DEBUG || HANDSHAKE_DEBUG)
  52.457 +		GT->DBGSOCK (GT, c, "giv response=%s", response);
  52.458 +
  52.459 +	string_sep (&response, " ");           /* Skip "GIV " */
  52.460 +	string_sep (&response, ":");           /* Skip the file index */
  52.461 +
  52.462 +	client_id = string_sep (&response, "/");
  52.463 +	string_lower (client_id);
  52.464 +
  52.465 +	if (!(guid = gt_guid_bin (client_id)))
  52.466 +	{
  52.467 +		incoming_conn_close (conn);
  52.468 +		return;
  52.469 +	}
  52.470 +
  52.471 +	peer_ip = net_peer (c->fd);
  52.472 +
  52.473 +	/*
  52.474 +	 * This will continue the GtTransfer if one is found, and store
  52.475 +	 * the connection if one is not. The connection will be resumed
  52.476 +	 * when a chunk for this source is reissued.
  52.477 +	 */
  52.478 +	gt_push_source_add_conn (guid, peer_ip, c);
  52.479 +
  52.480 +	incoming_conn_free (conn);
  52.481 +	free (guid);
  52.482 +}
  52.483 +
  52.484 +/*****************************************************************************/
  52.485 +
  52.486 +GT_METHOD(gt_server_get)
  52.487 +{
  52.488 +	if (HTTP_DEBUG)
  52.489 +		GT->DBGFN (GT, "entered");
  52.490 +
  52.491 +	/* dispatch to the HTTP server code */
  52.492 +	gt_http_server_dispatch (fd, id, conn->c);
  52.493 +
  52.494 +	/* get rid of the tracking information for the connection in this
  52.495 +	 * subsystem */
  52.496 +	incoming_conn_free (conn);
  52.497 +}
  52.498 +
  52.499 +/*****************************************************************************/
  52.500 +/* GNUTELLA/0.6 CONNECTIONS */
  52.501 +
  52.502 +BOOL gt_http_header_terminated (char *data, size_t len)
  52.503 +{
  52.504 +	int cnt;
  52.505 +
  52.506 +	assert (len > 0);
  52.507 +	len--;
  52.508 +
  52.509 +	for (cnt = 0; len > 0 && cnt < 2; cnt++)
  52.510 +	{
  52.511 +		if (data[len--] != '\n')
  52.512 +			break;
  52.513 +
  52.514 +		/* treat CRLF as LF */
  52.515 +		if (data[len] == '\r')
  52.516 +			len--;
  52.517 +	}
  52.518 +
  52.519 +	return (cnt == 2);
  52.520 +}
  52.521 +
  52.522 +/* TODO: header continuation and joining of multiple occurrences */
  52.523 +void gt_http_header_parse (char *headers, Dataset **d)
  52.524 +{
  52.525 +	char *line, *key;
  52.526 +
  52.527 +	while ((line = string_sep_set (&headers, "\r\n")))
  52.528 +	{
  52.529 +		key = string_sep (&line, ":");
  52.530 +
  52.531 +		if (!key || !line)
  52.532 +			continue;
  52.533 +
  52.534 +		string_trim (key);
  52.535 +		string_trim (line);
  52.536 +
  52.537 +		/* dont allow empty key-values, need to check this too */
  52.538 +		if (string_isempty (line))
  52.539 +			continue;
  52.540 +
  52.541 +		dataset_insertstr (d, string_lower (key), line);
  52.542 +	}
  52.543 +}
  52.544 +
  52.545 +static void send_nodes (struct cached_node *node, String *s)
  52.546 +{
  52.547 +	if (s->str[s->len - 1] != ':')
  52.548 +		string_append (s, ",");
  52.549 +	else
  52.550 +		string_append (s, " ");
  52.551 +
  52.552 +	string_appendf (s, "%s:%hu", net_ip_str (node->addr.ip), node->addr.port);
  52.553 +}
  52.554 +
  52.555 +static void deny_connection (TCPC *c, int code, char *msg)
  52.556 +{
  52.557 +	String    *s;
  52.558 +	List      *nodes;
  52.559 +	in_addr_t  ip;
  52.560 +
  52.561 +	if (!(s = string_new (NULL, 0, 0, TRUE)))
  52.562 +		return;
  52.563 +
  52.564 +	string_appendf (s, "GNUTELLA/0.6 %d %s\r\n", code, msg);
  52.565 +	string_appendf (s, "User-Agent: %s\r\n", gt_version());
  52.566 +
  52.567 +	ip = net_peer (c->fd);
  52.568 +	if (!gt_is_local_ip (ip, 0))
  52.569 +		string_appendf (s, "Remote-IP: %s\r\n", net_ip_str (ip));
  52.570 +
  52.571 +	/* append some different nodes to try */
  52.572 +	nodes = gt_node_cache_get (10);
  52.573 +
  52.574 +	if (nodes)
  52.575 +	{
  52.576 +		string_append (s, "X-Try-Ultrapeers:");
  52.577 +
  52.578 +		list_foreach (nodes, (ListForeachFunc)send_nodes, s);
  52.579 +		list_free (nodes);
  52.580 +
  52.581 +		string_append (s, "\r\n");
  52.582 +	}
  52.583 +
  52.584 +	/* append message terminator */
  52.585 +	string_append (s, "\r\n");
  52.586 +
  52.587 +	/* we will be closing the connection after this, so we don't
  52.588 +	 * care if the send fails or not. */
  52.589 +	tcp_send (c, s->str, s->len);
  52.590 +
  52.591 +	if (HANDSHAKE_DEBUG)
  52.592 +		GT->DBGSOCK (GT, c, "connection denied response:\n%s", s->str);
  52.593 +
  52.594 +	string_free (s);
  52.595 +}
  52.596 +
  52.597 +static void setup_node_class (GtNode *node)
  52.598 +{
  52.599 +	char      *ultrapeer;
  52.600 +	char      *qrp;
  52.601 +
  52.602 +	ultrapeer = dataset_lookupstr (node->hdr, "x-ultrapeer");
  52.603 +	qrp       = dataset_lookupstr (node->hdr, "x-query-routing");
  52.604 +
  52.605 +	if (ultrapeer && !strcasecmp (ultrapeer, "true") && qrp != NULL)
  52.606 +		gt_node_class_set (node, GT_NODE_ULTRA);
  52.607 +	else
  52.608 +		gt_node_class_set (node, GT_NODE_LEAF);
  52.609 +}
  52.610 +
  52.611 +BOOL gnutella_auth_connection (TCPC *c)
  52.612 +{
  52.613 +	GtNode *node;
  52.614 +
  52.615 +	node = GT_NODE(c);
  52.616 +	assert (GT_NODE(c) == node && GT_CONN(node) == c);
  52.617 +
  52.618 +	/* set the class of this node based on the headers sent */
  52.619 +	setup_node_class (node);
  52.620 +
  52.621 +	/*
  52.622 +	 * If the remote node is only crawling us, accept the connection
  52.623 +	 * no matter what.
  52.624 +	 */
  52.625 +	if (dataset_lookupstr (node->hdr, "crawler"))
  52.626 +		return TRUE;
  52.627 +
  52.628 +	/*
  52.629 +	 * If we are a leaf node, and so is this node, deny the connection,
  52.630 +	 * but send 'X-Try-Ultrapeer:' headers with the ultrapeers we
  52.631 +	 * are connected to in order to try to bootstrap the remote client.
  52.632 +	 */
  52.633 +	if (!(GT_SELF->klass & GT_NODE_ULTRA) && (node->klass & GT_NODE_LEAF))
  52.634 +	{
  52.635 +		deny_connection (c, 503, "I am a shielded leaf node");
  52.636 +		return FALSE;
  52.637 +	}
  52.638 +
  52.639 +	if (gt_conn_need_connections (node->klass) <= 0)
  52.640 +	{
  52.641 +		deny_connection (c, 503, "Too many connections");
  52.642 +		return FALSE;
  52.643 +	}
  52.644 +
  52.645 +	if (gt_ban_ipv4_is_banned (node->ip))
  52.646 +	{
  52.647 +		deny_connection (c, 403, "Unauthorized");
  52.648 +		return FALSE;
  52.649 +	}
  52.650 +
  52.651 +	return TRUE;
  52.652 +}
  52.653 +
  52.654 +static void send_node_headers (int fd, input_id id, TCPC *c)
  52.655 +{
  52.656 +	if (net_sock_error (c->fd))
  52.657 +	{
  52.658 +		gt_node_error (c, NULL);
  52.659 +		gt_node_disconnect (c);
  52.660 +		return;
  52.661 +	}
  52.662 +
  52.663 +	if (!gnutella_auth_connection (c))
  52.664 +	{
  52.665 +		gt_node_error (c, "[incoming] connection not authorized");
  52.666 +		gt_node_disconnect (c);
  52.667 +		return;
  52.668 +	}
  52.669 +
  52.670 +	/* send OK response to the peer and send headers for this node also */
  52.671 +	if (!gnutella_send_connection_headers (c, "GNUTELLA/0.6 200 OK"))
  52.672 +	{
  52.673 +		gt_node_error (c, NULL);
  52.674 +		gt_node_disconnect (c);
  52.675 +		return;
  52.676 +	}
  52.677 +
  52.678 +	/* reset the timeout for this connection */
  52.679 +	gnutella_set_handshake_timeout (c, TIMEOUT_3 * SECONDS);
  52.680 +
  52.681 +	input_remove (id);
  52.682 +	input_add (fd, c, INPUT_READ,
  52.683 +	           (InputCallback)recv_final_handshake, 0);
  52.684 +}
  52.685 +
  52.686 +/* TODO: this should be abstracted */
  52.687 +static char *field_has_value (Dataset *d, const char *key, const char *val)
  52.688 +{
  52.689 +	char *value;
  52.690 +	char *str;
  52.691 +
  52.692 +	if (!(value = dataset_lookupstr (d, key)))
  52.693 +		return NULL;
  52.694 +
  52.695 +	if ((str = strstr (value, val)))
  52.696 +		return str;
  52.697 +
  52.698 +	return NULL;
  52.699 +}
  52.700 +
  52.701 +static BOOL need_inflate (GtNode *node)
  52.702 +{
  52.703 +	if (!(field_has_value (node->hdr, "content-encoding", "deflate")))
  52.704 +		return FALSE;
  52.705 +
  52.706 +	return TRUE;
  52.707 +}
  52.708 +
  52.709 +static BOOL need_deflate (GtNode *node)
  52.710 +{
  52.711 +	if (!(field_has_value (node->hdr, "accept-encoding", "deflate")))
  52.712 +		return FALSE;
  52.713 +
  52.714 +	return TRUE;
  52.715 +}
  52.716 +
  52.717 +void gnutella_mark_compression (GtNode *node)
  52.718 +{
  52.719 +	if (need_inflate (node))
  52.720 +		node->rx_inflated = TRUE;
  52.721 +
  52.722 +	if (need_deflate (node))
  52.723 +		node->tx_deflated = TRUE;
  52.724 +}
  52.725 +
  52.726 +static void add_key (ds_data_t *key, ds_data_t *value, Dataset **d)
  52.727 +{
  52.728 +	char *hdr = key->data;
  52.729 +	char *val = value->data;
  52.730 +
  52.731 +	dataset_insertstr (d, hdr, val);
  52.732 +}
  52.733 +
  52.734 +static void recv_final_handshake (int fd, input_id id, TCPC *c)
  52.735 +{
  52.736 +	FDBuf   *buf;
  52.737 +	int      n;
  52.738 +	char    *response;
  52.739 +	size_t   response_len = 0;
  52.740 +	Dataset *additional   = NULL;
  52.741 +
  52.742 +	buf = tcp_readbuf (c);
  52.743 +
  52.744 +	if ((n = fdbuf_delim (buf, "\n")) < 0)
  52.745 +	{
  52.746 +		if (HANDSHAKE_DEBUG)
  52.747 +			GT->DBGSOCK (GT, c, "fdbuf_delim: error %s", GIFT_NETERROR ());
  52.748 +
  52.749 +		gt_node_disconnect (c);
  52.750 +		return;
  52.751 +	}
  52.752 +
  52.753 +	if (gt_fdbuf_full (buf))
  52.754 +	{
  52.755 +		gt_node_disconnect (c);
  52.756 +		return;
  52.757 +	}
  52.758 +
  52.759 +	if (n > 0)
  52.760 +		return;
  52.761 +
  52.762 +	response = fdbuf_data (buf, &response_len);
  52.763 +
  52.764 +	if (!gt_http_header_terminated (response, response_len))
  52.765 +		return;
  52.766 +
  52.767 +	fdbuf_release (buf);
  52.768 +
  52.769 +	if (HANDSHAKE_DEBUG)
  52.770 +		GT->DBGSOCK (GT, c, "stage3 response:\n%s", response);
  52.771 +
  52.772 +	if (!gnutella_parse_response_headers (response, &additional))
  52.773 +	{
  52.774 +		if (HANDSHAKE_DEBUG)
  52.775 +			gt_node_error (c, "node denied us in stage3 of handshake");
  52.776 +
  52.777 +		gt_node_disconnect (c);
  52.778 +		dataset_clear (additional);
  52.779 +		return;
  52.780 +	}
  52.781 +
  52.782 +	/*
  52.783 +	 * Append or replace the fields the node sent into the header for this
  52.784 +	 * node.
  52.785 +	 *
  52.786 +	 * TODO: should probably change the interface to parse_response_headers so
  52.787 +	 * we can just pass in the header list of the node.
  52.788 +	 */
  52.789 +	dataset_foreach (additional, DS_FOREACH(add_key), &GT_NODE(c)->hdr);
  52.790 +	dataset_clear (additional);
  52.791 +
  52.792 +	/* mark the compression flags on this GtNode */
  52.793 +	gnutella_mark_compression (GT_NODE(c));
  52.794 +
  52.795 +	input_remove (id);
  52.796 +	input_add (fd, c, INPUT_WRITE,
  52.797 +	           (InputCallback)gnutella_start_connection, TIMEOUT_DEF);
  52.798 +}
    53.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    53.2 +++ b/src/gt_accept.h	Sat Feb 20 21:18:28 2010 -0800
    53.3 @@ -0,0 +1,44 @@
    53.4 +/*
    53.5 + * $Id: gt_accept.h,v 1.10 2005/01/04 15:03:40 mkern Exp $
    53.6 + *
    53.7 + * Copyright (C) 2001-2003 giFT project (gift.sourceforge.net)
    53.8 + *
    53.9 + * This program is free software; you can redistribute it and/or modify it
   53.10 + * under the terms of the GNU General Public License as published by the
   53.11 + * Free Software Foundation; either version 2, or (at your option) any
   53.12 + * later version.
   53.13 + *
   53.14 + * This program is distributed in the hope that it will be useful, but
   53.15 + * WITHOUT ANY WARRANTY; without even the implied warranty of
   53.16 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
   53.17 + * General Public License for more details.
   53.18 + */
   53.19 +
   53.20 +#ifndef GIFT_GT_ACCEPT_H_
   53.21 +#define GIFT_GT_ACCEPT_H_
   53.22 +
   53.23 +/*****************************************************************************/
   53.24 +
   53.25 +void  gnutella_handle_incoming  (int fd, input_id, TCPC *c);
   53.26 +
   53.27 +BOOL  gnutella_will_deflate     (struct gt_node *node);
   53.28 +void  gnutella_mark_compression (struct gt_node *node);
   53.29 +
   53.30 +BOOL  gnutella_auth_connection  (TCPC *c);
   53.31 +
   53.32 +void  gt_http_header_parse      (char *headers, Dataset **dataset);
   53.33 +BOOL  gt_http_header_terminated (char *data, size_t len);
   53.34 +
   53.35 +void  gt_handshake_dispatch_incoming (int fd, input_id id, TCPC *c);
   53.36 +
   53.37 +/*****************************************************************************/
   53.38 +
   53.39 +/*
   53.40 + * Returns TRUE if an arbitrary limit on the buffer underlying the FDBuf has
   53.41 + * been reached.
   53.42 + */
   53.43 +BOOL gt_fdbuf_full              (FDBuf *buf);
   53.44 +
   53.45 +/*****************************************************************************/
   53.46 +
   53.47 +#endif /* GIFT_GT_ACCEPT_H_ */
    54.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    54.2 +++ b/src/gt_ban.c	Sat Feb 20 21:18:28 2010 -0800
    54.3 @@ -0,0 +1,241 @@
    54.4 +/*
    54.5 + * $Id: gt_ban.c,v 1.7 2004/01/29 07:50:25 hipnod Exp $
    54.6 + *
    54.7 + * Copyright (C) 2003 giFT project (gift.sourceforge.net)
    54.8 + *
    54.9 + * This program is free software; you can redistribute it and/or modify it
   54.10 + * under the terms of the GNU General Public License as published by the
   54.11 + * Free Software Foundation; either version 2, or (at your option) any
   54.12 + * later version.
   54.13 + *
   54.14 + * This program is distributed in the hope that it will be useful, but
   54.15 + * WITHOUT ANY WARRANTY; without even the implied warranty of
   54.16 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
   54.17 + * General Public License for more details.
   54.18 + */
   54.19 +
   54.20 +#include "gt_gnutella.h"
   54.21 +
   54.22 +#include "gt_conf.h"
   54.23 +#include "gt_ban.h"
   54.24 +
   54.25 +/*****************************************************************************/
   54.26 +
   54.27 +/* mask of bits that determines which bucket a ban goes into */
   54.28 +#define  INDEX_MASK              (0xff000000)
   54.29 +
   54.30 +/*****************************************************************************/
   54.31 +
   54.32 +typedef struct ban_ipv4
   54.33 +{
   54.34 +	in_addr_t     ipv4;
   54.35 +	uint32_t      netmask;
   54.36 +} ban_ipv4_t;
   54.37 +
   54.38 +/*****************************************************************************/
   54.39 +
   54.40 +/* ban list organize by the first 8 bits */
   54.41 +static Dataset *ipv4_ban_list;
   54.42 +
   54.43 +/*****************************************************************************/
   54.44 +
   54.45 +static char *net_mask_str (uint32_t netmask)
   54.46 +{
   54.47 +	static char buf[128];
   54.48 +
   54.49 +	snprintf (buf, sizeof (buf) - 1, "%d.%d.%d.%d",
   54.50 +	          (netmask & 0xff000000) >> 24,
   54.51 +	          (netmask & 0x00ff0000) >> 16,
   54.52 +	          (netmask & 0x0000ff00) >> 8,
   54.53 +	          (netmask & 0x000000ff));
   54.54 +
   54.55 +	return buf;
   54.56 +}
   54.57 +
   54.58 +static uint32_t net_mask_bin (char *netmask)
   54.59 +{
   54.60 +	uint32_t a[4];
   54.61 +
   54.62 +	if (!netmask)
   54.63 +		return 0xFFFFffff;
   54.64 +
   54.65 +	if (sscanf (netmask, "%d.%d.%d.%d", &a[0], &a[1], &a[2], &a[3]) != 4)
   54.66 +		return 0xFFFFffff;
   54.67 +
   54.68 +	return (a[0] << 24) | (a[1] << 16) | (a[2] << 8) | a[3];
   54.69 +}
   54.70 +
   54.71 +/*****************************************************************************/
   54.72 +
   54.73 +/* 
   54.74 + * Returns 0 if ban 'b' is contained within ban 'a'.
   54.75 + */
   54.76 +static int find_superset_ban (ban_ipv4_t *a, ban_ipv4_t *b)
   54.77 +{
   54.78 +	uint32_t sig1 = a->ipv4 & a->netmask;
   54.79 +	uint32_t sig2 = b->ipv4 & b->netmask;
   54.80 +
   54.81 +	/*
   54.82 +	 * If there are no bits in the significant address portions
   54.83 +	 * that contradict within _a_'s netmask, then ban _b_ is a
   54.84 +	 * subset of _a_.
   54.85 +	 */
   54.86 +	return ((sig2 ^ sig1) & a->netmask);
   54.87 +}
   54.88 +
   54.89 +static void log_dup (ban_ipv4_t *orig_ban, ban_ipv4_t *b)
   54.90 +{
   54.91 +	char  *ip1, *ip2;
   54.92 +	char  *n1,  *n2;
   54.93 +
   54.94 +	if (!orig_ban || !b)
   54.95 +		return;
   54.96 +
   54.97 +	n1  = STRDUP (net_mask_str (b->netmask));
   54.98 +	ip1 = STRDUP (net_ip_str (htonl (b->ipv4)));
   54.99 +	n2  = net_mask_str (orig_ban->netmask);
  54.100 +	ip2 = net_ip_str (htonl (orig_ban->ipv4));
  54.101 +
  54.102 +	if (BAN_DEBUG)
  54.103 +		GT->dbg (GT, "ban %s/%s is a subset of %s/%s", ip1, n1, ip2, n2);
  54.104 +
  54.105 +	free (ip1); 
  54.106 +	free (n1);
  54.107 +}
  54.108 +
  54.109 +BOOL gt_ban_ipv4_add (in_addr_t address, uint32_t netmask)
  54.110 +{
  54.111 +	uint32_t     prefix;
  54.112 +	List        *list;
  54.113 +	List        *orig;
  54.114 +	ban_ipv4_t  *ban;
  54.115 +
  54.116 +	if (!(ban = MALLOC (sizeof (ban_ipv4_t))))
  54.117 +		return FALSE;
  54.118 +
  54.119 +	address = ntohl (address);
  54.120 +
  54.121 +	ban->ipv4    = address;
  54.122 +	ban->netmask = netmask | INDEX_MASK;  /* ensure we have at least 8 bits */
  54.123 +
  54.124 +	prefix = address & INDEX_MASK;
  54.125 +
  54.126 +	list = dataset_lookup (ipv4_ban_list, &prefix, sizeof (prefix));
  54.127 +
  54.128 +	if ((orig = list_find_custom (list, ban, (ListForeachFunc)find_superset_ban)))
  54.129 +	{
  54.130 +		log_dup (list_nth_data (orig, 0), ban);
  54.131 +		free (ban);
  54.132 +		return TRUE;
  54.133 +	}
  54.134 +
  54.135 +	list = list_prepend (list, ban);
  54.136 +
  54.137 +	if (!dataset_insert (&ipv4_ban_list, &prefix, sizeof (prefix), list, 0))
  54.138 +		return FALSE;
  54.139 +
  54.140 +	if (BAN_DEBUG)
  54.141 +	{
  54.142 +		GT->dbg (GT, "*!*@%s/%s", net_ip_str (htonl (address)),
  54.143 +		         net_mask_str (netmask));
  54.144 +	}
  54.145 +
  54.146 +	return TRUE;
  54.147 +}
  54.148 +
  54.149 +BOOL gt_ban_ipv4_is_banned (in_addr_t address)
  54.150 +{
  54.151 +	uint32_t    prefix;
  54.152 +	List       *list;
  54.153 +	ban_ipv4_t  ban;
  54.154 +
  54.155 +	address = ntohl (address);
  54.156 +	prefix  = address & INDEX_MASK;
  54.157 +
  54.158 +	if (!(list = dataset_lookup (ipv4_ban_list, &prefix, sizeof (prefix))))
  54.159 +		return FALSE;
  54.160 +
  54.161 +	ban.ipv4    = address;
  54.162 +	ban.netmask = 0xFFFFffff;
  54.163 +
  54.164 +	if (list_find_custom (list, &ban, (ListForeachFunc)find_superset_ban))
  54.165 +		return TRUE;
  54.166 +		
  54.167 +	return FALSE;
  54.168 +}
  54.169 +
  54.170 +/*****************************************************************************/
  54.171 +
  54.172 +static BOOL load_hostiles_txt (char *hostiles_filename)
  54.173 +{
  54.174 +	FILE  *f;
  54.175 +	char  *hostiles_path;
  54.176 +	char  *buf = NULL;
  54.177 +	char  *p;
  54.178 +
  54.179 +	hostiles_path = gift_conf_path ("%s/%s", GT->name, hostiles_filename);
  54.180 +
  54.181 +	if (!(f = fopen (hostiles_path, "r")))
  54.182 +		return FALSE;
  54.183 +
  54.184 +	while (file_read_line (f, &buf))
  54.185 +	{
  54.186 +		in_addr_t  ipv4;
  54.187 +		uint32_t   netmask;
  54.188 +		char      *ipv4_str;
  54.189 +		char      *mask_str;
  54.190 +
  54.191 +		p = buf;
  54.192 +
  54.193 +		/* divide the string into two sides */
  54.194 +		ipv4_str = string_sep (&p, "/");
  54.195 +		mask_str = p;
  54.196 +
  54.197 +		if (!ipv4_str)
  54.198 +			continue;
  54.199 +
  54.200 +		netmask = net_mask_bin (mask_str);
  54.201 +		ipv4    = net_ip       (ipv4_str);
  54.202 +
  54.203 +		if (!ipv4 || ipv4 == INADDR_NONE)
  54.204 +			continue;
  54.205 +
  54.206 +		gt_ban_ipv4_add (ipv4, netmask);
  54.207 +	}
  54.208 +
  54.209 +	fclose (f);
  54.210 +	return TRUE;
  54.211 +}
  54.212 +
  54.213 +void gt_ban_init (void)
  54.214 +{
  54.215 +	ipv4_ban_list = dataset_new (DATASET_HASH);
  54.216 +
  54.217 +	if (!gt_config_load_file ("Gnutella/hostiles.txt", TRUE, FALSE))
  54.218 +		GT->warn (GT, "couldn't load \"hostiles.txt\"");
  54.219 +
  54.220 +	load_hostiles_txt ("hostiles.txt");
  54.221 +#ifndef WIN32
  54.222 +	load_hostiles_txt ("Hostiles.txt"); /* case-sensitivite blah */
  54.223 +#endif
  54.224 +}
  54.225 +
  54.226 +static int free_ban (ban_ipv4_t *ban, void *udata)
  54.227 +{
  54.228 +	free (ban);
  54.229 +	return TRUE;
  54.230 +}
  54.231 +
  54.232 +static int cleanup_lists (ds_data_t *data, ds_data_t *value, void *udata)
  54.233 +{
  54.234 +	List *list = value->data;
  54.235 +	list_foreach_remove (list, (ListForeachFunc)free_ban, NULL);
  54.236 +	return DS_CONTINUE | DS_REMOVE;
  54.237 +}
  54.238 +
  54.239 +void gt_ban_cleanup (void)
  54.240 +{
  54.241 +	dataset_foreach_ex (ipv4_ban_list, DS_FOREACH_EX(cleanup_lists), NULL);
  54.242 +	dataset_clear (ipv4_ban_list);
  54.243 +	ipv4_ban_list = NULL;
  54.244 +}
    55.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    55.2 +++ b/src/gt_ban.h	Sat Feb 20 21:18:28 2010 -0800
    55.3 @@ -0,0 +1,33 @@
    55.4 +/*
    55.5 + * $Id: gt_ban.h,v 1.2 2003/12/16 09:32:46 hipnod Exp $
    55.6 + *
    55.7 + * Copyright (C) 2003 giFT project (gift.sourceforge.net)
    55.8 + *
    55.9 + * This program is free software; you can redistribute it and/or modify it
   55.10 + * under the terms of the GNU General Public License as published by the
   55.11 + * Free Software Foundation; either version 2, or (at your option) any
   55.12 + * later version.
   55.13 + *
   55.14 + * This program is distributed in the hope that it will be useful, but
   55.15 + * WITHOUT ANY WARRANTY; without even the implied warranty of
   55.16 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
   55.17 + * General Public License for more details.
   55.18 + */
   55.19 +
   55.20 +#ifndef GIFT__GT_BAN_H__
   55.21 +#define GIFT__GT_BAN_H__
   55.22 +
   55.23 +/*****************************************************************************/
   55.24 +
   55.25 +#define     BAN_DEBUG            gt_config_get_int("ban/debug=0")
   55.26 +
   55.27 +/*****************************************************************************/
   55.28 +
   55.29 +BOOL    gt_ban_ipv4              (in_addr_t address, unsigned int netmask);
   55.30 +BOOL    gt_ban_ipv4_is_banned    (in_addr_t address);
   55.31 +
   55.32 +void    gt_ban_init              (void);
   55.33 +void    gt_ban_cleanup           (void);
   55.34 +
   55.35 +/*****************************************************************************/
   55.36 +#endif /* GIFT__GT_BAN_H__ */
    56.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    56.2 +++ b/src/gt_bind.c	Sat Feb 20 21:18:28 2010 -0800
    56.3 @@ -0,0 +1,321 @@
    56.4 +/*
    56.5 + * $Id: gt_bind.c,v 1.6 2004/04/17 06:08:14 hipnod Exp $
    56.6 + *
    56.7 + * Copyright (C) 2001-2004 giFT project (gift.sourceforge.net)
    56.8 + *
    56.9 + * This program is free software; you can redistribute it and/or modify it
   56.10 + * under the terms of the GNU General Public License as published by the
   56.11 + * Free Software Foundation; either version 2, or (at your option) any
   56.12 + * later version.
   56.13 + *
   56.14 + * This program is distributed in the hope that it will be useful, but
   56.15 + * WITHOUT ANY WARRANTY; without even the implied warranty of
   56.16 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
   56.17 + * General Public License for more details.
   56.18 + */
   56.19 +
   56.20 +#include "gt_gnutella.h"
   56.21 +#include "gt_node.h"
   56.22 +#include "gt_node_list.h"
   56.23 +
   56.24 +#include "gt_accept.h"
   56.25 +#include "gt_bind.h"
   56.26 +#include "gt_packet.h"
   56.27 +#include "gt_share_state.h"
   56.28 +
   56.29 +#include "transfer/push_proxy.h"
   56.30 +
   56.31 +/*****************************************************************************/
   56.32 +
   56.33 +/* global node pointer for this machine */
   56.34 +GtNode *GT_SELF;
   56.35 +
   56.36 +/*****************************************************************************/
   56.37 +
   56.38 +/* how often to retest the firewalled status of this node */
   56.39 +#define FW_RETEST_INTERVAL                (60 * MINUTES)
   56.40 +
   56.41 +/* maximum amount of time before last connect read from disk before
   56.42 + * reassuming this node is firewalled on startup */
   56.43 +#define FW_MAX_RETEST_TIME                (7 * EDAYS)
   56.44 +
   56.45 +/*****************************************************************************/
   56.46 +
   56.47 +/* time at which this node started running */
   56.48 +static time_t     start_time;
   56.49 +
   56.50 +/* last time we got a connection on this host */
   56.51 +static time_t     last_connect;
   56.52 +
   56.53 +/* retest firewalled status every so often */
   56.54 +static timer_id   fw_test_timer;
   56.55 +
   56.56 +/*****************************************************************************/
   56.57 +
   56.58 +static char *fw_file (void)
   56.59 +{
   56.60 +	return gift_conf_path ("Gnutella/fwstatus");
   56.61 +}
   56.62 +
   56.63 +static void save_fw_status (void)
   56.64 +{
   56.65 +	FILE  *f;
   56.66 +
   56.67 +	if (!(f = fopen (fw_file (), "w")))
   56.68 +		return;
   56.69 +
   56.70 +	/*
   56.71 +	 * Store the last successful time of connect along with the port.
   56.72 +	 */
   56.73 +	fprintf (f, "%lu %hu\n", last_connect, GT_SELF->gt_port);
   56.74 +
   56.75 +	fclose (f);
   56.76 +}
   56.77 +
   56.78 +/* returns whether or not the node is firewalled */
   56.79 +static BOOL load_fw_status (in_port_t port)
   56.80 +{
   56.81 +	FILE      *f;
   56.82 +	char       buf[RW_BUFFER];
   56.83 +	time_t     last_time;
   56.84 +	in_port_t  last_port;
   56.85 +
   56.86 +	if (!(f = fopen (fw_file (), "r")))
   56.87 +		return TRUE;
   56.88 +
   56.89 +	if (fgets (buf, sizeof (buf) - 1, f) == NULL)
   56.90 +	{
   56.91 +		fclose (f);
   56.92 +		return TRUE;
   56.93 +	}
   56.94 +
   56.95 +	fclose (f);
   56.96 +
   56.97 +	/* Store the time of the last successful connect, so
   56.98 +	 * > 0 means _not_ firewalled */
   56.99 +	if (sscanf (buf, "%lu %hu", &last_time, &last_port) != 2)
  56.100 +		return TRUE;
  56.101 +
  56.102 +	/* if we got a connection within a recent time at some point with this
  56.103 +	 * port, mark not firewalled */
  56.104 +	if ((last_time > 0 && last_time < FW_MAX_RETEST_TIME) &&
  56.105 +	    last_port == port)
  56.106 +	{
  56.107 +		last_connect = last_time;
  56.108 +		return FALSE;
  56.109 +	}
  56.110 +
  56.111 +	return TRUE;
  56.112 +}
  56.113 +
  56.114 +static gt_node_class_t read_class (void)
  56.115 +{
  56.116 +	char *klass;
  56.117 +
  56.118 +	klass = gt_config_get_str ("main/class");
  56.119 +
  56.120 +	if (klass && strstr (klass, "ultra"))
  56.121 +		return GT_NODE_ULTRA;
  56.122 +
  56.123 +	return GT_NODE_LEAF;
  56.124 +}
  56.125 +
  56.126 +static void setup_self (GtNode *node, TCPC *c, in_port_t port)
  56.127 +{
  56.128 +	/* load the firewalled status of this port */
  56.129 +	node->firewalled = load_fw_status (port);
  56.130 +
  56.131 +	/* attach the connection to this node */
  56.132 +	gt_node_connect (node, c);
  56.133 +	node->gt_port = port;
  56.134 +
  56.135 +	/* load the class for this node */
  56.136 +	node->klass = read_class ();
  56.137 +
  56.138 +	input_add (c->fd, c, INPUT_READ,
  56.139 +	           (InputCallback)gnutella_handle_incoming, FALSE);
  56.140 +}
  56.141 +
  56.142 +static GtNode *bind_gnutella_port (in_port_t port)
  56.143 +{
  56.144 +	GtNode  *node;
  56.145 +	TCPC    *c;
  56.146 +
  56.147 +	GT->DBGFN (GT, "entered");
  56.148 +
  56.149 +	if (!(node = gt_node_new ()))
  56.150 +		return NULL;
  56.151 +
  56.152 +	/* assume sane defaults in case the bind fails */
  56.153 +	node->gt_port    = 0;
  56.154 +	node->firewalled = TRUE;
  56.155 +	node->klass      = GT_NODE_LEAF;
  56.156 +
  56.157 +	if (!port || !(c = tcp_bind (port, FALSE)))
  56.158 +	{
  56.159 +		GT->warn (GT, "Failed binding port %d, setting firewalled", port);
  56.160 +		return node;
  56.161 +	}
  56.162 +
  56.163 +	GT->dbg (GT, "bound to port %d", port);
  56.164 +
  56.165 +	/* setup what will become GT_SELF structure */
  56.166 +	setup_self (node, c, port);
  56.167 +
  56.168 +	return node;
  56.169 +}
  56.170 +
  56.171 +static void setup_listening_port (in_port_t port)
  56.172 +{
  56.173 +	GT_SELF = bind_gnutella_port (port);
  56.174 +
  56.175 +	/*
  56.176 +	 * If running in local mode, let the user set firewalled status in
  56.177 +	 * GNUTELLA_LOCAL_FW.  Not sure if this is a good idea, but it makes
  56.178 +	 * testing easier.
  56.179 +	 */
  56.180 +	if (GNUTELLA_LOCAL_MODE)
  56.181 +	{
  56.182 +		if (GNUTELLA_LOCAL_FW)
  56.183 +			GT_SELF->firewalled = TRUE;
  56.184 +		else
  56.185 +			GT_SELF->firewalled = FALSE;
  56.186 +	}
  56.187 +}
  56.188 +
  56.189 +/*****************************************************************************/
  56.190 +
  56.191 +BOOL gt_bind_is_firewalled (void)
  56.192 +{
  56.193 +	if (!GT_SELF->firewalled)
  56.194 +		return FALSE;
  56.195 +
  56.196 +	/*
  56.197 +	 * Pretend we are not firewalled at the beginning in order
  56.198 +	 * to possibly get more connections, to prove we are not firewalled.
  56.199 +	 */
  56.200 +	if (gt_uptime () < 10 * EMINUTES)
  56.201 +		return FALSE;
  56.202 +
  56.203 +	/* we are firewalled */
  56.204 +	return TRUE;
  56.205 +}
  56.206 +
  56.207 +void gt_bind_clear_firewalled (void)
  56.208 +{
  56.209 +	time (&last_connect);
  56.210 +	GT_SELF->firewalled = FALSE;
  56.211 +}
  56.212 +
  56.213 +static BOOL fwtest_node (GtNode *node)
  56.214 +{
  56.215 +	GtPacket *pkt;
  56.216 +	BOOL      ret;
  56.217 +
  56.218 +	if (!GT_SELF->firewalled)
  56.219 +		return FALSE;
  56.220 +
  56.221 +	if (!(pkt = gt_packet_vendor (GT_VMSG_TCP_CONNECT_BACK)))
  56.222 +		return FALSE;
  56.223 +
  56.224 +	gt_packet_put_port (pkt, GT_SELF->gt_port);
  56.225 +	GT->DBGSOCK (GT, GT_CONN(node), "fwtesting");
  56.226 +
  56.227 +	ret = gt_node_send_if_supported (node, pkt);
  56.228 +	gt_packet_free (pkt);
  56.229 +
  56.230 +	return ret;
  56.231 +}
  56.232 +
  56.233 +/*****************************************************************************/
  56.234 +
  56.235 +static void push_proxy_request (GtNode *node)
  56.236 +{
  56.237 +	GtPacket *pkt;
  56.238 +
  56.239 +	if (!(pkt = gt_packet_vendor (GT_VMSG_PUSH_PROXY_REQ)))
  56.240 +		return;
  56.241 +
  56.242 +	/* the GUID of the PushProxyRequest must be our client identifier */
  56.243 +	gt_packet_set_guid (pkt, GT_SELF_GUID);
  56.244 +
  56.245 +	gt_node_send_if_supported (node, pkt);
  56.246 +
  56.247 +	gt_packet_free (pkt);
  56.248 +}
  56.249 +
  56.250 +/*****************************************************************************/
  56.251 +
  56.252 +/*
  56.253 + * Called when a new connection to a node has completed.
  56.254 + */
  56.255 +void gt_bind_completed_connection (GtNode *node)
  56.256 +{
  56.257 +	if (node->vmsgs_sent && dataset_length (node->vmsgs_supported) > 0)
  56.258 +		return;
  56.259 +
  56.260 +	node->vmsgs_sent = TRUE;
  56.261 +
  56.262 +	fwtest_node (node);
  56.263 +	push_proxy_request (node);
  56.264 +}
  56.265 +
  56.266 +/*****************************************************************************/
  56.267 +
  56.268 +static GtNode *retest (TCPC *c, GtNode *node, void *udata)
  56.269 +{
  56.270 +	/*
  56.271 +	 * Only clear firewalled status once and if the node supports
  56.272 +	 * the TcpConnectBack message.
  56.273 +	 */
  56.274 +	if (fwtest_node (node) && GT_SELF->firewalled == FALSE)
  56.275 +	{
  56.276 +		GT->DBGFN (GT, "clearing firewalled status");
  56.277 +		GT_SELF->firewalled = TRUE;
  56.278 +	}
  56.279 +
  56.280 +	return NULL;
  56.281 +}
  56.282 +
  56.283 +static BOOL fw_test (void *udata)
  56.284 +{
  56.285 +	gt_conn_foreach (retest, NULL,
  56.286 +	                 GT_NODE_NONE, GT_NODE_CONNECTED, 0);
  56.287 +
  56.288 +	return TRUE;
  56.289 +}
  56.290 +
  56.291 +/*****************************************************************************/
  56.292 +
  56.293 +time_t gt_uptime (void)
  56.294 +{
  56.295 +	return start_time;
  56.296 +}
  56.297 +
  56.298 +/*****************************************************************************/
  56.299 +
  56.300 +void gt_bind_init (void)
  56.301 +{
  56.302 +	int port;
  56.303 +
  56.304 +	port = gt_config_get_int ("main/port=6346");
  56.305 +	setup_listening_port (port);
  56.306 +
  56.307 +	time (&start_time);
  56.308 +
  56.309 +	fw_test_timer = timer_add  (FW_RETEST_INTERVAL, fw_test, NULL);
  56.310 +}
  56.311 +
  56.312 +void gt_bind_cleanup (void)
  56.313 +{
  56.314 +	save_fw_status ();
  56.315 +
  56.316 +	/* gt_node_free() will remove the listening input callback */
  56.317 +	gt_node_free (GT_SELF);
  56.318 +	GT_SELF = NULL;
  56.319 +
  56.320 +	start_time   = 0;
  56.321 +	last_connect = 0;
  56.322 +
  56.323 +	timer_remove_zero (&fw_test_timer);
  56.324 +}
    57.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    57.2 +++ b/src/gt_bind.h	Sat Feb 20 21:18:28 2010 -0800
    57.3 @@ -0,0 +1,46 @@
    57.4 +/*
    57.5 + * $Id: gt_bind.h,v 1.2 2004/03/24 06:19:46 hipnod Exp $
    57.6 + *
    57.7 + * Copyright (C) 2001-2004 giFT project (gift.sourceforge.net)
    57.8 + *
    57.9 + * This program is free software; you can redistribute it and/or modify it
   57.10 + * under the terms of the GNU General Public License as published by the
   57.11 + * Free Software Foundation; either version 2, or (at your option) any
   57.12 + * later version.
   57.13 + *
   57.14 + * This program is distributed in the hope that it will be useful, but
   57.15 + * WITHOUT ANY WARRANTY; without even the implied warranty of
   57.16 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
   57.17 + * General Public License for more details.
   57.18 + */
   57.19 +
   57.20 +#ifndef GIFT_GT_BIND_H_
   57.21 +#define GIFT_GT_BIND_H_
   57.22 +
   57.23 +/*****************************************************************************/
   57.24 +
   57.25 +struct gt_node;
   57.26 +
   57.27 +/* should be renamed to gt_bind_uptime() */
   57.28 +time_t gt_uptime                    (void);
   57.29 +
   57.30 +/*****************************************************************************/
   57.31 +
   57.32 +/* received an incoming connection on this binding */
   57.33 +void   gt_bind_clear_firewalled     (void);
   57.34 +
   57.35 +/* a connection on this binding completed: used for sending ConnectBack
   57.36 + * messages to the other side */
   57.37 +void   gt_bind_completed_connection (struct gt_node *remote);
   57.38 +
   57.39 +/* whether this node is firewalled */
   57.40 +BOOL   gt_bind_is_firewalled        (void);
   57.41 +
   57.42 +/*****************************************************************************/
   57.43 +
   57.44 +void   gt_bind_init                 (void);
   57.45 +void   gt_bind_cleanup              (void);
   57.46 +
   57.47 +/*****************************************************************************/
   57.48 +
   57.49 +#endif /* GIFT_GT_BIND_H_ */
    58.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    58.2 +++ b/src/gt_conf.c	Sat Feb 20 21:18:28 2010 -0800
    58.3 @@ -0,0 +1,225 @@
    58.4 +/*
    58.5 + * $Id: gt_conf.c,v 1.4 2004/03/24 06:27:40 hipnod Exp $
    58.6 + *
    58.7 + * Copyright (C) 2003 giFT project (gift.sourceforge.net)
    58.8 + *
    58.9 + * This program is free software; you can redistribute it and/or modify it
   58.10 + * under the terms of the GNU General Public License as published by the
   58.11 + * Free Software Foundation; either version 2, or (at your option) any
   58.12 + * later version.
   58.13 + *
   58.14 + * This program is distributed in the hope that it will be useful, but
   58.15 + * WITHOUT ANY WARRANTY; without even the implied warranty of
   58.16 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
   58.17 + * General Public License for more details.
   58.18 + */
   58.19 +
   58.20 +#include "gt_gnutella.h"
   58.21 +#include "gt_conf.h"
   58.22 +
   58.23 +/*****************************************************************************/
   58.24 +
   58.25 +#define CHECK_CONFIG_INTERVAL       (1 * MINUTES)
   58.26 +
   58.27 +/*****************************************************************************/
   58.28 +
   58.29 +static Config     *gt_conf;
   58.30 +
   58.31 +static char       *conf_path;
   58.32 +static time_t      conf_mtime;
   58.33 +
   58.34 +static Dataset    *cache;
   58.35 +
   58.36 +static timer_id    refresh_timer;
   58.37 +
   58.38 +/*****************************************************************************/
   58.39 +
   58.40 +static char *get_key (const char *key_str)
   58.41 +{
   58.42 +	char *str;
   58.43 +	char *key;
   58.44 +
   58.45 +	if (!(str = STRDUP (key_str)))
   58.46 +		return NULL;
   58.47 +
   58.48 +	key = string_sep (&str, "=");
   58.49 +	return key;
   58.50 +}
   58.51 +
   58.52 +static char *cache_lookup (const char *key_str)
   58.53 +{
   58.54 +	char *key;
   58.55 +	char *data;
   58.56 +
   58.57 +	if (!(key = get_key (key_str)))
   58.58 +		return NULL;
   58.59 +
   58.60 +	data = dataset_lookupstr (cache, key);
   58.61 +	free (key);
   58.62 +
   58.63 +	return data;
   58.64 +}
   58.65 +
   58.66 +static void cache_insert (const char *key_str, const char *value)
   58.67 +{
   58.68 +	char *key;
   58.69 +
   58.70 +	if (!(key = get_key (key_str)))
   58.71 +		return;
   58.72 +
   58.73 +	dataset_insertstr (&cache, key, value);
   58.74 +	free (key);
   58.75 +}
   58.76 +
   58.77 +char *gt_config_get_str (const char *key)
   58.78 +{
   58.79 +	char *str;
   58.80 +	char *ret;
   58.81 +
   58.82 +	if (!(str = cache_lookup (key)))
   58.83 +		str = config_get_str (gt_conf, (char *)key);
   58.84 +
   58.85 +	ret = str;
   58.86 +
   58.87 +	/* unset keys are marked specially by the empty string so
   58.88 +	 * we don't have to call config_get_xxx for them */
   58.89 +	if (string_isempty (str))
   58.90 +	{
   58.91 +		ret = NULL;
   58.92 +		str = "";
   58.93 +	}
   58.94 +
   58.95 +	/* hrm, the dataset doesn't handle inserting the same item you lookup
   58.96 +	 * yet, so we can't do the insert unconditionally here.. */
   58.97 +	if (str != cache_lookup (key))
   58.98 +		cache_insert (key, str);
   58.99 +
  58.100 +	return ret;
  58.101 +}
  58.102 +
  58.103 +int gt_config_get_int (const char *key)
  58.104 +{
  58.105 +	return ATOI (gt_config_get_str (key));
  58.106 +}
  58.107 +
  58.108 +/* check the mtime on the conf file. If it has changed, reload */
  58.109 +static int refresh_conf (void *udata)
  58.110 +{
  58.111 +	struct stat  conf_st;
  58.112 +	char        *path;
  58.113 +	BOOL         ret;
  58.114 +
  58.115 +	path = STRDUP (gift_conf_path (conf_path));
  58.116 +	ret = file_stat (path, &conf_st);
  58.117 +
  58.118 +	if (!ret || conf_st.st_mtime != conf_mtime)
  58.119 +	{
  58.120 +		GT->DBGFN (GT, "Gnutella.conf changed on disk. flushing cached config");
  58.121 +
  58.122 +		/* gt_config_get_xxx will reload the cache */
  58.123 +		dataset_clear (cache);
  58.124 +		cache = NULL;
  58.125 +
  58.126 +		conf_mtime = conf_st.st_mtime;
  58.127 +	}
  58.128 +
  58.129 +	free (path);
  58.130 +	return TRUE;
  58.131 +}
  58.132 +
  58.133 +BOOL gt_config_load_file (const char *relative_path, BOOL update, BOOL force)
  58.134 +{
  58.135 +	char        *src_path;
  58.136 +	char        *dst_path;
  58.137 +	BOOL         src_exists;
  58.138 +	BOOL         dst_exists;
  58.139 +	struct stat  src_st;
  58.140 +	struct stat  dst_st;
  58.141 +	BOOL         ret        = TRUE;
  58.142 +
  58.143 +	src_path = STRDUP (stringf ("%s/%s", platform_data_dir(), relative_path));
  58.144 +	dst_path = STRDUP (gift_conf_path (relative_path));
  58.145 +
  58.146 +	src_exists = file_stat (src_path, &src_st);
  58.147 +	dst_exists = file_stat (dst_path, &dst_st);
  58.148 +
  58.149 +	/* 
  58.150 +	 * NOTE: the user may modify the config files in ~/.giFT/Gnutella/.
  58.151 +	 * If so, the mtime there should be greater, so look for an mtime
  58.152 +	 * greater than instead of not equal to the those files. 
  58.153 +	 */
  58.154 +	if (force || (src_exists && 
  58.155 +	              (!dst_exists || src_st.st_mtime > dst_st.st_mtime)))
  58.156 +	{
  58.157 +		/* 
  58.158 +		 * Copy the default configuration from the data dir
  58.159 +		 * (usually "/usr/local/share/giFT/Gnutella/") 
  58.160 +		 */
  58.161 +		GT->DBGFN (GT, "reloading configuration for %s (copying %s -> %s)", 
  58.162 +		           relative_path, src_path, dst_path);
  58.163 +		ret = file_cp (src_path, dst_path);
  58.164 +	}
  58.165 +
  58.166 +	free (dst_path);
  58.167 +	free (src_path);
  58.168 +
  58.169 +	return ret;
  58.170 +}
  58.171 +
  58.172 +static Config *load_config (const char *relative_path)
  58.173 +{
  58.174 +	Config  *conf;
  58.175 +	char    *full_path;
  58.176 +
  58.177 +	full_path = STRDUP (gift_conf_path (relative_path));
  58.178 +
  58.179 +	if (!(conf = config_new (full_path)))
  58.180 +	{
  58.181 +		/* copy the configuration from the data dir */
  58.182 +		gt_config_load_file (relative_path, TRUE, TRUE);
  58.183 +
  58.184 +		/* retry loading the configuration */
  58.185 +		conf = config_new (full_path);
  58.186 +	}
  58.187 +
  58.188 +	free (full_path);
  58.189 +
  58.190 +	return conf;
  58.191 +}
  58.192 +
  58.193 +/*****************************************************************************/
  58.194 +
  58.195 +BOOL gt_config_init (void)
  58.196 +{
  58.197 +	struct stat st;
  58.198 +
  58.199 +	refresh_timer = timer_add (CHECK_CONFIG_INTERVAL, 
  58.200 +	                           (TimerCallback)refresh_conf, NULL);
  58.201 +
  58.202 +	conf_path = STRDUP (stringf ("%s/%s.conf", GT->name, GT->name));
  58.203 +
  58.204 +	if (file_stat (gift_conf_path (conf_path), &st))
  58.205 +	    conf_mtime = st.st_mtime;
  58.206 +
  58.207 +	gt_conf = load_config (conf_path);
  58.208 +	cache = dataset_new (DATASET_HASH);
  58.209 +
  58.210 +	if (!refresh_timer || !conf_path || !gt_conf)
  58.211 +		return FALSE;
  58.212 +
  58.213 +	return TRUE;
  58.214 +}
  58.215 +
  58.216 +void gt_config_cleanup (void)
  58.217 +{
  58.218 +	dataset_clear (cache);
  58.219 +	cache = NULL;
  58.220 +
  58.221 +	config_free (gt_conf);
  58.222 +	gt_conf = NULL;
  58.223 +
  58.224 +	free (conf_path);
  58.225 +	conf_path = NULL;
  58.226 +
  58.227 +	timer_remove_zero (&refresh_timer);
  58.228 +}
    59.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    59.2 +++ b/src/gt_conf.h	Sat Feb 20 21:18:28 2010 -0800
    59.3 @@ -0,0 +1,36 @@
    59.4 +/*
    59.5 + * $Id: gt_conf.h,v 1.2 2004/03/24 06:27:40 hipnod Exp $
    59.6 + *
    59.7 + * Copyright (C) 2003 giFT project (gift.sourceforge.net)
    59.8 + *
    59.9 + * This program is free software; you can redistribute it and/or modify it
   59.10 + * under the terms of the GNU General Public License as published by the
   59.11 + * Free Software Foundation; either version 2, or (at your option) any
   59.12 + * later version.
   59.13 + *
   59.14 + * This program is distributed in the hope that it will be useful, but
   59.15 + * WITHOUT ANY WARRANTY; without even the implied warranty of
   59.16 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
   59.17 + * General Public License for more details.
   59.18 + */
   59.19 +
   59.20 +#ifndef GIFT_GT_CONF_H_
   59.21 +#define GIFT_GT_CONF_H_
   59.22 +
   59.23 +/*****************************************************************************/
   59.24 +
   59.25 +char   *gt_config_get_str   (const char *key);
   59.26 +int     gt_config_get_int   (const char *key);
   59.27 +
   59.28 +/*****************************************************************************/
   59.29 +
   59.30 +BOOL    gt_config_load_file (const char *path, BOOL update, BOOL force);
   59.31 +
   59.32 +/*****************************************************************************/
   59.33 +
   59.34 +BOOL    gt_config_init      (void);
   59.35 +void    gt_config_cleanup   (void);
   59.36 +
   59.37 +/*****************************************************************************/
   59.38 +
   59.39 +#endif /* GIFT_GT_CONF_H_ */
    60.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    60.2 +++ b/src/gt_connect.c	Sat Feb 20 21:18:28 2010 -0800
    60.3 @@ -0,0 +1,544 @@
    60.4 +/*
    60.5 + * $Id: gt_connect.c,v 1.55 2005/01/04 15:03:40 mkern Exp $
    60.6 + *
    60.7 + * Copyright (C) 2001-2003 giFT project (gift.sourceforge.net)
    60.8 + *
    60.9 + * This program is free software; you can redistribute it and/or modify it
   60.10 + * under the terms of the GNU General Public License as published by the
   60.11 + * Free Software Foundation; either version 2, or (at your option) any
   60.12 + * later version.
   60.13 + *
   60.14 + * This program is distributed in the hope that it will be useful, but
   60.15 + * WITHOUT ANY WARRANTY; without even the implied warranty of
   60.16 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
   60.17 + * General Public License for more details.
   60.18 + */
   60.19 +
   60.20 +#include "gt_gnutella.h"
   60.21 +#include "gt_version.h"
   60.22 +
   60.23 +#include "gt_connect.h"
   60.24 +#include "gt_accept.h"
   60.25 +#include "gt_packet.h"
   60.26 +
   60.27 +#include "gt_node.h"
   60.28 +#include "gt_node_list.h"
   60.29 +#include "gt_utils.h"
   60.30 +
   60.31 +#include "gt_search.h"
   60.32 +#include "gt_netorg.h"
   60.33 +
   60.34 +#include "gt_node_cache.h"
   60.35 +
   60.36 +#include "message/gt_message.h"   /* gnutella_start_connection */
   60.37 +
   60.38 +/*****************************************************************************/
   60.39 +
   60.40 +static void send_connect  (int fd, input_id id, TCPC *c);
   60.41 +static void recv_headers  (int fd, input_id id, TCPC *c);
   60.42 +static void send_response (int fd, input_id id, TCPC *c);
   60.43 +static BOOL send_final    (TCPC *c);
   60.44 +
   60.45 +/*****************************************************************************/
   60.46 +
   60.47 +static BOOL handshake_timeout (TCPC *c)
   60.48 +{
   60.49 +	GtNode *node = GT_NODE(c);
   60.50 +
   60.51 +	node->handshake_timer = 0;
   60.52 +
   60.53 +	if (!(node->state & GT_NODE_CONNECTED))
   60.54 +	{
   60.55 +		gt_node_disconnect (c);
   60.56 +		return FALSE;
   60.57 +	}
   60.58 +
   60.59 +	return FALSE;
   60.60 +}
   60.61 +
   60.62 +void gnutella_set_handshake_timeout (TCPC *c, time_t delay)
   60.63 +{
   60.64 +	timer_remove (GT_NODE(c)->handshake_timer);
   60.65 +
   60.66 +	GT_NODE(c)->handshake_timer = timer_add (delay,
   60.67 +	                                         (TimerCallback)handshake_timeout, 
   60.68 +	                                         c);
   60.69 +}
   60.70 +
   60.71 +int gt_connect (GtNode *node)
   60.72 +{
   60.73 +	TCPC   *c;
   60.74 +
   60.75 +	if (!node)
   60.76 +		return -1;
   60.77 +
   60.78 +#if 0
   60.79 +	if (GT_CONN(node) != NULL)
   60.80 +	{
   60.81 +		GT->dbg (GT, "duplicate connection?: %p", GT_CONN(node));
   60.82 +		return -1;
   60.83 +	}
   60.84 +
   60.85 +	if (node->state != GT_NODE_DISCONNECTED)
   60.86 +	{
   60.87 +		GT->dbg (GT, "state = %i??", node->state);
   60.88 +		return -1;
   60.89 +	}
   60.90 +#endif
   60.91 +
   60.92 +	/* this must be called only on disconnected nodes */
   60.93 +	assert (GT_CONN(node) == NULL);
   60.94 +	assert (node->state == GT_NODE_DISCONNECTED);
   60.95 +
   60.96 +#if 0
   60.97 +	if (!conn_auth (c, TRUE))
   60.98 +		return -1;
   60.99 +#endif
  60.100 +
  60.101 +	/* set this early: gt_netorg relies on this being set in order
  60.102 +	 * to check if it should access the gwebcaches */
  60.103 +	node->start_connect_time = time (NULL);
  60.104 +
  60.105 +	/* make sure port is valid */
  60.106 +	if (node->gt_port == 0)
  60.107 +	{
  60.108 +		GT->DBGFN (GT, "bad port on node %s", net_ip_str (node->ip));
  60.109 +		return -1;
  60.110 +	}
  60.111 +
  60.112 +	/* make outgoing connection */
  60.113 +	if (!(c = tcp_open (node->ip, node->gt_port, FALSE)))
  60.114 +		return -1;
  60.115 +
  60.116 +	gt_node_connect (node, c);
  60.117 +
  60.118 +	gt_node_state_set (node, GT_NODE_CONNECTING_1);
  60.119 +	node->incoming = FALSE;
  60.120 +
  60.121 +	/* set the connection timeout */
  60.122 +	gnutella_set_handshake_timeout (c, TIMEOUT_1 * SECONDS);
  60.123 +
  60.124 +	input_add (c->fd, c, INPUT_WRITE,
  60.125 +	           (InputCallback)send_connect, 0);
  60.126 +
  60.127 +	return c->fd;
  60.128 +}
  60.129 +
  60.130 +static void send_connect (int fd, input_id id, TCPC *c)
  60.131 +{
  60.132 +	if (net_sock_error (c->fd))
  60.133 +	{
  60.134 +		gt_node_disconnect (c);
  60.135 +		return;
  60.136 +	}
  60.137 +
  60.138 +	/* Send the connect string along with our headers */
  60.139 +	if (!gnutella_send_connection_headers (c, "GNUTELLA CONNECT/0.6"))
  60.140 +	{
  60.141 +		gt_node_error (c, NULL);
  60.142 +		gt_node_disconnect (c);
  60.143 +		return;
  60.144 +	}
  60.145 +
  60.146 +	/* we connected ok, so give the peer some more time */
  60.147 +	gnutella_set_handshake_timeout (c, TIMEOUT_2 * SECONDS);
  60.148 +
  60.149 +	input_remove (id);
  60.150 +	input_add (fd, c, INPUT_READ,
  60.151 +	           (InputCallback)recv_headers, 0);
  60.152 +}
  60.153 +
  60.154 +BOOL gnutella_parse_response_headers (char *reply, Dataset **r_headers)
  60.155 +{
  60.156 +	int       code;    /* 200, 404, ... */
  60.157 +	char     *response;
  60.158 +	Dataset  *headers   = NULL;
  60.159 +
  60.160 +	response = string_sep (&reply, "\r\n");
  60.161 +
  60.162 +	if (!response)
  60.163 +		return FALSE;
  60.164 +
  60.165 +	/*    */     string_sep (&response, " ");  /* shift past HTTP/1.1 */
  60.166 +	code = ATOI (string_sep (&response, " ")); /* shift past 200 */
  60.167 +
  60.168 +	/* parse the headers */
  60.169 +	gt_http_header_parse (reply, &headers);
  60.170 +
  60.171 +	if (r_headers)
  60.172 +		*r_headers = headers;
  60.173 +	else
  60.174 +		dataset_clear (headers);
  60.175 +
  60.176 +	if (code >= 200 && code <= 299)
  60.177 +		return TRUE;
  60.178 +
  60.179 +	return FALSE;
  60.180 +}
  60.181 +
  60.182 +static time_t parse_uptime (Dataset *d)
  60.183 +{
  60.184 +	char   *str;
  60.185 +	int     days, hours, mins;
  60.186 +	int     n;
  60.187 +
  60.188 +	if (!(str = dataset_lookupstr (d, "uptime")))
  60.189 +		return 0;
  60.190 +	
  60.191 +	string_lower (str);
  60.192 +
  60.193 +	if ((n = sscanf (str, "%dd %dh %dm", &days, &hours, &mins)) != 3)
  60.194 +		return 0;
  60.195 +
  60.196 +	if (HANDSHAKE_DEBUG)
  60.197 +	{
  60.198 +		GT->dbg (GT, "uptime parsed: %d days, %d hours, %d minutes",
  60.199 +		         days, hours, mins);
  60.200 +	}
  60.201 +
  60.202 +	return days * EDAYS + hours * EHOURS + mins * EMINUTES;
  60.203 +}
  60.204 +
  60.205 +/* look in a header field for nodes, and register them */
  60.206 +static void extract_nodes (Dataset *d, in_addr_t src,
  60.207 +                           const char *field, gt_node_class_t klass)
  60.208 +{
  60.209 +	char   *str;
  60.210 +	char   *value;
  60.211 +	time_t  now;
  60.212 +
  60.213 +	now = time (NULL);
  60.214 +
  60.215 +	if (!(str = dataset_lookupstr (d, field)))
  60.216 +		return;
  60.217 +
  60.218 +	while ((value = string_sep (&str, ",")))
  60.219 +	{
  60.220 +		in_addr_t  ip;
  60.221 +		in_port_t  port;
  60.222 +
  60.223 +		ip   = net_ip (string_sep (&value, ":"));
  60.224 +		port = ATOI   (value);
  60.225 +
  60.226 +		if (port == (in_port_t) -1 || port == 0)
  60.227 +			continue;
  60.228 +
  60.229 +		if (ip == INADDR_NONE || ip == 0)
  60.230 +			continue;
  60.231 +
  60.232 +		if (gt_is_local_ip (ip, src))
  60.233 +			continue;
  60.234 +
  60.235 +		gt_node_cache_add_ipv4 (ip, port, klass, now, 0, src);
  60.236 +	}
  60.237 +
  60.238 +	gt_node_cache_trace ();
  60.239 +}
  60.240 +
  60.241 +static void recv_headers (int fd, input_id id, TCPC *c)
  60.242 +{
  60.243 +	FDBuf   *buf;
  60.244 +	char    *response;
  60.245 +	size_t   response_len = 0;
  60.246 +	int      n;
  60.247 +	BOOL     ok;
  60.248 +	time_t   uptime;
  60.249 +	GtNode  *node         = GT_NODE(c);
  60.250 +
  60.251 +	buf = tcp_readbuf (c);
  60.252 +
  60.253 +	if ((n = fdbuf_delim (buf, "\n")) < 0)
  60.254 +	{
  60.255 +		GT->DBGFN (GT, "error reading headers: %s", GIFT_NETERROR ());
  60.256 +		gt_node_disconnect (c);
  60.257 +		return;
  60.258 +	}
  60.259 +
  60.260 +	if (gt_fdbuf_full (buf))
  60.261 +	{
  60.262 +		gt_node_disconnect (c);
  60.263 +		return;
  60.264 +	}
  60.265 +
  60.266 +	if (n > 0)
  60.267 +		return;
  60.268 +
  60.269 +	response = fdbuf_data (buf, &response_len);
  60.270 +	if (!gt_http_header_terminated (response, response_len))
  60.271 +		return;
  60.272 +
  60.273 +	fdbuf_release (buf);
  60.274 +
  60.275 +	if (HANDSHAKE_DEBUG)
  60.276 +		GT->DBGSOCK (GT, c, "node handshake response:\n%s", response);
  60.277 +
  60.278 +	/* parse and store the response */
  60.279 +	ok = gnutella_parse_response_headers (response, &node->hdr);
  60.280 +
  60.281 +	/* extract nodes */
  60.282 +	extract_nodes (node->hdr, node->ip, "x-try-ultrapeers", GT_NODE_ULTRA);
  60.283 +	extract_nodes (node->hdr, node->ip, "x-try", GT_NODE_NONE);
  60.284 +
  60.285 +	/* grab the uptime from the "Uptime: " header and update this node */
  60.286 +	if ((uptime = parse_uptime (node->hdr)) > 0)
  60.287 +	{
  60.288 +		gt_node_cache_add_ipv4 (node->ip, node->gt_port,
  60.289 +		                        GT_NODE_ULTRA, time (NULL), uptime, node->ip);
  60.290 +
  60.291 +		/* XXX: remove the item immediately so we trigger the side effect of
  60.292 +		 * adding this node to the stable list */
  60.293 +		gt_node_cache_del_ipv4 (node->ip, node->gt_port);
  60.294 +	}
  60.295 +
  60.296 +	if (!ok)
  60.297 +	{
  60.298 +		gt_node_disconnect (c);
  60.299 +		return;
  60.300 +	}
  60.301 +
  60.302 +	input_remove (id);
  60.303 +	input_add (fd, c, INPUT_WRITE,
  60.304 +	           (InputCallback)send_response, 0);
  60.305 +}
  60.306 +
  60.307 +static void send_response (int fd, input_id id, TCPC *c)
  60.308 +{
  60.309 +	if (net_sock_error (c->fd))
  60.310 +	{
  60.311 +		gt_node_error (c, NULL);
  60.312 +		gt_node_disconnect (c);
  60.313 +		return;
  60.314 +	}
  60.315 +
  60.316 +	if (!gnutella_auth_connection (c))
  60.317 +	{
  60.318 +		gt_node_error (c, "[outgoing] connection not authorized");
  60.319 +		gt_node_disconnect (c);
  60.320 +		return;
  60.321 +	}
  60.322 +
  60.323 +	if (!send_final (c))
  60.324 +	{
  60.325 +		gt_node_error (c, NULL);
  60.326 +		GT->DBGSOCK (GT, c, "error at stage 3 of handshake");
  60.327 +		gt_node_disconnect (c);
  60.328 +		return;
  60.329 +	}
  60.330 +
  60.331 +	/* ok, startup this connection */
  60.332 +	input_remove (id);
  60.333 +	input_add (fd, c, INPUT_WRITE,
  60.334 +	           (InputCallback)gnutella_start_connection, 0);
  60.335 +}
  60.336 +
  60.337 +/*****************************************************************************/
  60.338 +
  60.339 +static GtNode *append_node (TCPC *c, GtNode *node, String *s)
  60.340 +{
  60.341 +	if (s->str[s->len - 1] != ' ')
  60.342 +		string_append (s, ",");
  60.343 +
  60.344 +	string_appendf (s, "%s:%hu", net_ip_str (node->ip), node->gt_port);
  60.345 +	return NULL;
  60.346 +}
  60.347 +
  60.348 +static void append_crawler_headers (String *msg)
  60.349 +{
  60.350 +	if (gt_conn_length (GT_NODE_ULTRA, GT_NODE_CONNECTED) > 0)
  60.351 +	{
  60.352 +		string_append (msg, "Peers: ");
  60.353 +		gt_conn_foreach (GT_CONN_FOREACH(append_node), msg,
  60.354 +		                 GT_NODE_ULTRA, GT_NODE_CONNECTED, 0);
  60.355 +		string_append (msg, "\r\n");
  60.356 +	}
  60.357 +
  60.358 +	if (GT_SELF->klass & GT_NODE_ULTRA && 
  60.359 +	    gt_conn_length (GT_NODE_LEAF, GT_NODE_CONNECTED) > 0)
  60.360 +	{
  60.361 +		string_append (msg, "Leaves: ");
  60.362 +		gt_conn_foreach (GT_CONN_FOREACH(append_node), msg,
  60.363 +		                 GT_NODE_LEAF, GT_NODE_CONNECTED, 0);
  60.364 +		string_append (msg, "\r\n");
  60.365 +	}
  60.366 +}
  60.367 +
  60.368 +BOOL gnutella_send_connection_headers (TCPC *c, const char *header)
  60.369 +{
  60.370 +	String *msg;
  60.371 +
  60.372 +	if (!(msg = string_new (NULL, 0, 0, TRUE)))
  60.373 +		return FALSE;
  60.374 +
  60.375 +	string_appendf (msg, "%s\r\n", header);
  60.376 +
  60.377 +	string_append  (msg, "X-Query-Routing: 0.1\r\n");
  60.378 +	string_appendf (msg, "X-Ultrapeer: %s\r\n", 
  60.379 +	                (GT_SELF->klass & GT_NODE_ULTRA) ? "True" : "False");
  60.380 +
  60.381 +	/* append the client and version we are using */
  60.382 +	string_appendf (msg, "User-Agent: %s\r\n", gt_version ());
  60.383 +
  60.384 +	/* Add a header describing the remote IP of the peer */
  60.385 +	string_appendf (msg, "Remote-IP: %s\r\n", net_peer_ip (c->fd));
  60.386 +
  60.387 +	/* let remote end know it's ok to send vendor messages */
  60.388 +	string_appendf (msg, "Vendor-Message: 0.1\r\n");
  60.389 +
  60.390 +	/* support transmission of pings/pongs with GGEP appended */
  60.391 +	string_append  (msg, "GGEP: 0.5\r\n");
  60.392 +
  60.393 +	/* If this is the limewire crawler, append "Peers: " and "Leaves: "
  60.394 +	 * headers and close the connection */
  60.395 +	if (!c->outgoing && dataset_lookupstr (GT_NODE(c)->hdr, "crawler"))
  60.396 +		append_crawler_headers (msg);
  60.397 +
  60.398 +	/* append willingness to receive compressed data */
  60.399 +	string_append (msg, "Accept-Encoding: deflate\r\n");
  60.400 +		
  60.401 +	/* check whether the remote node sent us Accept-Encoding: deflate
  60.402 +	 * already */
  60.403 +	gnutella_mark_compression (GT_NODE(c));
  60.404 +
  60.405 +	/* compress data if we must */
  60.406 +	if (GT_NODE(c)->tx_deflated)
  60.407 +		string_append (msg, "Content-Encoding: deflate\r\n");
  60.408 +
  60.409 +	/* Add message terminator */
  60.410 +	string_append (msg, "\r\n");
  60.411 +
  60.412 +	if (HANDSHAKE_DEBUG)
  60.413 +		GT->DBGSOCK (GT, c, "sending node headers:\n%s", msg->str);
  60.414 +
  60.415 +	if (tcp_send (c, msg->str, msg->len) <= 0)
  60.416 +	{
  60.417 +		string_free (msg);
  60.418 +		return FALSE;
  60.419 +	}
  60.420 +
  60.421 +	string_free (msg);
  60.422 +	return TRUE;
  60.423 +}
  60.424 +
  60.425 +static BOOL send_final (TCPC *c)
  60.426 +{
  60.427 +	String *s;
  60.428 +	int     ret;
  60.429 +	int     len;
  60.430 +
  60.431 +	if (!(s = string_new (NULL, 0, 0, TRUE)))
  60.432 +		return FALSE;
  60.433 +
  60.434 +	/* append header acceptance line */
  60.435 +	string_append (s, "GNUTELLA/0.6 200 OK\r\n");
  60.436 +
  60.437 +	/* mark the connection as complete */
  60.438 +	gnutella_mark_compression (GT_NODE(c));
  60.439 +
  60.440 +	if (GT_NODE(c)->tx_deflated)
  60.441 +		string_append (s, "Content-Encoding: deflate\r\n");
  60.442 +
  60.443 +	/* append msg terminator */
  60.444 +	string_append (s, "\r\n");
  60.445 +
  60.446 +	if (HANDSHAKE_DEBUG)
  60.447 +		GT->DBGSOCK (GT, c, "sending final handshake:\n%s", s->str);
  60.448 +
  60.449 +	len = s->len;
  60.450 +	ret = tcp_send (c, s->str, s->len);
  60.451 +
  60.452 +	string_free (s);
  60.453 +
  60.454 +	if (ret != len)
  60.455 +		return FALSE;
  60.456 +
  60.457 +	return TRUE;
  60.458 +}
  60.459 +
  60.460 +/*****************************************************************************/
  60.461 +/* CONNECTABILITY TESTING */
  60.462 +
  60.463 +static void connect_test_result (GtNode *node, TCPC *c, BOOL success)
  60.464 +{
  60.465 +	GT->DBGFN (GT, "connect test to %s %s", net_ip_str (node->ip),
  60.466 +	           (success ? "succeeded" : "failed"));
  60.467 +
  60.468 +	node->firewalled = (success ? FALSE : TRUE);
  60.469 +	node->verified   = TRUE;
  60.470 +
  60.471 +	if (c)
  60.472 +	{
  60.473 +		tcp_close (c);
  60.474 +		node->gt_port_verify = NULL;
  60.475 +	}
  60.476 +}
  60.477 +
  60.478 +static void test_connectable (int fd, input_id id, TCPC *c)
  60.479 +{
  60.480 +	GtNode *node;
  60.481 +
  60.482 +	node = c->udata;
  60.483 +
  60.484 +	if (net_sock_error (c->fd))
  60.485 +	{
  60.486 +		connect_test_result (node, c, FALSE);
  60.487 +		return;
  60.488 +	}
  60.489 +
  60.490 +	/*
  60.491 +	 * Send two newlines, because some firewalls will let connections pass 
  60.492 +	 * through, but no data.
  60.493 +	 */
  60.494 +	tcp_send (c, "\n\n", 2);
  60.495 +	connect_test_result (node, c, TRUE);
  60.496 +}
  60.497 +
  60.498 +/*
  60.499 + * Test if the port of a peer we are connected to is connectable.  This lets a
  60.500 + * node know if it's firewalled.  We could use this info to mangle the 'push'
  60.501 + * flag on query hits from this node if it is a leaf.
  60.502 + *
  60.503 + * Mangling query hits would break any future checksum or signing algorithm on
  60.504 + * query hits though, so that isn't done.
  60.505 + */
  60.506 +void gt_connect_test (GtNode *node, in_port_t port)
  60.507 +{
  60.508 +	TCPC *new_c;
  60.509 +
  60.510 +	if (!port)
  60.511 +	{
  60.512 +		node->firewalled = TRUE;
  60.513 +		return;
  60.514 +	}
  60.515 +
  60.516 +	/* this needs some kind of local mode switch */
  60.517 +#if 0
  60.518 +	if (net_match_host (GT_NODE(c)->ip, "LOCAL"))
  60.519 +	{
  60.520 +		GT_NODE(c)->firewalled = TRUE;
  60.521 +		return;
  60.522 +	}
  60.523 +#endif
  60.524 +
  60.525 +	if (!node->incoming)
  60.526 +		return;
  60.527 +
  60.528 +	GT->DBGFN (GT, "starting connect test on %s:%hu", 
  60.529 +	           net_ip_str (node->ip), port);
  60.530 +
  60.531 +	if (!(new_c = tcp_open (node->ip, port, FALSE)))
  60.532 +	{
  60.533 +		GT->DBGFN (GT, "failed to open test connection to %s:%hu",
  60.534 +		           net_ip_str (node->ip), node->gt_port);
  60.535 +		return;
  60.536 +	}
  60.537 +
  60.538 +	if (node->gt_port_verify)
  60.539 +		tcp_close (node->gt_port_verify);
  60.540 +
  60.541 +	/* keep track of this connection */
  60.542 +	node->gt_port_verify = new_c;
  60.543 +	new_c->udata = node;
  60.544 +
  60.545 +	input_add (new_c->fd, new_c, INPUT_WRITE,
  60.546 +	           (InputCallback)test_connectable, TIMEOUT_DEF);
  60.547 +}
    61.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    61.2 +++ b/src/gt_connect.h	Sat Feb 20 21:18:28 2010 -0800
    61.3 @@ -0,0 +1,38 @@
    61.4 +/*
    61.5 + * $Id: gt_connect.h,v 1.9 2004/03/24 06:21:13 hipnod Exp $
    61.6 + *
    61.7 + * Copyright (C) 2001-2003 giFT project (gift.sourceforge.net)
    61.8 + *
    61.9 + * This program is free software; you can redistribute it and/or modify it
   61.10 + * under the terms of the GNU General Public License as published by the
   61.11 + * Free Software Foundation; either version 2, or (at your option) any
   61.12 + * later version.
   61.13 + *
   61.14 + * This program is distributed in the hope that it will be useful, but
   61.15 + * WITHOUT ANY WARRANTY; without even the implied warranty of
   61.16 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
   61.17 + * General Public License for more details.
   61.18 + */
   61.19 +
   61.20 +#ifndef GIFT_GT_CONNECT_H_
   61.21 +#define GIFT_GT_CONNECT_H_
   61.22 +
   61.23 +/*****************************************************************************/
   61.24 +
   61.25 +#define HANDSHAKE_DEBUG         gt_config_get_int("handshake/debug=0")
   61.26 +
   61.27 +/*****************************************************************************/
   61.28 +
   61.29 +struct gt_node;
   61.30 +
   61.31 +BOOL  gnutella_send_connection_headers (TCPC *c, const char *header);
   61.32 +void  gnutella_start_connection        (int fd, input_id id, TCPC *c);
   61.33 +BOOL  gnutella_parse_response_headers  (char *response, Dataset **headers);
   61.34 +void  gnutella_set_handshake_timeout   (TCPC *c, time_t time);
   61.35 +
   61.36 +void  gt_connect_test     (struct gt_node *node, in_port_t port);
   61.37 +int   gt_connect          (struct gt_node *node);
   61.38 +
   61.39 +/*****************************************************************************/
   61.40 +
   61.41 +#endif /* GIFT_GT_CONNECT_H_ */
    62.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    62.2 +++ b/src/gt_gnutella.c	Sat Feb 20 21:18:28 2010 -0800
    62.3 @@ -0,0 +1,282 @@
    62.4 +/*
    62.5 + * $Id: gt_gnutella.c,v 1.74 2006/08/06 16:53:36 hexwab Exp $
    62.6 + *
    62.7 + * Copyright (C) 2001-2004 giFT project (gift.sourceforge.net)
    62.8 + *
    62.9 + * This program is free software; you can redistribute it and/or modify it
   62.10 + * under the terms of the GNU General Public License as published by the
   62.11 + * Free Software Foundation; either version 2, or (at your option) any
   62.12 + * later version.
   62.13 + *
   62.14 + * This program is distributed in the hope that it will be useful, but
   62.15 + * WITHOUT ANY WARRANTY; without even the implied warranty of
   62.16 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
   62.17 + * General Public License for more details.
   62.18 + */
   62.19 +
   62.20 +#include "gt_gnutella.h"
   62.21 +
   62.22 +#include "gt_conf.h"
   62.23 +#include "sha1.h"
   62.24 +#include "xml.h"
   62.25 +
   62.26 +#include "gt_share.h"
   62.27 +#include "gt_share_state.h"
   62.28 +
   62.29 +#include "gt_accept.h"
   62.30 +#include "gt_ban.h"
   62.31 +#include "gt_bind.h"
   62.32 +
   62.33 +#include "gt_node.h"
   62.34 +#include "gt_node_list.h"
   62.35 +#include "gt_netorg.h"
   62.36 +
   62.37 +#include "gt_xfer_obj.h"
   62.38 +#include "gt_xfer.h"
   62.39 +
   62.40 +#include "gt_search.h"
   62.41 +#include "gt_search_exec.h"
   62.42 +
   62.43 +#include "gt_web_cache.h"
   62.44 +#include "gt_stats.h"
   62.45 +#include "gt_query_route.h"
   62.46 +#include "transfer/source.h"           /* gnutella_source_{add,remove,cmp} */
   62.47 +
   62.48 +/*****************************************************************************/
   62.49 +
   62.50 +/* giFT protocol pointer */
   62.51 +Protocol *GT;
   62.52 +
   62.53 +/*****************************************************************************/
   62.54 +
   62.55 +/* The ip address is local if the address is local and the source from which
   62.56 + * it was discovered was not local */
   62.57 +BOOL gt_is_local_ip (in_addr_t ip, in_addr_t src)
   62.58 +{
   62.59 +	if (ip == 0)
   62.60 +		return TRUE;
   62.61 +
   62.62 +	if (net_match_host (ip, "LOCAL") &&
   62.63 +	    (src == 0 || !net_match_host (src, "LOCAL")))
   62.64 +	{
   62.65 +		return TRUE;
   62.66 +	}
   62.67 +
   62.68 +	return FALSE;
   62.69 +}
   62.70 +
   62.71 +/*****************************************************************************/
   62.72 +
   62.73 +/* shutdown */
   62.74 +static void gnutella_destroy (Protocol *p)
   62.75 +{
   62.76 +	GT->DBGFN (GT, "entered");
   62.77 +
   62.78 +	/* cleanup any network maintenance data */
   62.79 +	gt_netorg_cleanup ();
   62.80 +
   62.81 +	/* save the node list to disk */
   62.82 +	gt_node_list_save ();
   62.83 +
   62.84 +	/* cleanup any information about banned nodes */
   62.85 +	gt_ban_cleanup ();
   62.86 +
   62.87 +	/* destroy query_router tables */
   62.88 +	gt_query_router_self_destroy ();
   62.89 +
   62.90 +	/* cleanup remote search data structures */
   62.91 +	gt_search_cleanup ();
   62.92 +
   62.93 +	/* cleanup local share state */
   62.94 +	gt_share_state_local_cleanup ();
   62.95 +
   62.96 +	/* cleanup local search data structures */
   62.97 +	gt_search_exec_cleanup ();
   62.98 +
   62.99 +	/* cleanup XML structures */
  62.100 +	gt_xml_cleanup ();
  62.101 +
  62.102 +	/* free and disconnect all nodes */
  62.103 +	gt_node_remove_all ();
  62.104 +
  62.105 +	/* destroy web cache information */
  62.106 +	gt_web_cache_cleanup ();
  62.107 +
  62.108 +	/* stop binding to the local port */
  62.109 +	gt_bind_cleanup ();
  62.110 +
  62.111 +	/* free configuration information */
  62.112 +	gt_config_cleanup ();
  62.113 +
  62.114 +	/* free this client's GUID */
  62.115 +	gt_guid_self_cleanup ();
  62.116 +}
  62.117 +
  62.118 +/*****************************************************************************/
  62.119 +
  62.120 +static unsigned char *gnutella_sha1_hash (const char *path, size_t *len)
  62.121 +{
  62.122 +	*len = SHA1_BINSIZE;
  62.123 +	return sha1_digest (path, 0);
  62.124 +}
  62.125 +
  62.126 +static char *gnutella_sha1_dsp (unsigned char *hash, size_t len)
  62.127 +{
  62.128 +	return sha1_string (hash);
  62.129 +}
  62.130 +
  62.131 +/*****************************************************************************/
  62.132 +
  62.133 +static BOOL self_is_too_old (void)
  62.134 +{
  62.135 +	return FALSE;
  62.136 +}
  62.137 +
  62.138 +static void too_old_error_msg (void)
  62.139 +{
  62.140 +	GIFT_ERROR (("\nYour version of the Gnutella plugin is more than 1 year\n"
  62.141 +	             "old.  In order to protect the Gnutella network from \n"
  62.142 +	             "older programs, this plugin has deactivated itself.\n\n"
  62.143 +	             "Please update the plugin with a new version from \n"
  62.144 +	             "http://www.giftproject.org/, or stop running the \n"
  62.145 +	             "plugin by runnning gift-setup or removing \"Gnutella\"\n"
  62.146 +	             "from the /main/plugins line in $HOME/.giFT/giftd.conf\n"
  62.147 +	             "manually.\n\n"
  62.148 +	             "Thanks, and sorry for the inconvenience.\n"));
  62.149 +}
  62.150 +
  62.151 +static BOOL gnutella_start (Protocol *p)
  62.152 +{
  62.153 +	p->DBGFN (p, "Starting Gnutella plugin");
  62.154 +
  62.155 +	/*
  62.156 +	 * If this node is extremely old, deactivate the plugin, but print a
  62.157 +	 * message to the log file.
  62.158 +	 *
  62.159 +	 * This is a temporary hack to clean out old nodes in the future, just
  62.160 +	 * until ultrapeer support is implemented, but we don't want to bother
  62.161 +	 * people that are using other plugins and don't care...
  62.162 +	 */
  62.163 +	if (self_is_too_old ())
  62.164 +	{
  62.165 +		too_old_error_msg ();
  62.166 +		return TRUE;
  62.167 +	}
  62.168 +
  62.169 +	if (!gt_config_init ())
  62.170 +	{
  62.171 +		GIFT_ERROR (("Unable to load config file. Please copy it to "
  62.172 +		             "~/.giFT/Gnutella/Gnutella.conf"));
  62.173 +		return FALSE;
  62.174 +	}
  62.175 +
  62.176 +	if (!gt_web_cache_init ())
  62.177 +	{
  62.178 +		GIFT_ERROR (("Unable to load gwebcaches file. Please copy it to "
  62.179 +		             "~/.giFT/Gnutella/gwebcaches"));
  62.180 +		return FALSE;
  62.181 +	}
  62.182 +
  62.183 +	/* load any banned ip addresses */
  62.184 +	gt_ban_init ();
  62.185 +
  62.186 +	/* initialize the GUID for this node */
  62.187 +	gt_guid_self_init ();
  62.188 +
  62.189 +	/* listen for connections */
  62.190 +	gt_bind_init ();
  62.191 +
  62.192 +	/* load the list of all previously contacted nodes */
  62.193 +	gt_node_list_load ();
  62.194 +
  62.195 +	/* initialize query router tables */
  62.196 +	gt_query_router_self_init ();
  62.197 +
  62.198 +	/* initialize the local search data structures */
  62.199 +	gt_search_exec_init ();
  62.200 +
  62.201 +	/* initialize the local sharing state */
  62.202 +	gt_share_state_local_init ();
  62.203 +
  62.204 +	/* initialize the remote search data structures */
  62.205 +	gt_search_init ();
  62.206 +
  62.207 +	/* initialize support for xml metadata */
  62.208 +	gt_xml_init ();
  62.209 +
  62.210 +	/* startup network maintenance */
  62.211 +	gt_netorg_init ();
  62.212 +
  62.213 +	return TRUE;
  62.214 +}
  62.215 +
  62.216 +/*
  62.217 + * The entry-point for the giFT daemon
  62.218 + */
  62.219 +BOOL Gnutella_init (Protocol *p)
  62.220 +{
  62.221 +	if (protocol_compat (p, LIBGIFTPROTO_MKVERSION (0, 11, 4)) != 0)
  62.222 +		return FALSE;
  62.223 +
  62.224 +	p->version_str = STRDUP (GT_VERSION);
  62.225 +	GT = p;
  62.226 +
  62.227 +	/* gt_gnutella.c: */
  62.228 +	p->start = gnutella_start;
  62.229 +
  62.230 +	/* skip initializing if too old. Note that we still need to provide a
  62.231 +	 * start function since gift's default handler will return FALSE. The
  62.232 +	 * actual error message describing the 'too old' problem is also generated
  62.233 +	 * by our start function.
  62.234 +	 */
  62.235 +	if (self_is_too_old ())
  62.236 +		return TRUE;
  62.237 +
  62.238 +	/* describe the hash algo */
  62.239 +	p->hash_handler (p, "SHA1", HASH_PRIMARY, gnutella_sha1_hash,
  62.240 +	                 gnutella_sha1_dsp);
  62.241 +
  62.242 +	/* gt_gnutella.c: */
  62.243 +	p->destroy        = gnutella_destroy;
  62.244 +
  62.245 +	/* gt_search.c: */
  62.246 +	p->search         = gnutella_search;
  62.247 +#if 0
  62.248 +	p->browse         = gnutella_browse;
  62.249 +#endif
  62.250 +	p->locate         = gnutella_locate;
  62.251 +	p->search_cancel  = gnutella_search_cancel;
  62.252 +
  62.253 +	/* gt_xfer.c: */
  62.254 +	p->download_start = gnutella_download_start;
  62.255 +	p->download_stop  = gnutella_download_stop;
  62.256 +	p->upload_stop    = gnutella_upload_stop;
  62.257 +	p->chunk_suspend  = gnutella_chunk_suspend;
  62.258 +	p->chunk_resume   = gnutella_chunk_resume;
  62.259 +
  62.260 +	/* transfer/source.c: */
  62.261 +	p->source_cmp     = gnutella_source_cmp;
  62.262 +	p->source_add     = gnutella_source_add;
  62.263 +	p->source_remove  = gnutella_source_remove;
  62.264 +
  62.265 +#if 0
  62.266 +	p->upload_avail   = gnutella_upload_avail;
  62.267 +	p->user_cmp       = gnutella_user_cmp;
  62.268 +#endif
  62.269 +
  62.270 +	/* gt_share.c: */
  62.271 +	p->share_new      = gnutella_share_new;
  62.272 +	p->share_free     = gnutella_share_free;
  62.273 +	p->share_add      = gnutella_share_add;
  62.274 +	p->share_remove   = gnutella_share_remove;
  62.275 +	p->share_sync     = gnutella_share_sync;
  62.276 +
  62.277 +	/* gt_share_state.c: */
  62.278 +	p->share_hide     = gnutella_share_hide;
  62.279 +	p->share_show     = gnutella_share_show;
  62.280 +
  62.281 +	/* gt_stats.c: */
  62.282 +	p->stats          = gnutella_stats;
  62.283 +
  62.284 +	return TRUE;
  62.285 +}
    63.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    63.2 +++ b/src/gt_gnutella.h	Sat Feb 20 21:18:28 2010 -0800
    63.3 @@ -0,0 +1,112 @@
    63.4 +/*
    63.5 + * $Id: gt_gnutella.h,v 1.43 2006/08/06 17:26:39 hexwab Exp $
    63.6 + *
    63.7 + * Copyright (C) 2001-2003 giFT project (gift.sourceforge.net)
    63.8 + *
    63.9 + * This program is free software; you can redistribute it and/or modify it
   63.10 + * under the terms of the GNU General Public License as published by the
   63.11 + * Free Software Foundation; either version 2, or (at your option) any
   63.12 + * later version.
   63.13 + *
   63.14 + * This program is distributed in the hope that it will be useful, but
   63.15 + * WITHOUT ANY WARRANTY; without even the implied warranty of
   63.16 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
   63.17 + * General Public License for more details.
   63.18 + */
   63.19 +
   63.20 +#ifndef GIFT_GT_GNUTELLA_H_
   63.21 +#define GIFT_GT_GNUTELLA_H_
   63.22 +
   63.23 +/*****************************************************************************/
   63.24 +
   63.25 +#include "config.h"
   63.26 +
   63.27 +/*****************************************************************************/
   63.28 +
   63.29 +#define GT_VERSION           GT_MAJOR_VERSION "." GT_MINOR_VERSION "." \
   63.30 +                             GT_MICRO_VERSION GT_EXTRA_VERSION
   63.31 +
   63.32 +#define      GT_DEBUG
   63.33 +#define LIBGIFT_DEBUG
   63.34 +
   63.35 +#define GIFT_PLUGIN
   63.36 +#include <libgift/libgift.h>
   63.37 +
   63.38 +/* this works because duplicate case labels are disallowed in C */
   63.39 +#define assert_at_compile(cond) \
   63.40 +        do { switch (0) { default: case 0: case cond: break; } } while (0)
   63.41 +
   63.42 +/*****************************************************************************/
   63.43 +
   63.44 +#include <libgift/proto/protocol.h>
   63.45 +#include <libgift/proto/share.h>
   63.46 +#include <libgift/proto/share_hash.h>
   63.47 +#include <libgift/proto/transfer_api.h>
   63.48 +
   63.49 +/*****************************************************************************/
   63.50 +
   63.51 +#include <libgift/event.h>
   63.52 +#include <libgift/dataset.h>
   63.53 +#include <libgift/file.h>
   63.54 +
   63.55 +#include <libgift/network.h>
   63.56 +#include <libgift/fdbuf.h>
   63.57 +
   63.58 +/*****************************************************************************/
   63.59 +
   63.60 +#include "gt_guid.h"
   63.61 +#include "gt_conf.h"
   63.62 +
   63.63 +#include <ctype.h>
   63.64 +
   63.65 +/*****************************************************************************/
   63.66 +/* global variables */
   63.67 +
   63.68 +extern Protocol        *GT;
   63.69 +
   63.70 +extern struct gt_node  *GT_SELF;
   63.71 +
   63.72 +extern gt_guid_t       *GT_SELF_GUID;
   63.73 +
   63.74 +/*****************************************************************************/
   63.75 +
   63.76 +#define GNUTELLA_LOCAL_MODE     gt_config_get_int("local/lan_mode=0")
   63.77 +#define GNUTELLA_LOCAL_FW       gt_config_get_int("local/firewalled=0")
   63.78 +#define GNUTELLA_LOCAL_ALLOW    gt_config_get_str("local/hosts_allow=LOCAL")
   63.79 +
   63.80 +/*****************************************************************************/
   63.81 +
   63.82 +BOOL gt_is_local_ip (in_addr_t ip, in_addr_t src);
   63.83 +
   63.84 +/*****************************************************************************/
   63.85 +
   63.86 +/*
   63.87 + * libgift doesn't define this...
   63.88 + */
   63.89 +#ifndef EDAYS
   63.90 +#define EDAYS (24 * EHOURS)
   63.91 +#endif
   63.92 +
   63.93 +/*
   63.94 + * This needs libgift >= 0.11.5
   63.95 + */
   63.96 +#ifndef GIFT_PLUGIN_EXPORT
   63.97 +#define GIFT_PLUGIN_EXPORT
   63.98 +#endif
   63.99 +
  63.100 +/*
  63.101 + * Invalid input/timer ids used for readability and to help porting to libgift
  63.102 + * 0.12.
  63.103 + */
  63.104 +#define INPUT_NONE   ((input_id)0)
  63.105 +#define TIMER_NONE   ((timer_id)0)
  63.106 +
  63.107 +/*
  63.108 + * The entry-point for the giFT daemon
  63.109 + */
  63.110 +GIFT_PLUGIN_EXPORT
  63.111 +  BOOL Gnutella_init (Protocol *p);
  63.112 +
  63.113 +/*****************************************************************************/
  63.114 +
  63.115 +#endif /* GIFT_GT_GNUTELLA_H_ */
    64.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    64.2 +++ b/src/gt_guid.c	Sat Feb 20 21:18:28 2010 -0800
    64.3 @@ -0,0 +1,309 @@
    64.4 +/*
    64.5 + * $Id: gt_guid.c,v 1.18 2006/01/28 16:57:56 mkern Exp $
    64.6 + *
    64.7 + * Copyright (C) 2001-2003 giFT project (gift.sourceforge.net)
    64.8 + *
    64.9 + * This program is free software; you can redistribute it and/or modify it
   64.10 + * under the terms of the GNU General Public License as published by the
   64.11 + * Free Software Foundation; either version 2, or (at your option) any
   64.12 + * later version.
   64.13 + *
   64.14 + * This program is distributed in the hope that it will be useful, but
   64.15 + * WITHOUT ANY WARRANTY; without even the implied warranty of
   64.16 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
   64.17 + * General Public License for more details.
   64.18 + */
   64.19 +
   64.20 +#include "gt_gnutella.h"
   64.21 +#include "sha1.h"
   64.22 +
   64.23 +/*****************************************************************************/
   64.24 +
   64.25 +/* global guid identifying this client */
   64.26 +gt_guid_t *GT_SELF_GUID;
   64.27 +
   64.28 +/*****************************************************************************/
   64.29 +
   64.30 +/* seed for generating unique numbers */
   64.31 +static unsigned int seed = 0;
   64.32 +
   64.33 +/* map binary numbers to hexadecimal */
   64.34 +static char bin_to_hex[] = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9',
   64.35 +                             'a', 'b', 'c', 'd', 'e', 'f' };
   64.36 +
   64.37 +/* guid filled with all zeroes */
   64.38 +static gt_guid_t zero_guid[GT_GUID_LEN] = { 0 };
   64.39 +
   64.40 +/*****************************************************************************/
   64.41 +
   64.42 +/* TODO: use /dev/urandom when available */
   64.43 +static unsigned int rng_seed (void)
   64.44 +{
   64.45 +	sha1_state_t   sha1;
   64.46 +	struct timeval tv;
   64.47 +	unsigned int   seed;
   64.48 +	int            i;
   64.49 +	unsigned char  hash[SHA1_BINSIZE];
   64.50 +
   64.51 +	gt_sha1_init (&sha1);
   64.52 +	platform_gettimeofday (&tv, NULL);
   64.53 +
   64.54 +	gt_sha1_append (&sha1, &tv.tv_usec, sizeof (tv.tv_usec));
   64.55 +	gt_sha1_append (&sha1, &tv.tv_sec, sizeof (tv.tv_sec));
   64.56 +
   64.57 +#ifdef HAVE_GETPID
   64.58 +	{
   64.59 +		pid_t pid = getpid();
   64.60 +		gt_sha1_append (&sha1, &pid, sizeof (pid));
   64.61 +	}
   64.62 +#endif
   64.63 +
   64.64 +#ifdef WIN32
   64.65 +	{
   64.66 +		DWORD process_id = GetCurrentProcessId();
   64.67 +		gt_sha1_append (&sha1, &process_id, sizeof (process_id));
   64.68 +	}
   64.69 +#endif
   64.70 +
   64.71 +#ifdef HAVE_GETPPID
   64.72 +	{
   64.73 +		pid_t ppid = getppid();
   64.74 +		gt_sha1_append (&sha1, &ppid, sizeof (ppid));
   64.75 +	}
   64.76 +#endif /* WIN32 */
   64.77 +
   64.78 +	memset (hash, 0, sizeof (hash));
   64.79 +	gt_sha1_finish (&sha1, hash);
   64.80 +
   64.81 +	seed = 0;
   64.82 +	i    = 0;
   64.83 +
   64.84 +	/* crush the hash into an unsigned int */
   64.85 +	while (i < SHA1_BINSIZE)
   64.86 +	{
   64.87 +		unsigned int t;
   64.88 +		size_t       len;
   64.89 +
   64.90 +		t = 0;
   64.91 +		len = MIN (sizeof (unsigned int), SHA1_BINSIZE - i);
   64.92 +
   64.93 +		memcpy (&t, &hash[i], len);
   64.94 +
   64.95 +		seed ^= t;
   64.96 +		i += len;
   64.97 +	}
   64.98 +
   64.99 +	return seed;
  64.100 +}
  64.101 +
  64.102 +void gt_guid_init (gt_guid_t *guid)
  64.103 +{
  64.104 +	int i;
  64.105 +
  64.106 +	if (!seed)
  64.107 +	{
  64.108 +		seed = rng_seed();
  64.109 +		srand (seed);
  64.110 +	}
  64.111 +
  64.112 +	for (i = GT_GUID_LEN - 1; i >= 0; i--)
  64.113 +		guid[i] = 256.0 * rand() / (RAND_MAX + 1.0);
  64.114 +
  64.115 +	/* mark this GUID as coming from a "new" client */
  64.116 +	guid[8]  = 0xff;
  64.117 +	guid[15] = 0x01;
  64.118 +}
  64.119 +
  64.120 +gt_guid_t *gt_guid_new (void)
  64.121 +{
  64.122 +	gt_guid_t *guid;
  64.123 +
  64.124 +	if (!(guid = malloc (GT_GUID_LEN)))
  64.125 +		return NULL;
  64.126 +
  64.127 +	gt_guid_init (guid);
  64.128 +
  64.129 +	return guid;
  64.130 +}
  64.131 +
  64.132 +int gt_guid_cmp (const gt_guid_t *a, const gt_guid_t *b)
  64.133 +{
  64.134 +	if (!a)
  64.135 +		return (b == NULL ? 0 : -1);
  64.136 +	else if (!b)
  64.137 +		return (a == NULL ? 0 : +1);
  64.138 +
  64.139 +	return memcmp (a, b, GT_GUID_LEN);
  64.140 +}
  64.141 +
  64.142 +char *gt_guid_str (const gt_guid_t *guid)
  64.143 +{
  64.144 +	static char    buf[128];
  64.145 +	unsigned char  c;
  64.146 +	int            pos;
  64.147 +	int            len;
  64.148 +
  64.149 +	if (!guid)
  64.150 +		return NULL;
  64.151 +
  64.152 +	pos = 0;
  64.153 +	len = GT_GUID_LEN;
  64.154 +
  64.155 +	while (len-- > 0)
  64.156 +	{
  64.157 +		c = *guid++;
  64.158 +
  64.159 +		buf[pos++] = bin_to_hex[(c & 0xf0) >> 4];
  64.160 +		buf[pos++] = bin_to_hex[(c & 0x0f)];
  64.161 +	}
  64.162 +
  64.163 +	buf[pos] = 0;
  64.164 +
  64.165 +	return buf;
  64.166 +}
  64.167 +
  64.168 +gt_guid_t *gt_guid_dup (const gt_guid_t *guid)
  64.169 +{
  64.170 +	gt_guid_t *new_guid;
  64.171 +
  64.172 +	if (!(new_guid = malloc (GT_GUID_LEN)))
  64.173 +		return NULL;
  64.174 +
  64.175 +	memcpy (new_guid, guid, GT_GUID_LEN);
  64.176 +
  64.177 +	return new_guid;
  64.178 +}
  64.179 +
  64.180 +static unsigned char hex_char_to_bin (char x)
  64.181 +{
  64.182 +	if (x >= '0' && x <= '9')
  64.183 +		return (x - '0');
  64.184 +
  64.185 +	x = toupper (x);
  64.186 +
  64.187 +	return ((x - 'A') + 10);
  64.188 +}
  64.189 +
  64.190 +static int hex_to_bin (const char *hex, unsigned char *bin, int len)
  64.191 +{
  64.192 +	unsigned char value;
  64.193 +
  64.194 +	while (isxdigit (hex[0]) && isxdigit (hex[1]) && len-- > 0)
  64.195 +	{
  64.196 +		value  = (hex_char_to_bin (*hex++) << 4) & 0xf0;
  64.197 +		value |= (hex_char_to_bin (*hex++)       & 0x0f);
  64.198 +		*bin++ = value;
  64.199 +	}
  64.200 +
  64.201 +   return (len <= 0) ? TRUE : FALSE;
  64.202 +}
  64.203 +
  64.204 +gt_guid_t *gt_guid_bin (const char *guid_ascii)
  64.205 +{
  64.206 +	gt_guid_t *guid;
  64.207 +
  64.208 +	if (!guid_ascii)
  64.209 +		return NULL;
  64.210 +
  64.211 +	if (!(guid = malloc (GT_GUID_LEN)))
  64.212 +		return NULL;
  64.213 +
  64.214 +	if (!hex_to_bin (guid_ascii, guid, GT_GUID_LEN))
  64.215 +	{
  64.216 +		free (guid);
  64.217 +		return NULL;
  64.218 +	}
  64.219 +
  64.220 +	return guid;
  64.221 +}
  64.222 +
  64.223 +/*****************************************************************************/
  64.224 +
  64.225 +BOOL gt_guid_is_empty (const gt_guid_t *guid)
  64.226 +{
  64.227 +	if (!guid)
  64.228 +		return TRUE;
  64.229 +
  64.230 +	return memcmp (guid, zero_guid, GT_GUID_LEN) == 0;
  64.231 +}
  64.232 +
  64.233 +/*****************************************************************************/
  64.234 +
  64.235 +/*
  64.236 + * Load the client GUID for this node.
  64.237 + */
  64.238 +static gt_guid_t *get_client_id (char *conf_path)
  64.239 +{
  64.240 +	FILE      *f;
  64.241 +	gt_guid_t *client_id = NULL;
  64.242 +	char      *buf       = NULL;
  64.243 +
  64.244 +	/*
  64.245 +	 * There are people who distribute giFT packages which include the
  64.246 +	 * developer's client-id file. These packages (mainly KCeasy derivatives,
  64.247 +	 * I think) are widely enough distributed that other gnutella developers
  64.248 +	 * have noticed the problem and notified me. To prevent this problem in
  64.249 +	 * future versions I have forced randomization of the GUID on each startup
  64.250 +	 * below. --mkern
  64.251 +	 */
  64.252 +#if 0
  64.253 +	if ((f = fopen (gift_conf_path (conf_path), "r")))
  64.254 +	{
  64.255 +		while (file_read_line (f, &buf))
  64.256 +		{
  64.257 +			char *id;
  64.258 +			char *line;
  64.259 +
  64.260 +			free (client_id);
  64.261 +			client_id = NULL;
  64.262 +
  64.263 +			line = buf;
  64.264 +			id = string_sep_set (&line, "\r\n");
  64.265 +
  64.266 +			if (string_isempty (id))
  64.267 +				continue;
  64.268 +
  64.269 +			client_id = gt_guid_bin (id);
  64.270 +		}
  64.271 +
  64.272 +		fclose (f);
  64.273 +	}
  64.274 +#endif
  64.275 +
  64.276 +	/* TODO: regenerate when client guid is pretty old */
  64.277 +	if (client_id != NULL)
  64.278 +		return client_id;
  64.279 +
  64.280 +	/*
  64.281 +	 * Create a new client identifier
  64.282 +	 */
  64.283 +	client_id = gt_guid_new ();
  64.284 +	assert (client_id != NULL);
  64.285 +
  64.286 +	/* store the id in ~/.giFT/Gnutella/clientid */
  64.287 +	if (!(f = fopen (gift_conf_path (conf_path), "w")))
  64.288 +	{
  64.289 +		GIFT_ERROR (("clientid storage file: %s", GIFT_STRERROR ()));
  64.290 +		return client_id;
  64.291 +	}
  64.292 +
  64.293 +	fprintf (f, "%s\n", gt_guid_str (client_id));
  64.294 +	fclose (f);
  64.295 +
  64.296 +	return client_id;
  64.297 +}
  64.298 +
  64.299 +void gt_guid_self_init (void)
  64.300 +{
  64.301 +	GT_SELF_GUID = get_client_id ("Gnutella/client-id");
  64.302 +
  64.303 +	/* remove the old clientid file which used an inferior random number
  64.304 +	 * generator */
  64.305 +	remove (gift_conf_path ("Gnutella/clientid"));
  64.306 +}
  64.307 +
  64.308 +void gt_guid_self_cleanup (void)
  64.309 +{
  64.310 +	free (GT_SELF_GUID);
  64.311 +	GT_SELF_GUID = NULL;
  64.312 +}
    65.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    65.2 +++ b/src/gt_guid.h	Sat Feb 20 21:18:28 2010 -0800
    65.3 @@ -0,0 +1,48 @@
    65.4 +/*
    65.5 + * $Id: gt_guid.h,v 1.10 2004/03/05 17:49:40 hipnod Exp $
    65.6 + *
    65.7 + * Copyright (C) 2001-2003 giFT project (gift.sourceforge.net)
    65.8 + *
    65.9 + * This program is free software; you can redistribute it and/or modify it
   65.10 + * under the terms of the GNU General Public License as published by the
   65.11 + * Free Software Foundation; either version 2, or (at your option) any
   65.12 + * later version.
   65.13 + *
   65.14 + * This program is distributed in the hope that it will be useful, but
   65.15 + * WITHOUT ANY WARRANTY; without even the implied warranty of
   65.16 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
   65.17 + * General Public License for more details.
   65.18 + */
   65.19 +
   65.20 +#ifndef GIFT_GT_GUID_H_
   65.21 +#define GIFT_GT_GUID_H_
   65.22 +
   65.23 +/*****************************************************************************/
   65.24 +
   65.25 +#define GT_GUID_LEN      16
   65.26 +
   65.27 +/*****************************************************************************/
   65.28 +
   65.29 +typedef uint8_t gt_guid_t;
   65.30 +
   65.31 +/*****************************************************************************/
   65.32 +
   65.33 +gt_guid_t  *gt_guid_new          (void);
   65.34 +void        gt_guid_init         (gt_guid_t *guid);
   65.35 +int         gt_guid_cmp          (const gt_guid_t *a, const gt_guid_t *b);
   65.36 +char       *gt_guid_str          (const gt_guid_t *guid);
   65.37 +gt_guid_t  *gt_guid_dup          (const gt_guid_t *guid);
   65.38 +gt_guid_t  *gt_guid_bin          (const char *guid_ascii);
   65.39 +
   65.40 +/*****************************************************************************/
   65.41 +
   65.42 +BOOL        gt_guid_is_empty     (const gt_guid_t *guid);
   65.43 +
   65.44 +/*****************************************************************************/
   65.45 +
   65.46 +void        gt_guid_self_init    (void);
   65.47 +void        gt_guid_self_cleanup (void);
   65.48 +
   65.49 +/*****************************************************************************/
   65.50 +
   65.51 +#endif /* GIFT_GT_GUID_H_ */
    66.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    66.2 +++ b/src/gt_http_client.c	Sat Feb 20 21:18:28 2010 -0800
    66.3 @@ -0,0 +1,909 @@
    66.4 +/*
    66.5 + * $Id: gt_http_client.c,v 1.57 2006/02/03 20:11:40 mkern Exp $
    66.6 + *
    66.7 + * Copyright (C) 2001-2003 giFT project (gift.sourceforge.net)
    66.8 + *
    66.9 + * This program is free software; you can redistribute it and/or modify it
   66.10 + * under the terms of the GNU General Public License as published by the
   66.11 + * Free Software Foundation; either version 2, or (at your option) any
   66.12 + * later version.
   66.13 + *
   66.14 + * This program is distributed in the hope that it will be useful, but
   66.15 + * WITHOUT ANY WARRANTY; without even the implied warranty of
   66.16 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
   66.17 + * General Public License for more details.
   66.18 + */
   66.19 +
   66.20 +#include "gt_gnutella.h"
   66.21 +#include "gt_version.h"
   66.22 +
   66.23 +#include "gt_xfer_obj.h"
   66.24 +#include "gt_xfer.h"
   66.25 +
   66.26 +#include "gt_http_client.h"
   66.27 +#include "gt_http_server.h"
   66.28 +
   66.29 +#include "gt_accept.h"
   66.30 +
   66.31 +#include "transfer/source.h"
   66.32 +
   66.33 +/*****************************************************************************/
   66.34 +
   66.35 +/* prototyping this function effectively provides the non-blocking flow of the
   66.36 + * program and helps to self-document this file */
   66.37 +static void get_server_reply     (int fd, input_id id, GtTransfer *xfer);
   66.38 +
   66.39 +/*****************************************************************************/
   66.40 +/* CLIENT HELPERS */
   66.41 +
   66.42 +static int gt_http_client_send (TCPC *c, char *command, char *request, ...)
   66.43 +{
   66.44 +	char        *key;
   66.45 +	char        *value;
   66.46 +	String      *s;
   66.47 +	int          ret;
   66.48 +	va_list      args;
   66.49 +
   66.50 +	if (!command || !request)
   66.51 +		return -1;
   66.52 +
   66.53 +	if (!(s = string_new (NULL, 0, 0, TRUE)))
   66.54 +		return -1;
   66.55 +
   66.56 +	string_appendf (s, "%s %s HTTP/1.1\r\n", command, request);
   66.57 +
   66.58 +	va_start (args, request);
   66.59 +
   66.60 +	for (;;)
   66.61 +	{
   66.62 +		/* if we receive the sentinel, bail out */
   66.63 +		if (!(key = va_arg (args, char *)))
   66.64 +			break;
   66.65 +
   66.66 +		if (!(value = va_arg (args, char *)))
   66.67 +			continue;
   66.68 +
   66.69 +		string_appendf (s, "%s: %s\r\n", key, value);
   66.70 +	}
   66.71 +
   66.72 +	va_end (args);
   66.73 +
   66.74 +	/* append final message terminator */
   66.75 +	string_append (s, "\r\n");
   66.76 +
   66.77 +	if (HTTP_DEBUG)
   66.78 +		GT->DBGSOCK (GT, c, "sending client request:\n%s", s->str);
   66.79 +
   66.80 +	ret = tcp_send (c, s->str, s->len);
   66.81 +	string_free (s);
   66.82 +
   66.83 +	return ret;
   66.84 +}
   66.85 +
   66.86 +/* parse an HTTP server reply */
   66.87 +static BOOL parse_server_reply (GtTransfer *xfer, TCPC *c, char *reply)
   66.88 +{
   66.89 +	char  *response; /* HTTP/1.1 200 OK */
   66.90 +	char  *version;
   66.91 +	int    code;     /* 200, 404, ... */
   66.92 +
   66.93 +	if (!xfer || !reply)
   66.94 +		return FALSE;
   66.95 +
   66.96 +	if (HTTP_DEBUG)
   66.97 +		GT->DBGSOCK (GT, c, "reply:\n%s", reply);
   66.98 +
   66.99 +	response = string_sep_set (&reply, "\r\n");
  66.100 +
  66.101 +	if (!response)
  66.102 +		return FALSE;
  66.103 +
  66.104 +	version =       string_sep (&response, " ");  /* shift past HTTP/1.1 */
  66.105 +	code    = ATOI (string_sep (&response, " ")); /* shift past 200 */
  66.106 +
  66.107 +	/* parse the rest of the key/value fields */
  66.108 +	gt_http_header_parse (reply, &xfer->header);
  66.109 +
  66.110 +	xfer->code    = code;
  66.111 +	xfer->version = STRDUP (version);
  66.112 +
  66.113 +	return TRUE;
  66.114 +}
  66.115 +
  66.116 +/*****************************************************************************/
  66.117 +
  66.118 +/*
  66.119 + * Complete interface to the standard HTTP GET / with a server.  These routines
  66.120 + * require non of OpenFT's extensions and communicate perfectly valid
  66.121 + * HTTP/1.1 (to my knowledge).  You could use this to transfer non-OpenFT,
  66.122 + * hopefully. ;)
  66.123 + *
  66.124 + * NOTE:
  66.125 + * I need to add more text here so this stands out better as one of the two
  66.126 + * core subsystems within this file.  So here it is. :P
  66.127 + */
  66.128 +void gt_http_client_get (Chunk *chunk, GtTransfer *xfer)
  66.129 +{
  66.130 +	TCPC *c;
  66.131 +
  66.132 +	if (!chunk || !xfer)
  66.133 +	{
  66.134 +		GT->DBGFN (GT, "uhm.");
  66.135 +		return;
  66.136 +	}
  66.137 +
  66.138 +	xfer->command = STRDUP ("GET");
  66.139 +
  66.140 +	if (!(c = gt_http_connection_open (GT_TRANSFER_DOWNLOAD, xfer->ip,
  66.141 +	                                   xfer->port)))
  66.142 +	{
  66.143 +		gt_transfer_close (xfer, TRUE);
  66.144 +		return;
  66.145 +	}
  66.146 +
  66.147 +	/* pass along the connection with the xfer */
  66.148 +	gt_transfer_set_tcpc (xfer, c);
  66.149 +	assert (xfer->chunk == chunk);
  66.150 +	assert (chunk->udata == xfer);
  66.151 +
  66.152 +	gt_transfer_status (xfer, SOURCE_WAITING, "Connecting");
  66.153 +
  66.154 +	/* be a little more aggressive timing out HTTP connections (TIMEOUT_DEF /
  66.155 +	 * 2 + 5), so that useless sources don't occupy Chunks so often */
  66.156 +	input_add (c->fd, xfer, INPUT_WRITE,
  66.157 +	           (InputCallback)gt_http_client_start, TIMEOUT_DEF / 2 + 5);
  66.158 +}
  66.159 +
  66.160 +static int client_get_request (GtTransfer *xfer)
  66.161 +{
  66.162 +	TCPC  *c;
  66.163 +	char   host[128];
  66.164 +	char   range_hdr[64];
  66.165 +	int    ret;
  66.166 +
  66.167 +	if (!xfer)
  66.168 +		return FALSE;
  66.169 +
  66.170 +	c = gt_transfer_get_tcpc (xfer);
  66.171 +
  66.172 +	snprintf (range_hdr, sizeof (range_hdr) - 1, "bytes=%i-%i",
  66.173 +	          (int) xfer->start, (int) xfer->stop - 1);
  66.174 +
  66.175 +	snprintf (host, sizeof (host) - 1, "%s:%hu", net_ip_str (xfer->ip),
  66.176 +	          xfer->port);
  66.177 +
  66.178 +	/* always send the Range request just because we always know the full size
  66.179 +	 * we want */
  66.180 +	ret = gt_http_client_send (c, "GET",        xfer->request,
  66.181 +	                           "Range",         range_hdr,
  66.182 +	                           "Host",          host,
  66.183 +	                           "User-Agent",    gt_version(),
  66.184 +	                           "X-Queue",       "0.1",
  66.185 +	                           NULL);
  66.186 +
  66.187 +	return ret;
  66.188 +}
  66.189 +
  66.190 +/*
  66.191 + * Verify connection status and Send the GET request to the server.
  66.192 + */
  66.193 +void gt_http_client_start (int fd, input_id id, GtTransfer *xfer)
  66.194 +{
  66.195 +	Chunk    *chunk;
  66.196 +	TCPC     *c;
  66.197 +
  66.198 +	c     = gt_transfer_get_tcpc  (xfer);
  66.199 +	chunk = gt_transfer_get_chunk (xfer);
  66.200 +
  66.201 +	if (net_sock_error (c->fd))
  66.202 +	{
  66.203 +		GtSource *gt;
  66.204 +
  66.205 +		gt = gt_transfer_get_source (xfer);
  66.206 +
  66.207 +		/* set the connection as having failed, and retry w/ a push */
  66.208 +		gt->connect_failed = TRUE;
  66.209 +
  66.210 +		gt_transfer_status (xfer, SOURCE_CANCELLED, (fd == -1 ?
  66.211 +		                                             "Connect timeout" :
  66.212 +		                                             "Connect failed"));
  66.213 +		gt_transfer_close (xfer, TRUE);
  66.214 +		return;
  66.215 +	}
  66.216 +
  66.217 +	/*
  66.218 +	 * Update the length of the chunk in the GtTransfer. We do this
  66.219 +	 * because giftd may change the range of the chunk while we are
  66.220 +	 * playing with it, and this is the last point where we can update
  66.221 +	 * the range.
  66.222 +	 *
  66.223 +	 * If giftd changes the range after this point, we'll be forced to break
  66.224 +	 * this connection :(
  66.225 +	 */
  66.226 +	gt_transfer_set_length (xfer, chunk);
  66.227 +
  66.228 +	/* send the GET / request to the server */
  66.229 +	if (client_get_request (xfer) <= 0)
  66.230 +	{
  66.231 +		gt_transfer_status (xfer, SOURCE_CANCELLED, "GET send failed");
  66.232 +		gt_transfer_close (xfer, TRUE);
  66.233 +		return;
  66.234 +	}
  66.235 +
  66.236 +	gt_transfer_status (xfer, SOURCE_WAITING, "Sent HTTP request");
  66.237 +
  66.238 +	/* do not remove all fds associated with this socket until we destroy it */
  66.239 +	input_remove (id);
  66.240 +
  66.241 +	/* wait for the server response */
  66.242 +	input_add (fd, xfer, INPUT_READ,
  66.243 +			   (InputCallback)get_server_reply, TIMEOUT_DEF);
  66.244 +}
  66.245 +
  66.246 +/*
  66.247 + * Read the response body, if any, so persistent HTTP will work.
  66.248 + * Note that the GtTransfer can still timeout, in which case
  66.249 + * the connection will get closed and so will the xfer.
  66.250 + */
  66.251 +static void read_response_body (int fd, input_id id, GtTransfer *xfer)
  66.252 +{
  66.253 +	Chunk       *chunk;
  66.254 +	TCPC        *c;
  66.255 +	FDBuf       *buf;
  66.256 +	char        *response;
  66.257 +	int          n;
  66.258 +	int          len;
  66.259 +
  66.260 +	c     = gt_transfer_get_tcpc  (xfer);
  66.261 +	chunk = gt_transfer_get_chunk (xfer);
  66.262 +
  66.263 +	len = xfer->stop - xfer->start;
  66.264 +
  66.265 +	/* since the body isnt important, close if its too large */
  66.266 +	if (len >= 16384)
  66.267 +	{
  66.268 +		GT->DBGFN (GT, "[%s:%hu] response body too large (%d)",
  66.269 +		           net_ip_str (xfer->ip), xfer->port);
  66.270 +		gt_transfer_close (xfer, TRUE);
  66.271 +		return;
  66.272 +	}
  66.273 +
  66.274 +	buf = tcp_readbuf (c);
  66.275 +
  66.276 +	if ((n = fdbuf_fill (buf, len)) < 0)
  66.277 +	{
  66.278 +		GT->DBGFN (GT, "error [%s:%hu]: %s",
  66.279 +		           net_ip_str (xfer->ip), xfer->port, GIFT_NETERROR ());
  66.280 +		gt_transfer_close (xfer, TRUE);
  66.281 +		return;
  66.282 +	}
  66.283 +
  66.284 +	if (n > 0)
  66.285 +		return;
  66.286 +
  66.287 +	/*
  66.288 +	 * Set the body as having been completely read.
  66.289 +	 * This allows the connection to be cached.
  66.290 +	 */
  66.291 +	xfer->remaining_len -= len;
  66.292 +	assert (xfer->remaining_len == 0);
  66.293 +
  66.294 +	response = fdbuf_data (buf, NULL);
  66.295 +	fdbuf_release (buf);
  66.296 +
  66.297 +	if (HTTP_DEBUG)
  66.298 +		GT->DBGSOCK (GT, c, "body:\n%s", response);
  66.299 +
  66.300 +	input_remove (id);
  66.301 +
  66.302 +	/* perform an orderly close */
  66.303 +	gt_transfer_close (xfer, FALSE);
  66.304 +}
  66.305 +
  66.306 +static time_t queue_interval (time_t interval)
  66.307 +{
  66.308 +	/*
  66.309 +	 * HACK: giftd will retry the queued download every 49 seconds,
  66.310 +	 * so round the next retry time to coincide with that interval.
  66.311 +	 */
  66.312 +	if (interval > 49)
  66.313 +		interval = (interval / 49 + 1) * 49;
  66.314 +
  66.315 +	return interval;
  66.316 +}
  66.317 +
  66.318 +/*****************************************************************************/
  66.319 +
  66.320 +/* set the next time to retry from the Retry-After: header */
  66.321 +static void set_retry_after (GtTransfer *xfer)
  66.322 +{
  66.323 +	int          seconds;
  66.324 +	char        *retry_after;
  66.325 +	GtSource    *gt;
  66.326 +#if 0
  66.327 +	char        *msg;
  66.328 +	struct tm   *tm;
  66.329 +#endif
  66.330 +
  66.331 +	if (!(retry_after = dataset_lookupstr (xfer->header, "retry-after")))
  66.332 +		return;
  66.333 +
  66.334 +	/*
  66.335 +	 * This can be either a HTTP date or a number of seconds. We only
  66.336 +	 * support the number of seconds right now.
  66.337 +	 */
  66.338 +	seconds = ATOI (retry_after);
  66.339 +
  66.340 +	if (seconds <= 0)
  66.341 +		return;
  66.342 +
  66.343 +	if (!(gt = gt_transfer_get_source (xfer)))
  66.344 +		return;
  66.345 +
  66.346 +	/* set the retry time for the next download */
  66.347 +	gt->retry_time = time (NULL) + queue_interval (seconds);
  66.348 +
  66.349 +#if 0
  66.350 +	/* get the absolute time */
  66.351 +	tm = localtime (&gt->retry_time);
  66.352 +
  66.353 +	/* let the user know when we are going to retry */
  66.354 +	msg = stringf_dup ("Queued (retry at %d:%02d:%02d)", tm->tm_hour,
  66.355 +	                   tm->tm_min, tm->tm_sec);
  66.356 +
  66.357 +	gt_transfer_status (xfer, SOURCE_QUEUED_REMOTE, msg);
  66.358 +	free (msg);
  66.359 +#endif
  66.360 +}
  66.361 +
  66.362 +/*
  66.363 + * Check for both the active-queueing style "X-Queue:" and PARQ-style
  66.364 + * "X-Queued:".
  66.365 + *
  66.366 + * We avoid having to parse the X-Queue: line in the PARQ case (which would
  66.367 + * be "1.0") by allowing X-Queued to override X-Queue.
  66.368 + */
  66.369 +static size_t find_queue_key (Dataset *header, const char *key)
  66.370 +{
  66.371 +	size_t  pos = 0;
  66.372 +	char   *val;
  66.373 +	char   *line0, *line;
  66.374 +	char   *active_queue_line;
  66.375 +	char   *parq_queue_line;
  66.376 +	char   *sep;
  66.377 +
  66.378 +	active_queue_line = dataset_lookupstr (header, "x-queue");
  66.379 +	parq_queue_line   = dataset_lookupstr (header, "x-queued");
  66.380 +
  66.381 +	if (!active_queue_line && !parq_queue_line)
  66.382 +		return 0;
  66.383 +
  66.384 +	line = active_queue_line;
  66.385 +	sep  = ", ";
  66.386 +
  66.387 +	if (parq_queue_line)
  66.388 +	{
  66.389 +		line = parq_queue_line;
  66.390 +		sep  = "; ";
  66.391 +	}
  66.392 +
  66.393 +	line0 = line = STRDUP (line);
  66.394 +
  66.395 +	while ((val = string_sep_set (&line, sep)))
  66.396 +	{
  66.397 +		char *str;
  66.398 +
  66.399 +		str = string_sep_set (&val, "= ");
  66.400 +
  66.401 +		if (!str || !val)
  66.402 +			continue;
  66.403 +
  66.404 +		if (!strcasecmp (str, key))
  66.405 +			pos = ATOI (val);
  66.406 +	}
  66.407 +
  66.408 +	free (line0);
  66.409 +	return pos;
  66.410 +}
  66.411 +
  66.412 +/* Create a message describing our position in the remote node's
  66.413 + * upload queue. */
  66.414 +static char *get_queue_status (GtTransfer *xfer, char *msg)
  66.415 +{
  66.416 +	size_t  len   = 0;
  66.417 +	size_t  pos   = 0;
  66.418 +
  66.419 +	pos = find_queue_key (xfer->header, "position");
  66.420 +	len = find_queue_key (xfer->header, "length");
  66.421 +
  66.422 +	msg = STRDUP (msg);
  66.423 +
  66.424 +	if (pos != 0)
  66.425 +	{
  66.426 +		free (msg);
  66.427 +
  66.428 +		if (len != 0)
  66.429 +			msg = stringf_dup ("Queued (%u/%u)", pos, len);
  66.430 +		else
  66.431 +			msg = stringf_dup ("Queued (position %u)", pos);
  66.432 +	}
  66.433 +
  66.434 +	return msg;
  66.435 +}
  66.436 +
  66.437 +/* set the next time to retry the download based on the X-Queue: field */
  66.438 +static void set_queue_status (GtTransfer *xfer)
  66.439 +{
  66.440 +	GtSource    *gt;
  66.441 +	char        *queue_line;
  66.442 +	int          poll_min;
  66.443 +
  66.444 +	if (!(gt = gt_transfer_get_source (xfer)))
  66.445 +		return;
  66.446 +
  66.447 +	if (!(queue_line = dataset_lookupstr (xfer->header, "x-queue")))
  66.448 +		return;
  66.449 +
  66.450 +	if ((poll_min = find_queue_key (xfer->header, "pollmin")) <= 0)
  66.451 +		return;
  66.452 +
  66.453 +	gt->retry_time = time (NULL) + queue_interval (poll_min);
  66.454 +}
  66.455 +
  66.456 +/*
  66.457 + * Try to read any content-body in the response, so that persistent
  66.458 + * HTTP can work correctly, which is really important for push downloads.
  66.459 + */
  66.460 +static void handle_http_error (GtTransfer *xfer, SourceStatus status,
  66.461 +                               char *status_txt)
  66.462 +{
  66.463 +	TCPC    *c;
  66.464 +	Chunk   *chunk;
  66.465 +	int      len         = 0;
  66.466 +	char    *content_len;
  66.467 +	char    *conn_hdr;
  66.468 +
  66.469 +	/* update the interface protocol with the error status of this xfer */
  66.470 +	status_txt = get_queue_status (xfer, status_txt);
  66.471 +	gt_transfer_status (xfer, status, status_txt);
  66.472 +
  66.473 +	free (status_txt);
  66.474 +
  66.475 +	c     = gt_transfer_get_tcpc  (xfer);
  66.476 +	chunk = gt_transfer_get_chunk (xfer);
  66.477 +
  66.478 +	/*
  66.479 +	 * Check for a Content-Length: field, and use that for the
  66.480 +	 * length of the response body, if any.
  66.481 +	 */
  66.482 +	content_len = dataset_lookupstr (xfer->header, "content-length");
  66.483 +	conn_hdr    = dataset_lookupstr (xfer->header, "connection");
  66.484 +
  66.485 +	/* look at the Retry-After: header and set download retry time */
  66.486 +	set_retry_after (xfer);
  66.487 +
  66.488 +	/* parse the X-Queue: and X-Queued: headers for the queue position/
  66.489 +	 * retry time */
  66.490 +	set_queue_status (xfer);
  66.491 +
  66.492 +	/*
  66.493 +	 * Don't read the body if they supplied "Connection: Close".
  66.494 +	 * Close if the HTTP version is 1.0 (TODO: this should
  66.495 +	 * not close 1.0 connections if they supplied Connection:
  66.496 +	 * Keep-Alive, I guess)
  66.497 +	 */
  66.498 +	if (!STRCASECMP (xfer->version, "HTTP/1.0") ||
  66.499 +	    !STRCASECMP (xfer->version, "HTTP") ||
  66.500 +	    !STRCASECMP (conn_hdr, "close"))
  66.501 +	{
  66.502 +		gt_transfer_close (xfer, TRUE);
  66.503 +		return;
  66.504 +	}
  66.505 +
  66.506 +	if (content_len)
  66.507 +		len = ATOUL (content_len);
  66.508 +
  66.509 +	/* abuse xfer->{start,stop} fields for the length of the response body */
  66.510 +	xfer->start = 0;
  66.511 +	xfer->stop  = len;
  66.512 +
  66.513 +	/* set this flag to let gt_transfer_close() know the headers
  66.514 +	 * have been parsed */
  66.515 +	xfer->transmitted_hdrs = TRUE;
  66.516 +
  66.517 +	/* set the length so that if the connection times out, it will be
  66.518 +	 * force closed when we havent read the entire body */
  66.519 +	xfer->remaining_len = len;
  66.520 +
  66.521 +	/* if there is no length to read, we are done */
  66.522 +	if (len == 0)
  66.523 +	{
  66.524 +		gt_transfer_close (xfer, FALSE);
  66.525 +		return;
  66.526 +	}
  66.527 +
  66.528 +	input_remove_all (c->fd);
  66.529 +	input_add (c->fd, xfer, INPUT_READ,
  66.530 +	           (InputCallback)read_response_body, TIMEOUT_DEF);
  66.531 +}
  66.532 +
  66.533 +/*****************************************************************************/
  66.534 +
  66.535 +/*
  66.536 + * Process an HTTP return code (either client or server [push]) and attempt
  66.537 + * to appropriately handle/expunge the transfer structure accordingly.  The
  66.538 + * return value indicates whether or not we may continue after the code
  66.539 + * has been processed.  Some error codes (404) are considered fatal here
  66.540 + * and you should abort after this call.
  66.541 + *
  66.542 + * NOTE:
  66.543 + * If this function returns FALSE, the calling argument is free'd and you
  66.544 + * should not access it further.
  66.545 + */
  66.546 +int gt_http_handle_code (GtTransfer *xfer, int code)
  66.547 +{
  66.548 +	TCPC     *c;
  66.549 +	Chunk    *chunk;
  66.550 +	GtSource *gt;
  66.551 +
  66.552 +	/* successful code, do nothing */
  66.553 +	if (code >= 200 && code <= 299)
  66.554 +		return TRUE;
  66.555 +
  66.556 +	c     = gt_transfer_get_tcpc  (xfer);
  66.557 +	chunk = gt_transfer_get_chunk (xfer);
  66.558 +
  66.559 +	gt = gt_transfer_get_source (xfer);
  66.560 +	assert (gt != NULL);
  66.561 +
  66.562 +	/*
  66.563 +	 * We have to be careful not to access the transfer or any
  66.564 +	 * data related to it after calling p->source_abort, which
  66.565 +	 * will cancel the transfer.
  66.566 +	 */
  66.567 +	switch (code)
  66.568 +	{
  66.569 +	 default:
  66.570 +	 case 404:                     /* not found */
  66.571 +		{
  66.572 +			/*
  66.573 +			 * If this was a uri-res request, retry with an index request.
  66.574 +			 * Otherwise, remove the source.
  66.575 +			 *
  66.576 +			 * TODO: perhaps this should retry with url-encoded index
  66.577 +			 * request, before removing?
  66.578 +			 */
  66.579 +			if (gt->uri_res_failed)
  66.580 +			{
  66.581 +				GT->source_abort (GT, chunk->transfer, xfer->source);
  66.582 +			}
  66.583 +			else
  66.584 +			{
  66.585 +				handle_http_error (xfer, SOURCE_QUEUED_REMOTE,
  66.586 +				                   "File not found");
  66.587 +				gt->uri_res_failed = TRUE;
  66.588 +			}
  66.589 +		}
  66.590 +		break;
  66.591 +	 case 401:                     /* unauthorized */
  66.592 +		handle_http_error (xfer, SOURCE_CANCELLED, "Access denied");
  66.593 +		break;
  66.594 +	 case 503:                     /* remotely queued */
  66.595 +		handle_http_error (xfer, SOURCE_QUEUED_REMOTE, "Queued (Remotely)");
  66.596 +		break;
  66.597 +	 case 500:                     /* source may not match, check later */
  66.598 +		/*
  66.599 +		 * The remote node has reported that this file has changed
  66.600 +		 * since the last time we received results for it.  This more
  66.601 +		 * than likely indicates a hash change, in which case we should
  66.602 +		 * not keep this associated with this transfer.  Unfortunately,
  66.603 +		 * giFT fails to provide any sort of abstraction for us
  66.604 +		 * to remove sources ourselves, so we need this hopefully
  66.605 +		 * temporary hack to remove the source.
  66.606 +		 */
  66.607 +		GT->source_abort (GT, chunk->transfer, xfer->source);
  66.608 +		break;
  66.609 +	}
  66.610 +
  66.611 +	return FALSE;
  66.612 +}
  66.613 +
  66.614 +static int parse_content_range (char *range, off_t *r_start, off_t *r_end,
  66.615 +                                off_t *r_size)
  66.616 +{
  66.617 +	char *start, *end, *size;
  66.618 +
  66.619 +	string_sep (&range, "bytes");
  66.620 +	string_sep_set (&range, " ="); /* accept "bytes=" and "bytes " */
  66.621 +
  66.622 +	if (r_end)
  66.623 +		*r_end   = -1;
  66.624 +	if (r_start)
  66.625 +		*r_start = -1;
  66.626 +	if (r_size)
  66.627 +		*r_size  = -1;
  66.628 +
  66.629 +	if (!range)
  66.630 +		return FALSE;
  66.631 +
  66.632 +	start = string_sep (&range, "-");
  66.633 +	end   = string_sep (&range, "/");
  66.634 +	size  = range;
  66.635 +
  66.636 +	if (r_start && start)
  66.637 +		*r_start = ATOUL (start);
  66.638 +	if (r_end && end)
  66.639 +		*r_end   = ATOUL (end);
  66.640 +	if (r_size && size)
  66.641 +		*r_size  = ATOUL (size);
  66.642 +
  66.643 +	if (start && end && size)
  66.644 +		return TRUE;
  66.645 +
  66.646 +	return FALSE;
  66.647 +}
  66.648 +
  66.649 +static int verify_range_response (GtTransfer *xfer, Chunk *chunk)
  66.650 +{
  66.651 +	char    *user_agent;
  66.652 +	char    *content_range;
  66.653 +	char    *content_len;
  66.654 +	off_t    start, stop, size;
  66.655 +#if 0
  66.656 +	off_t    file_size;
  66.657 +#endif
  66.658 +	off_t    xfer_size;
  66.659 +	int      error = FALSE;
  66.660 +
  66.661 +#if 0
  66.662 +	file_size = chunk->transfer->total;
  66.663 +#endif
  66.664 +	xfer_size = xfer->stop - xfer->start;
  66.665 +
  66.666 +	if ((content_len = dataset_lookupstr (xfer->header, "content-length")))
  66.667 +	{
  66.668 +		size = ATOUL (content_len);
  66.669 +
  66.670 +		if (size != xfer_size)
  66.671 +		{
  66.672 +			GIFT_ERROR (("bad content len=%lu, expected %lu", size, xfer_size));
  66.673 +			error = TRUE;
  66.674 +			gt_transfer_status (xfer, SOURCE_CANCELLED, "Bad Content-Length");
  66.675 +		}
  66.676 +	}
  66.677 +
  66.678 +	if ((content_range = dataset_lookupstr (xfer->header, "content-range")))
  66.679 +	{
  66.680 +		if (HTTP_DEBUG)
  66.681 +		{
  66.682 +			GT->dbg (GT, "Content-Range: %s, start=%lu, stop=%lu",
  66.683 +			         content_range, chunk->start, chunk->stop);
  66.684 +		}
  66.685 +
  66.686 +		if (parse_content_range (content_range, &start, &stop, &size))
  66.687 +		{
  66.688 +			if (start != xfer->start)
  66.689 +			{
  66.690 +				GIFT_ERROR (("bad xfer start: %lu %lu", xfer->start, start));
  66.691 +				error = TRUE;
  66.692 +			}
  66.693 +			if (stop != xfer->stop - 1)
  66.694 +			{
  66.695 +				GIFT_ERROR (("bad xfer end: %lu %lu", xfer->stop, stop));
  66.696 +				error = TRUE;
  66.697 +			}
  66.698 +#if 0
  66.699 +			if (size != file_size)
  66.700 +			{
  66.701 +				GIFT_ERROR (("bad xfer size: %lu, expected %lu", file_size,
  66.702 +				             size));
  66.703 +				error = TRUE;
  66.704 +			}
  66.705 +#endif
  66.706 +		}
  66.707 +		else
  66.708 +		{
  66.709 +			GIFT_ERROR (("error parsing content-range hdr"));
  66.710 +			error = TRUE;
  66.711 +		}
  66.712 +	}
  66.713 +
  66.714 +	if (!content_len && !content_range)
  66.715 +	{
  66.716 +		if (!(user_agent = dataset_lookupstr (xfer->header, "Server")))
  66.717 +			user_agent = dataset_lookupstr (xfer->header, "User-Agent");
  66.718 +
  66.719 +		GIFT_ERROR (("missing Content-Range/Length, start=%lu, stop=%lu, "
  66.720 +		             "culprit=%s", xfer->start, xfer->stop, user_agent));
  66.721 +
  66.722 +		error = TRUE;
  66.723 +	}
  66.724 +
  66.725 +	if (error)
  66.726 +	{
  66.727 +		GT->DBGFN (GT, "removing source %s", chunk->source->url);
  66.728 +		GT->source_abort (GT, chunk->transfer, chunk->source);
  66.729 +		return FALSE;
  66.730 +	}
  66.731 +
  66.732 +	return TRUE;
  66.733 +}
  66.734 +
  66.735 +/*
  66.736 + * Receive and process the HTTP response
  66.737 + */
  66.738 +static void get_server_reply (int fd, input_id id, GtTransfer *xfer)
  66.739 +{
  66.740 +	Chunk         *chunk;
  66.741 +	TCPC          *c;
  66.742 +	GtSource      *gt;
  66.743 +	FDBuf         *buf;
  66.744 +	unsigned char *data;
  66.745 +	char          *msg;
  66.746 +	size_t         data_len = 0;
  66.747 +	int            n;
  66.748 +
  66.749 +	chunk = gt_transfer_get_chunk (xfer);
  66.750 +	c     = gt_transfer_get_tcpc  (xfer);
  66.751 +
  66.752 +	gt = gt_transfer_get_source (xfer);
  66.753 +
  66.754 +	buf = tcp_readbuf (c);
  66.755 +
  66.756 +	/* attempt to read the complete server response */
  66.757 +	if ((n = fdbuf_delim (buf, "\n")) < 0)
  66.758 +	{
  66.759 +		msg = "Timed out";
  66.760 +
  66.761 +		/*
  66.762 +		 * If the peer abruptly closed the connection, its possible it
  66.763 +		 * didn't understand our request if it was a uri-res request.
  66.764 +		 * So, disable uri-res in that case.
  66.765 +		 */
  66.766 +		if (fd != -1)
  66.767 +		{
  66.768 +			gt->uri_res_failed = TRUE;
  66.769 +			msg = "Connection closed";
  66.770 +		}
  66.771 +
  66.772 +		gt_transfer_status (xfer, SOURCE_CANCELLED, msg);
  66.773 +		gt_transfer_close (xfer, TRUE);
  66.774 +		return;
  66.775 +	}
  66.776 +
  66.777 +	if (gt_fdbuf_full (buf))
  66.778 +	{
  66.779 +		gt_transfer_close (xfer, TRUE);
  66.780 +		return;
  66.781 +	}
  66.782 +
  66.783 +	if (n > 0)
  66.784 +		return;
  66.785 +
  66.786 +	data = fdbuf_data (buf, &data_len);
  66.787 +
  66.788 +	if (!gt_http_header_terminated (data, data_len))
  66.789 +		return;
  66.790 +
  66.791 +	fdbuf_release (buf);
  66.792 +
  66.793 +	/* parse the server response */
  66.794 +	if (!parse_server_reply (xfer, c, data))
  66.795 +	{
  66.796 +		gt_transfer_status (xfer, SOURCE_CANCELLED, "Malformed HTTP header");
  66.797 +		gt_transfer_close (xfer, TRUE);
  66.798 +		return;
  66.799 +	}
  66.800 +
  66.801 +	/*
  66.802 +	 * NOTE: if we wanted to do any further processing of the server reply
  66.803 +	 * after GET /, this is where it would be
  66.804 +	 */
  66.805 +
  66.806 +	/* determine what to do with the HTTP code reply */
  66.807 +	if (!gt_http_handle_code (xfer, xfer->code))
  66.808 +		return;
  66.809 +
  66.810 +	/* make sure the server understood our "Range:" request */
  66.811 +	if (!verify_range_response (xfer, chunk))
  66.812 +		return;
  66.813 +
  66.814 +	/*
  66.815 +	 * Received HTTP headers, ...and now we are waiting for the file.  This
  66.816 +	 * should be a very short wait :)
  66.817 +	 */
  66.818 +	gt_transfer_status (xfer, SOURCE_WAITING, "Received HTTP headers");
  66.819 +	xfer->transmitted_hdrs = TRUE;
  66.820 +
  66.821 +	/* special case if the request size is 0 */
  66.822 +	if (xfer->remaining_len == 0)
  66.823 +	{
  66.824 +		gt_transfer_close (xfer, FALSE);
  66.825 +		return;
  66.826 +	}
  66.827 +
  66.828 +	/* disable the header read timeout */
  66.829 +	timer_remove_zero (&xfer->header_timer);
  66.830 +
  66.831 +	/* wait for the file to be sent by the server */
  66.832 +	input_remove (id);
  66.833 +	input_add (fd, xfer, INPUT_READ,
  66.834 +	           (InputCallback)gt_get_read_file, 0);
  66.835 +}
  66.836 +
  66.837 +/*
  66.838 + * Receive the requested file from the server.
  66.839 + */
  66.840 +void gt_get_read_file (int fd, input_id id, GtTransfer *xfer)
  66.841 +{
  66.842 +	TCPC         *c;
  66.843 +	Chunk        *chunk;
  66.844 +	char          buf[RW_BUFFER];
  66.845 +	size_t        size;
  66.846 +	int           recv_len;
  66.847 +
  66.848 +	c     = gt_transfer_get_tcpc  (xfer);
  66.849 +	chunk = gt_transfer_get_chunk (xfer);
  66.850 +
  66.851 +	/* set the max initial size of the request */
  66.852 +	size = sizeof (buf);
  66.853 +
  66.854 +	/*
  66.855 +	 * Cap the size of the received length at the length
  66.856 +	 * of the request.
  66.857 +	 *
  66.858 +	 * This way we can't receive part of the next request
  66.859 +	 * header with persistent HTTP.
  66.860 +	 */
  66.861 +	if (size > xfer->remaining_len)
  66.862 +		size = xfer->remaining_len;
  66.863 +
  66.864 +	/*
  66.865 +	 * Ask giFT for the max size we should read.  If this returns 0, the
  66.866 +	 * download was suspended.
  66.867 +	 */
  66.868 +	if ((size = download_throttle (chunk, size)) == 0)
  66.869 +		return;
  66.870 +
  66.871 +	if ((recv_len = tcp_recv (c, buf, size)) <= 0)
  66.872 +	{
  66.873 +		GT->DBGFN (GT, "tcp_recv error (%d) from %s:%hu: %s", recv_len,
  66.874 +		           net_ip_str (c->host), c->port,  GIFT_NETERROR());
  66.875 +
  66.876 +		gt_transfer_status (xfer, SOURCE_CANCELLED, "Cancelled remotely");
  66.877 +		gt_transfer_close (xfer, TRUE);
  66.878 +		return;
  66.879 +	}
  66.880 +
  66.881 +	/*
  66.882 +	 * We are receiving a file here, so this will always be calling
  66.883 +	 * gt_download.
  66.884 +	 */
  66.885 +	gt_transfer_write (xfer, chunk, buf, (size_t)recv_len);
  66.886 +}
  66.887 +
  66.888 +/*****************************************************************************/
  66.889 +
  66.890 +static void client_reset_timeout (int fd, input_id id, TCPC *c)
  66.891 +{
  66.892 +	/* normally we would call recv () here but there's no reason why the server
  66.893 +	 * should be sending stuff down to use...so, disconnect */
  66.894 +	if (HTTP_DEBUG)
  66.895 +		GT->DBGSOCK (GT, c, "closing client HTTP connection");
  66.896 +
  66.897 +	gt_http_connection_close (GT_TRANSFER_DOWNLOAD, c, TRUE);
  66.898 +}
  66.899 +
  66.900 +void gt_http_client_reset (TCPC *c)
  66.901 +{
  66.902 +	/* This can happen when the GtTransfer and TCPC have been decoupled,
  66.903 +	 * such as when we are waiting for a GIV response from a node. */
  66.904 +	if (!c)
  66.905 +		return;
  66.906 +
  66.907 +	tcp_flush (c, TRUE);
  66.908 +
  66.909 +	input_remove_all (c->fd);
  66.910 +	input_add (c->fd, c, INPUT_READ,
  66.911 +	           (InputCallback)client_reset_timeout, 2 * MINUTES);
  66.912 +}
    67.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    67.2 +++ b/src/gt_http_client.h	Sat Feb 20 21:18:28 2010 -0800
    67.3 @@ -0,0 +1,33 @@
    67.4 +/*
    67.5 + * $Id: gt_http_client.h,v 1.9 2004/01/18 05:40:56 hipnod Exp $
    67.6 + *
    67.7 + * Copyright (C) 2001-2003 giFT project (gift.sourceforge.net)
    67.8 + *
    67.9 + * This program is free software; you can redistribute it and/or modify it
   67.10 + * under the terms of the GNU General Public License as published by the
   67.11 + * Free Software Foundation; either version 2, or (at your option) any
   67.12 + * later version.
   67.13 + *
   67.14 + * This program is distributed in the hope that it will be useful, but
   67.15 + * WITHOUT ANY WARRANTY; without even the implied warranty of
   67.16 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
   67.17 + * General Public License for more details.
   67.18 + */
   67.19 +
   67.20 +#ifndef GIFT_GT_HTTP_CLIENT_H_
   67.21 +#define GIFT_GT_HTTP_CLIENT_H_
   67.22 +
   67.23 +/*****************************************************************************/
   67.24 +
   67.25 +void    gt_http_client_get     (Chunk *chunk, GtTransfer *xfer);
   67.26 +void    gt_http_client_push    (in_addr_t ip, in_port_t port,
   67.27 +                                char *request, off_t start, off_t stop);
   67.28 +void    gt_http_client_reset   (TCPC *c);
   67.29 +
   67.30 +int     gt_http_handle_code    (GtTransfer *xfer, int code);
   67.31 +void    gt_http_client_start   (int fd, input_id id, GtTransfer *xfer);
   67.32 +void    gt_get_read_file       (int fd, input_id id, GtTransfer *xfer);
   67.33 +
   67.34 +/*****************************************************************************/
   67.35 +
   67.36 +#endif /* GIFT_GT_HTTP_CLIENT_H_ */
    68.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    68.2 +++ b/src/gt_http_server.c	Sat Feb 20 21:18:28 2010 -0800
    68.3 @@ -0,0 +1,946 @@
    68.4 +/*
    68.5 + * $Id: gt_http_server.c,v 1.73 2005/01/04 15:03:40 mkern Exp $
    68.6 + *
    68.7 + * Copyright (C) 2001-2003 giFT project (gift.sourceforge.net)
    68.8 + *
    68.9 + * This program is free software; you can redistribute it and/or modify it
   68.10 + * under the terms of the GNU General Public License as published by the
   68.11 + * Free Software Foundation; either version 2, or (at your option) any
   68.12 + * later version.
   68.13 + *
   68.14 + * This program is distributed in the hope that it will be useful, but
   68.15 + * WITHOUT ANY WARRANTY; without even the implied warranty of
   68.16 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
   68.17 + * General Public License for more details.
   68.18 + */
   68.19 +
   68.20 +#include "gt_gnutella.h"
   68.21 +
   68.22 +#include "gt_xfer_obj.h"
   68.23 +#include "gt_xfer.h"
   68.24 +
   68.25 +#include "gt_http_server.h"
   68.26 +#include "gt_http_client.h"
   68.27 +
   68.28 +#include "gt_accept.h"
   68.29 +#include "gt_ban.h"
   68.30 +#include "gt_version.h"
   68.31 +
   68.32 +/*****************************************************************************/
   68.33 +
   68.34 +/* convenient shorthand */
   68.35 +#define CONTENT_URN_FIELD       "X-Gnutella-Content-URN"
   68.36 +
   68.37 +#define INCOMING_TIMEOUT        (1 * MINUTES)
   68.38 +
   68.39 +/*****************************************************************************/
   68.40 +
   68.41 +struct http_incoming
   68.42 +{
   68.43 +	TCPC     *c;
   68.44 +	timer_id  timer;
   68.45 +};
   68.46 +
   68.47 +/*****************************************************************************/
   68.48 +
   68.49 +static void server_handle_get    (GtTransfer *xfer);
   68.50 +static void get_client_request   (int fd, input_id id,
   68.51 +                                  struct http_incoming *http);
   68.52 +static void send_http_response   (int fd, input_id id, GtTransfer *xfer);
   68.53 +
   68.54 +/*****************************************************************************/
   68.55 +/* SERVER HELPERS */
   68.56 +
   68.57 +static char *lookup_http_code (int code, char **desc)
   68.58 +{
   68.59 +	char *err;
   68.60 +	char *txt;
   68.61 +
   68.62 +	switch (code)
   68.63 +	{
   68.64 +	 case 200: err = "OK";
   68.65 +		txt = "Success";
   68.66 +		break;
   68.67 +	 case 206: err = "Partial Content";
   68.68 +		txt = "Resume successful";
   68.69 +		break;
   68.70 +	 case 403: err = "Forbidden";
   68.71 +		txt = "You do not have access to this file";
   68.72 +		break;
   68.73 +	 case 404: err = "Not Found";
   68.74 +		txt = "File is not available";
   68.75 +		break;
   68.76 +	 case 500: err = "Internal Server Error";
   68.77 +		txt = "Stale file entry, retry later";
   68.78 +		break;
   68.79 +	 case 501: err = "Not Implemented";
   68.80 +		txt = "???";
   68.81 +		break;
   68.82 +	 case 503: err = "Service Unavailable";
   68.83 +		txt = "Upload queue is currently full, please try again later";
   68.84 +		break;
   68.85 +	 default:  err = NULL;
   68.86 +		txt = NULL;
   68.87 +		break;
   68.88 +	}
   68.89 +
   68.90 +	if (desc)
   68.91 +		*desc = txt;
   68.92 +
   68.93 +	return err;
   68.94 +}
   68.95 +
   68.96 +static String *alloc_header (int code)
   68.97 +{
   68.98 +	char   *code_text;
   68.99 +	String *s;
  68.100 +
  68.101 +	/* so that we can communicate both the numerical code and the human
  68.102 +	 * readable string */
  68.103 +	if (!(code_text = lookup_http_code (code, NULL)))
  68.104 +		return FALSE;
  68.105 +
  68.106 +	if (!(s = string_new (NULL, 0, 0, TRUE)))
  68.107 +		return FALSE;
  68.108 +
  68.109 +	string_appendf (s, "HTTP/1.1 %i %s\r\n", code, code_text);
  68.110 +
  68.111 +	return s;
  68.112 +}
  68.113 +
  68.114 +static void construct_header_va (String *s, int code, va_list args)
  68.115 +{
  68.116 +	char *key;
  68.117 +	char *value;
  68.118 +
  68.119 +	/* Add "Server: " header */
  68.120 +	string_appendf (s, "Server: %s\r\n", gt_version ());
  68.121 +
  68.122 +	for (;;)
  68.123 +	{
  68.124 +		if (!(key = va_arg (args, char *)))
  68.125 +			break;
  68.126 +
  68.127 +		if (!(value = va_arg (args, char *)))
  68.128 +			continue;
  68.129 +
  68.130 +		string_appendf (s, "%s: %s\r\n", key, value);
  68.131 +	}
  68.132 +
  68.133 +	/* append final message terminator */
  68.134 +	string_append (s, "\r\n");
  68.135 +}
  68.136 +
  68.137 +static String *construct_header (int code, ...)
  68.138 +{
  68.139 +	String *s;
  68.140 +	va_list args;
  68.141 +
  68.142 +	if (!(s = alloc_header (code)))
  68.143 +		return NULL;
  68.144 +
  68.145 +	va_start (args, code);
  68.146 +	construct_header_va (s, code, args);
  68.147 +	va_end (args);
  68.148 +
  68.149 +	return s;
  68.150 +}
  68.151 +
  68.152 +/*
  68.153 + * Construct and send a server reply.
  68.154 + */
  68.155 +static BOOL gt_http_server_send (TCPC *c, int code, ...)
  68.156 +{
  68.157 +	String *s;
  68.158 +	int     ret;
  68.159 +	size_t  len;
  68.160 +	va_list args;
  68.161 +
  68.162 +	if (!(s = alloc_header (code)))
  68.163 +		return FALSE;
  68.164 +
  68.165 +	va_start (args, code);
  68.166 +
  68.167 +	construct_header_va (s, code, args);
  68.168 +
  68.169 +	va_end (args);
  68.170 +
  68.171 +	if (HTTP_DEBUG)
  68.172 +		GT->DBGSOCK (GT, c, "sending reply to client =\n%s", s->str);
  68.173 +
  68.174 +	len = s->len;
  68.175 +	ret = tcp_send (c, s->str, s->len);
  68.176 +
  68.177 +	string_free (s);
  68.178 +
  68.179 +	return (ret == len);
  68.180 +}
  68.181 +
  68.182 +static char *get_error_page (GtTransfer *xfer, int code)
  68.183 +{
  68.184 +	char *page;
  68.185 +	char *err;
  68.186 +	char *errtxt = NULL;
  68.187 +
  68.188 +	if (!(err = lookup_http_code (code, &errtxt)))
  68.189 +		return 0;
  68.190 +
  68.191 +	page = stringf ("<h1>%i %s</h1><br>%s.", code, err, errtxt);
  68.192 +
  68.193 +	return page;
  68.194 +}
  68.195 +
  68.196 +static BOOL supports_queue (GtTransfer *xfer)
  68.197 +{
  68.198 +	char *features;
  68.199 +
  68.200 +	if (dataset_lookupstr (xfer->header, "x-queue"))
  68.201 +		return TRUE;
  68.202 +
  68.203 +	if ((features = dataset_lookupstr (xfer->header, "x-features")))
  68.204 +	{
  68.205 +		/* XXX: case-sensitive */
  68.206 +		if (strstr (features, "queue"))
  68.207 +			return TRUE;
  68.208 +	}
  68.209 +
  68.210 +	return FALSE;
  68.211 +}
  68.212 +
  68.213 +static char *get_queue_line (GtTransfer *xfer)
  68.214 +{
  68.215 +	String *s;
  68.216 +
  68.217 +	/* do nothing if not queued */
  68.218 +	if (xfer->queue_pos == 0)
  68.219 +		return NULL;
  68.220 +
  68.221 +	if (!(s = string_new (NULL, 0, 0, TRUE)))
  68.222 +		return NULL;
  68.223 +
  68.224 +	string_appendf (s, "position=%d,length=%d,pollMin=%d,pollMax=%d",
  68.225 +	                xfer->queue_pos, xfer->queue_ttl, 45, 120);
  68.226 +
  68.227 +	return string_free_keep (s);
  68.228 +}
  68.229 +
  68.230 +static String *get_error_header (GtTransfer *xfer, int code,
  68.231 +                                 const char *error_page)
  68.232 +{
  68.233 +	size_t  len;
  68.234 +	char    content_len[256];
  68.235 +	char   *queue_line      = NULL;
  68.236 +	char   *content_type    = "text/html";
  68.237 +	String *s;
  68.238 +
  68.239 +	len = strlen (error_page);
  68.240 +	snprintf (content_len, sizeof (content_len), "%u", len);
  68.241 +
  68.242 +	if (code == 503 && supports_queue (xfer))
  68.243 +		queue_line = get_queue_line (xfer);
  68.244 +
  68.245 +	/* don't send a content-type header if there is no entity body */
  68.246 +	if (len == 0)
  68.247 +		content_type = NULL;
  68.248 +
  68.249 +	s = construct_header (code,
  68.250 +	                      "Content-Type",    content_type,
  68.251 +	                      "Content-Length",  content_len,
  68.252 +	                      CONTENT_URN_FIELD, xfer->content_urns,
  68.253 +	                      "X-Queue",         queue_line,
  68.254 +	                      NULL);
  68.255 +
  68.256 +	free (queue_line);
  68.257 +	return s;
  68.258 +}
  68.259 +
  68.260 +static void send_error_reply (int fd, input_id id, GtTransfer *xfer)
  68.261 +{
  68.262 +	String     *s;
  68.263 +	const char *error_page;
  68.264 +	int         ret;
  68.265 +	TCPC       *c;
  68.266 +
  68.267 +	c = gt_transfer_get_tcpc (xfer);
  68.268 +
  68.269 +	if (!(error_page = get_error_page (xfer, xfer->code)))
  68.270 +	{
  68.271 +		gt_transfer_close (xfer, TRUE);
  68.272 +		return;
  68.273 +	}
  68.274 +
  68.275 +	/*
  68.276 +	 * If the remote end supports queueing or supplied
  68.277 +	 * "X-Gnutella-Content-URN",, it's a Gnutella client and we don't want to
  68.278 +	 * keep sending the error page, because over many requests from this
  68.279 +	 * client the bandwidth could add up.
  68.280 +	 */
  68.281 +	if (supports_queue (xfer) ||
  68.282 +	    dataset_lookupstr (xfer->header, "x-gnutella-content-urn"))
  68.283 +	{
  68.284 +		error_page = ""; /* empty */
  68.285 +	}
  68.286 +
  68.287 +	if (!(s = get_error_header (xfer, xfer->code, error_page)))
  68.288 +	{
  68.289 +		gt_transfer_close (xfer, TRUE);
  68.290 +		return;
  68.291 +	}
  68.292 +
  68.293 +	string_append (s, error_page);
  68.294 +
  68.295 +	if (HTTP_DEBUG)
  68.296 +		GT->DBGSOCK (GT, c, "sending reply to client =\n%s", s->str);
  68.297 +
  68.298 +	/* send the whole page at once */
  68.299 +	ret = tcp_send (c, s->str, s->len);
  68.300 +
  68.301 +	/* if the whole thing was sent keep the connection open */
  68.302 +	if (ret == s->len)
  68.303 +	{
  68.304 +		xfer->transmitted_hdrs = TRUE;
  68.305 +		xfer->remaining_len    = 0;
  68.306 +	}
  68.307 +
  68.308 +	string_free (s);
  68.309 +
  68.310 +	gt_transfer_close (xfer, FALSE);
  68.311 +}
  68.312 +
  68.313 +static void gt_http_server_send_error_and_close (GtTransfer *xfer, int code)
  68.314 +{
  68.315 +	TCPC *c;
  68.316 +
  68.317 +	c = gt_transfer_get_tcpc (xfer);
  68.318 +
  68.319 +	xfer->code = code;
  68.320 +
  68.321 +	input_remove_all (c->fd);
  68.322 +	input_add (c->fd, xfer, INPUT_WRITE,
  68.323 +	           (InputCallback)send_error_reply, TIMEOUT_DEF);
  68.324 +}
  68.325 +
  68.326 +/*****************************************************************************/
  68.327 +
  68.328 +/* parse the Range: bytes=0-10000 format */
  68.329 +static void parse_client_request_range (Dataset *dataset,
  68.330 +                                        off_t *r_start, off_t *r_stop)
  68.331 +{
  68.332 +	char         *range;
  68.333 +	off_t         start;
  68.334 +	off_t         stop;
  68.335 +
  68.336 +	if (!r_start && !r_stop)
  68.337 +		return;
  68.338 +
  68.339 +	if (r_start)
  68.340 +		*r_start = 0;
  68.341 +	if (r_stop)
  68.342 +		*r_stop = 0;
  68.343 +
  68.344 +	/* leave stop as 0 if we can't figure anything out yet.  This is expected
  68.345 +	 * to be handled separately by GET and PUSH */
  68.346 +	if (!(range = dataset_lookupstr (dataset, "range")))
  68.347 +		return;
  68.348 +
  68.349 +	/* WARNING: this butchers the data in the dataset! */
  68.350 +	string_sep     (&range, "bytes");
  68.351 +	string_sep_set (&range, " =");
  68.352 +
  68.353 +	if (!range)
  68.354 +	{
  68.355 +		if (HTTP_DEBUG)
  68.356 +			GT->DBGFN (GT, "error parsing Range: header");
  68.357 +
  68.358 +		return;
  68.359 +	}
  68.360 +
  68.361 +	start = (off_t) ATOI (string_sep (&range, "-"));
  68.362 +	stop  = (off_t) ATOI (string_sep (&range, " "));
  68.363 +
  68.364 +	/*
  68.365 +	 * The end of the range is optional (e.g. "Range: 0-"), and in that case
  68.366 +	 * stop == 0. In the case of a single byte file, stop == 1.
  68.367 +	 *
  68.368 +	 * TODO: this is broken for one-byte requests at the start of the file.
  68.369 +	 */
  68.370 +	if (stop > 0)
  68.371 +		stop = stop + 1;
  68.372 +
  68.373 +	if (r_start)
  68.374 +		*r_start = start;
  68.375 +	if (r_stop)
  68.376 +		*r_stop = stop;
  68.377 +}
  68.378 +
  68.379 +/*
  68.380 + * Parse requests of the forms:
  68.381 + *
  68.382 + *  /get/47/File maybe with spaces HTTP
  68.383 + *  /get/47/files_%20_url_encoded HTTP/1.1
  68.384 + *  /uri-res/N2R?urn:sha1:ABCD HTTP/1.0
  68.385 + *
  68.386 + * and combinations thereof. The "HTTP" trailer is mandatory.
  68.387 + */
  68.388 +static void get_request_and_version (char *data, char **request,
  68.389 +                                     char **version)
  68.390 +{
  68.391 +	size_t  len;
  68.392 +	char   *next;
  68.393 +	char   *dup;
  68.394 +	char   *http_version = NULL;
  68.395 +
  68.396 +	*request = NULL;
  68.397 +	*version = NULL;
  68.398 +
  68.399 +	/* trim whitespace inbetween command and request */
  68.400 +	string_trim (data);
  68.401 +
  68.402 +	if (!(dup = STRDUP (data)))
  68.403 +		return;
  68.404 +
  68.405 +	string_upper (dup);
  68.406 +
  68.407 +	next = dup;
  68.408 +
  68.409 +	/* find the last instance of "HTTP" in the string */
  68.410 +	while ((next = strstr (next, "HTTP")))
  68.411 +	{
  68.412 +		http_version = next;
  68.413 +		next += sizeof ("HTTP") - 1;
  68.414 +	}
  68.415 +
  68.416 +	/* the rest of the string must be the request */
  68.417 +	if (http_version != NULL && http_version != dup)
  68.418 +	{
  68.419 +		len = http_version - dup;
  68.420 +		data[len - 1] = 0;
  68.421 +
  68.422 +		*request = data;
  68.423 +		*version = data + len;
  68.424 +	}
  68.425 +
  68.426 +	free (dup);
  68.427 +}
  68.428 +
  68.429 +/*
  68.430 + * Break down the clients HTTP request
  68.431 + */
  68.432 +static int parse_client_request (Dataset **r_dataset, char **r_command,
  68.433 +								 char **r_request, char **r_version,
  68.434 +								 off_t *r_start, off_t *r_stop, char *hdr)
  68.435 +{
  68.436 +	Dataset *dataset = NULL;
  68.437 +	char    *command; /* GET */
  68.438 +	char    *request; /* /file.tar.gz */
  68.439 +	char    *version; /* HTTP/1.1 */
  68.440 +	char    *req_line;
  68.441 +
  68.442 +	if (!hdr)
  68.443 +		return FALSE;
  68.444 +
  68.445 +	/*
  68.446 +	 * Get the first line of the request
  68.447 +	 */
  68.448 +	req_line = string_sep_set (&hdr, "\r\n");
  68.449 +
  68.450 +	/* get the command (GET, HEAD, etc.) */
  68.451 +	command = string_sep (&req_line, " ");
  68.452 +
  68.453 +	/*
  68.454 +	 * Handle non-url-encoded requests as well as encoded
  68.455 +	 * ones and get the request and version from this HTTP line.
  68.456 +	 */
  68.457 +	get_request_and_version (req_line, &request, &version);
  68.458 +
  68.459 +	if (HTTP_DEBUG)
  68.460 +	{
  68.461 +		GT->DBGFN (GT, "command=%s version=%s request=%s",
  68.462 +		           command, version, request);
  68.463 +	}
  68.464 +
  68.465 +	if (!request || string_isempty (request))
  68.466 +		return FALSE;
  68.467 +
  68.468 +	if (r_command)
  68.469 +		*r_command = command;
  68.470 +	if (r_request)
  68.471 +		*r_request = request;
  68.472 +	if (r_version)
  68.473 +		*r_version = version;
  68.474 +
  68.475 +	gt_http_header_parse (hdr, &dataset);
  68.476 +
  68.477 +	if (r_dataset)
  68.478 +		*r_dataset = dataset;
  68.479 +
  68.480 +	/* handle Range: header */
  68.481 +	parse_client_request_range (dataset, r_start, r_stop);
  68.482 +
  68.483 +	if (r_start && r_stop)
  68.484 +	{
  68.485 +		if (HTTP_DEBUG)
  68.486 +			GT->dbg (GT, "range: [%i, %i)", *r_start, *r_stop);
  68.487 +	}
  68.488 +
  68.489 +	return TRUE;
  68.490 +}
  68.491 +
  68.492 +/*****************************************************************************/
  68.493 +
  68.494 +/*
  68.495 + * Send the request reply back to the client
  68.496 + *
  68.497 + * NOTE:
  68.498 + * This is used by both GET / and PUSH /
  68.499 + */
  68.500 +static void reply_to_client_request (GtTransfer *xfer)
  68.501 +{
  68.502 +	TCPC       *c;
  68.503 +	Chunk      *chunk;
  68.504 +	off_t       entity_size;
  68.505 +	char        range[128];
  68.506 +	char        length[32];
  68.507 +	BOOL        ret;
  68.508 +
  68.509 +	if (!xfer)
  68.510 +		return;
  68.511 +
  68.512 +	c     = gt_transfer_get_tcpc  (xfer);
  68.513 +	chunk = gt_transfer_get_chunk (xfer);
  68.514 +
  68.515 +	/*
  68.516 +	 * Determine the "total" entity body that we have locally, not necessarily
  68.517 +	 * the data that we are uploading.  HTTP demands this, but OpenFT really
  68.518 +	 * doesn't give a shit.
  68.519 +	 *
  68.520 +	 * NOTE:
  68.521 +	 * This only works to standard when operating on a GET / request, PUSH's
  68.522 +	 * merely use the range!
  68.523 +	 */
  68.524 +	if (xfer->open_path_size)
  68.525 +		entity_size = xfer->open_path_size;
  68.526 +	else
  68.527 +		entity_size = xfer->stop - xfer->start;
  68.528 +
  68.529 +	/* NOTE: we are "working" around the fact that HTTP's Content-Range
  68.530 +	 * reply is inclusive for the last byte, whereas giFT's is not. */
  68.531 +	snprintf (range, sizeof (range) - 1, "bytes %i-%i/%i",
  68.532 +	          (int) xfer->start, (int) (xfer->stop - 1), (int) entity_size);
  68.533 +
  68.534 +	snprintf (length, sizeof (length) - 1, "%i",
  68.535 +	          (int) (xfer->stop - xfer->start));
  68.536 +
  68.537 +	ret = gt_http_server_send (c, xfer->code,
  68.538 +	                           "Content-Range",   range,
  68.539 +	                           "Content-Length",  length,
  68.540 +	                           "Content-Type",    xfer->content_type,
  68.541 +	                           CONTENT_URN_FIELD, xfer->content_urns,
  68.542 +	                           NULL);
  68.543 +
  68.544 +	/* if we transmitted all headers successfully, set transmitted_hdrs
  68.545 +	 * to keep the connection alive, possibly */
  68.546 +	if (ret)
  68.547 +		xfer->transmitted_hdrs = TRUE;
  68.548 +}
  68.549 +
  68.550 +/*****************************************************************************/
  68.551 +
  68.552 +static void http_incoming_free (struct http_incoming *incoming)
  68.553 +{
  68.554 +	timer_remove (incoming->timer);
  68.555 +	free (incoming);
  68.556 +}
  68.557 +
  68.558 +static void http_incoming_close (struct http_incoming *incoming)
  68.559 +{
  68.560 +	gt_http_connection_close (GT_TRANSFER_UPLOAD, incoming->c, TRUE);
  68.561 +	http_incoming_free (incoming);
  68.562 +}
  68.563 +
  68.564 +static BOOL http_incoming_timeout (struct http_incoming *incoming)
  68.565 +{
  68.566 +	http_incoming_close (incoming);
  68.567 +	return FALSE;
  68.568 +}
  68.569 +
  68.570 +static struct http_incoming *http_incoming_alloc (TCPC *c)
  68.571 +{
  68.572 +	struct http_incoming *incoming;
  68.573 +
  68.574 +	incoming = malloc (sizeof (struct http_incoming));
  68.575 +	if (!incoming)
  68.576 +		return NULL;
  68.577 +
  68.578 +	incoming->c = c;
  68.579 +	incoming->timer = timer_add (INCOMING_TIMEOUT,
  68.580 +	                             (TimerCallback)http_incoming_timeout,
  68.581 +	                             incoming);
  68.582 +
  68.583 +	return incoming;
  68.584 +}
  68.585 +
  68.586 +void gt_http_server_dispatch (int fd, input_id id, TCPC *c)
  68.587 +{
  68.588 +	struct http_incoming *incoming;
  68.589 +
  68.590 +	if (net_sock_error (c->fd))
  68.591 +	{
  68.592 +		gt_http_connection_close (GT_TRANSFER_UPLOAD, c, TRUE);
  68.593 +		return;
  68.594 +	}
  68.595 +
  68.596 +	if (!(incoming = http_incoming_alloc (c)))
  68.597 +	{
  68.598 +		gt_http_connection_close (GT_TRANSFER_UPLOAD, c, TRUE);
  68.599 +		return;
  68.600 +	}
  68.601 +
  68.602 +	/* keep track of this incoming connection */
  68.603 +	/* gt_http_connection_insert (GT_TRANSFER_UPLOAD, c); */
  68.604 +
  68.605 +	input_remove (id);
  68.606 +	input_add (c->fd, incoming, INPUT_READ,
  68.607 +	           (InputCallback)get_client_request, 0);
  68.608 +}
  68.609 +
  68.610 +/*
  68.611 + * Handle the client's GET commands.
  68.612 + */
  68.613 +static void get_client_request (int fd, input_id id, struct http_incoming *http)
  68.614 +{
  68.615 +	GtTransfer    *xfer;
  68.616 +	TCPC          *c;
  68.617 +	Dataset       *dataset = NULL;
  68.618 +	char          *command = NULL;
  68.619 +	char          *request = NULL;
  68.620 +	char          *version = NULL;
  68.621 +	off_t          start   = 0;
  68.622 +	off_t          stop    = 0;
  68.623 +	FDBuf         *buf;
  68.624 +	unsigned char *data;
  68.625 +	size_t         data_len = 0;
  68.626 +	int            n;
  68.627 +
  68.628 +	c = http->c;
  68.629 +	buf = tcp_readbuf (c);
  68.630 +
  68.631 +	if ((n = fdbuf_delim (buf, "\n")) < 0)
  68.632 +	{
  68.633 +		http_incoming_close (http);
  68.634 +		return;
  68.635 +	}
  68.636 +
  68.637 +	if (gt_fdbuf_full (buf))
  68.638 +	{
  68.639 +		http_incoming_close (http);
  68.640 +		return;
  68.641 +	}
  68.642 +
  68.643 +	if (n > 0)
  68.644 +		return;
  68.645 +
  68.646 +	data = fdbuf_data (buf, &data_len);
  68.647 +
  68.648 +	if (!gt_http_header_terminated (data, data_len))
  68.649 +		return;
  68.650 +
  68.651 +	fdbuf_release (buf);
  68.652 +
  68.653 +	if (HTTP_DEBUG)
  68.654 +		GT->DBGSOCK (GT, c, "client request:\n%s", data);
  68.655 +
  68.656 +	/* parse the client's request and determine how we should proceed */
  68.657 +	if (!parse_client_request (&dataset, &command, &request, &version,
  68.658 +	                           &start, &stop, data))
  68.659 +	{
  68.660 +		GT->DBGSOCK (GT, c, "invalid http header");
  68.661 +		http_incoming_close (http);
  68.662 +		return;
  68.663 +	}
  68.664 +
  68.665 +	/* discard incoming connection timeout maintainance structure */
  68.666 +	http_incoming_free (http);
  68.667 +
  68.668 +	/*
  68.669 +	 * We have enough information now to actually allocate the transfer
  68.670 +	 * structure and pass it along to all logic that follows this
  68.671 +	 *
  68.672 +	 * NOTE:
  68.673 +	 * Each individual handler can determine when it wants to let giFT
  68.674 +	 * in on this
  68.675 +	 */
  68.676 +	xfer = gt_transfer_new (GT_TRANSFER_UPLOAD, NULL,
  68.677 +	                        net_peer (c->fd), 0, start, stop);
  68.678 +
  68.679 +	/* connect the connection and the xfer in unholy matrimony */
  68.680 +	gt_transfer_set_tcpc (xfer, c);
  68.681 +
  68.682 +	/* assign all our own memory */
  68.683 +	xfer->command = STRDUP (command);
  68.684 +	xfer->header  = dataset;
  68.685 +	xfer->version = STRDUP (version);
  68.686 +
  68.687 +	if (!gt_transfer_set_request (xfer, request))
  68.688 +	{
  68.689 +		if (HTTP_DEBUG)
  68.690 +			GT->DBGSOCK (GT, c, "invalid request \"s\"", request);
  68.691 +
  68.692 +		gt_transfer_close (xfer, TRUE);
  68.693 +		return;
  68.694 +	}
  68.695 +
  68.696 +	/* no need for this function again */
  68.697 +	input_remove (id);
  68.698 +
  68.699 +	/* figure out how to handle this request */
  68.700 +	if (!strcasecmp (xfer->command, "GET") ||
  68.701 +	    !strcasecmp (xfer->command, "HEAD"))
  68.702 +	{
  68.703 +		server_handle_get (xfer);
  68.704 +		return;
  68.705 +	}
  68.706 +
  68.707 +	gt_http_server_send_error_and_close (xfer, 501);
  68.708 +}
  68.709 +
  68.710 +/*****************************************************************************/
  68.711 +
  68.712 +static Transfer *start_upload (GtTransfer *xfer, Chunk **chunk)
  68.713 +{
  68.714 +	Transfer *transfer;
  68.715 +	char     *user;
  68.716 +
  68.717 +	user = net_ip_str (xfer->ip);
  68.718 +
  68.719 +	transfer = GT->upload_start (GT, chunk, user, xfer->share_authd,
  68.720 +	                             xfer->start, xfer->stop);
  68.721 +
  68.722 +	assert (transfer != NULL);
  68.723 +
  68.724 +	return transfer;
  68.725 +}
  68.726 +
  68.727 +/* setup the structure for uploading.  this will be called from within
  68.728 + * client space for PUSH requests as well */
  68.729 +int gt_server_setup_upload (GtTransfer *xfer)
  68.730 +{
  68.731 +	Transfer   *transfer;              /* giFT structure */
  68.732 +	Chunk      *chunk;
  68.733 +	TCPC       *c;
  68.734 +
  68.735 +	if (!xfer)
  68.736 +		return FALSE;
  68.737 +
  68.738 +	c = gt_transfer_get_tcpc (xfer);
  68.739 +	assert (xfer->chunk == NULL);
  68.740 +
  68.741 +	/*
  68.742 +	 * Ban the host if they don't have access -- this gives no information
  68.743 +	 * about whether we have the file or not, and i think this is in violation
  68.744 +	 * of the HTTP spec (supposed to return "404 not found" before 403, but
  68.745 +	 * i'm not sure.
  68.746 +	 */
  68.747 +	if (gt_ban_ipv4_is_banned (c->host))
  68.748 +	{
  68.749 +		xfer->code = 403;
  68.750 +		return FALSE;
  68.751 +	}
  68.752 +
  68.753 +	/* open the file that was requested before we go bringing giFT into
  68.754 +	 * this */
  68.755 +	if (!(xfer->f = gt_transfer_open_request (xfer, &xfer->code)))
  68.756 +		return FALSE;
  68.757 +
  68.758 +	/* assign stop a value before we proceed */
  68.759 +	if (xfer->stop == 0)
  68.760 +	{
  68.761 +		struct stat st;
  68.762 +
  68.763 +		if (!file_stat (xfer->open_path, &st) || st.st_size == 0)
  68.764 +		{
  68.765 +			/* stupid bastards have a 0 length file */
  68.766 +			GT->DBGSOCK (GT, c, "cannot satisfy %s: invalid share",
  68.767 +			             xfer->open_path);
  68.768 +			return FALSE;
  68.769 +		}
  68.770 +
  68.771 +		xfer->stop = st.st_size;
  68.772 +		xfer->remaining_len = xfer->stop - xfer->start;
  68.773 +	}
  68.774 +
  68.775 +	/* we can now be certain that we are handling a download request from
  68.776 +	 * the client.  allocate the appropriate structures to hook into giFT */
  68.777 +	if (!(transfer = start_upload (xfer, &chunk)))
  68.778 +	{
  68.779 +		GT->DBGFN (GT, "unable to register upload with the daemon");
  68.780 +		return FALSE;
  68.781 +	}
  68.782 +
  68.783 +	/* override 200 w/ 206 if the request is not the whole file size */
  68.784 +	if (xfer->remaining_len != xfer->share_authd->size)
  68.785 +		xfer->code = 206;
  68.786 +
  68.787 +	/* assign the circular references for passing the chunk along */
  68.788 +	gt_transfer_set_chunk (xfer, chunk);
  68.789 +
  68.790 +	/* finally, seek the file descriptor where it needs to be */
  68.791 +	fseek (xfer->f, xfer->start, SEEK_SET);
  68.792 +
  68.793 +	return TRUE;
  68.794 +}
  68.795 +
  68.796 +static void server_handle_get (GtTransfer *xfer)
  68.797 +{
  68.798 +	TCPC *c;
  68.799 +
  68.800 +	c = gt_transfer_get_tcpc (xfer);
  68.801 +	assert (xfer->chunk == NULL);
  68.802 +
  68.803 +	/* WARNING: this block is duplicated in http_client:client_push_request */
  68.804 +	if (!gt_server_setup_upload (xfer))
  68.805 +	{
  68.806 +		if (xfer->code == 200)
  68.807 +			xfer->code = 404;
  68.808 +
  68.809 +		gt_http_server_send_error_and_close (xfer, xfer->code);
  68.810 +		return;
  68.811 +	}
  68.812 +
  68.813 +	input_add (c->fd, xfer, INPUT_WRITE,
  68.814 +	           (InputCallback)send_http_response, TIMEOUT_DEF);
  68.815 +}
  68.816 +
  68.817 +static void send_http_response (int fd, input_id id, GtTransfer *xfer)
  68.818 +{
  68.819 +	TCPC *c;
  68.820 +
  68.821 +	c = gt_transfer_get_tcpc (xfer);
  68.822 +
  68.823 +	if (net_sock_error (c->fd))
  68.824 +	{
  68.825 +		gt_transfer_close (xfer, TRUE);
  68.826 +		return;
  68.827 +	}
  68.828 +
  68.829 +	/* ok, send client the header */
  68.830 +	reply_to_client_request (xfer);
  68.831 +
  68.832 +	if (!strcasecmp (xfer->command, "HEAD"))
  68.833 +	{
  68.834 +		gt_transfer_close (xfer, TRUE);
  68.835 +		return;
  68.836 +	}
  68.837 +
  68.838 +	/* disable header read timer */
  68.839 +	timer_remove_zero (&xfer->header_timer);
  68.840 +
  68.841 +	input_remove (id);
  68.842 +	input_add (c->fd, xfer, INPUT_WRITE,
  68.843 +			   (InputCallback)gt_server_upload_file, 0);
  68.844 +}
  68.845 +
  68.846 +/*
  68.847 + * Uploads the file requests
  68.848 + */
  68.849 +void gt_server_upload_file (int fd, input_id id, GtTransfer *xfer)
  68.850 +{
  68.851 +	TCPC        *c;
  68.852 +	Chunk       *chunk;
  68.853 +	char         buf[RW_BUFFER];
  68.854 +	size_t       read_len;
  68.855 +	size_t       size;
  68.856 +	int          sent_len = 0;
  68.857 +	off_t        remainder;
  68.858 +
  68.859 +	c     = gt_transfer_get_tcpc (xfer);
  68.860 +	chunk = gt_transfer_get_chunk (xfer);
  68.861 +
  68.862 +	assert (xfer->f != NULL);
  68.863 +
  68.864 +	/* number of bytes left to be uploaded by this chunk */
  68.865 +	if ((remainder = xfer->remaining_len) <= 0)
  68.866 +	{
  68.867 +		/* for whatever reason this function may have been called when we have
  68.868 +		 * already overrun the transfer...in that case we will simply fall
  68.869 +		 * through to the end-of-transfer condition */
  68.870 +		gt_transfer_write (xfer, chunk, NULL, 0);
  68.871 +		return;
  68.872 +	}
  68.873 +
  68.874 +	size = sizeof (buf);
  68.875 +
  68.876 +	if (size > remainder)
  68.877 +		size = remainder;
  68.878 +
  68.879 +	/*
  68.880 +	 * Ask giFT for the size we should send.  If this returns 0, the upload
  68.881 +	 * was suspended.
  68.882 +	 */
  68.883 +	if ((size = upload_throttle (chunk, size)) == 0)
  68.884 +		return;
  68.885 +
  68.886 +	/* read as much as we can from the local file */
  68.887 +	if (!(read_len = fread (buf, sizeof (char), size, xfer->f)))
  68.888 +	{
  68.889 +		GT->DBGFN (GT, "unable to read from %s: %s", xfer->open_path,
  68.890 +		           GIFT_STRERROR ());
  68.891 +		gt_transfer_status (xfer, SOURCE_CANCELLED, "Local read error");
  68.892 +		gt_transfer_close (xfer, TRUE);
  68.893 +		return;
  68.894 +	}
  68.895 +
  68.896 +	if ((sent_len = tcp_send (c, buf, MIN (read_len, remainder))) <= 0)
  68.897 +	{
  68.898 +		gt_transfer_status (xfer, SOURCE_CANCELLED,
  68.899 +		                    "Unable to send data block");
  68.900 +		gt_transfer_close (xfer, TRUE);
  68.901 +		return;
  68.902 +	}
  68.903 +
  68.904 +	/* check if the file was too small for the transfer TODO: this isn't
  68.905 +	 * checked earlier, but should be */
  68.906 +	if (read_len != size)
  68.907 +	{
  68.908 +		gt_transfer_status (xfer, SOURCE_CANCELLED, "Unexpected end of file");
  68.909 +		gt_transfer_close (xfer, TRUE);
  68.910 +		return;
  68.911 +	}
  68.912 +
  68.913 +	/*
  68.914 +	 * Check for short send(). This could use fseek(), but I have this
  68.915 +	 * growing feeling that using stdio everywhere is a bad idea.
  68.916 +	 */
  68.917 +	if (read_len != sent_len)
  68.918 +	{
  68.919 +		gt_transfer_status (xfer, SOURCE_CANCELLED, "Short send()");
  68.920 +		gt_transfer_close (xfer, TRUE);
  68.921 +		return;
  68.922 +	}
  68.923 +
  68.924 +	/*
  68.925 +	 * Call gt_upload to report back to giFT. This will also cancel
  68.926 +	 * the transfer if the upload has completed.
  68.927 +	 */
  68.928 +	gt_transfer_write (xfer, chunk, buf, sent_len);
  68.929 +}
  68.930 +
  68.931 +/*****************************************************************************/
  68.932 +
  68.933 +void gt_http_server_reset (TCPC *c)
  68.934 +{
  68.935 +	/*
  68.936 +	 * This can happen because the GtTransfer and TCPC can be decoupled, as in
  68.937 +	 * the case of a push request sent.
  68.938 +	 */
  68.939 +	if (!c)
  68.940 +		return;
  68.941 +
  68.942 +	/* finish all queued writes before we reset */
  68.943 +	tcp_flush (c, TRUE);
  68.944 +
  68.945 +	/* reset the input state */
  68.946 +	input_remove_all (c->fd);
  68.947 +	input_add (c->fd, c, INPUT_READ,
  68.948 +			   (InputCallback)gt_http_server_dispatch, 2 * MINUTES);
  68.949 +}
    69.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    69.2 +++ b/src/gt_http_server.h	Sat Feb 20 21:18:28 2010 -0800
    69.3 @@ -0,0 +1,32 @@
    69.4 +/*
    69.5 + * $Id: gt_http_server.h,v 1.7 2004/02/23 04:20:07 hipnod Exp $
    69.6 + *
    69.7 + * Copyright (C) 2001-2003 giFT project (gift.sourceforge.net)
    69.8 + *
    69.9 + * This program is free software; you can redistribute it and/or modify it
   69.10 + * under the terms of the GNU General Public License as published by the
   69.11 + * Free Software Foundation; either version 2, or (at your option) any
   69.12 + * later version.
   69.13 + *
   69.14 + * This program is distributed in the hope that it will be useful, but
   69.15 + * WITHOUT ANY WARRANTY; without even the implied warranty of
   69.16 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
   69.17 + * General Public License for more details.
   69.18 + */
   69.19 +
   69.20 +#ifndef GIFT_GT_HTTP_SERVER_H_
   69.21 +#define GIFT_GT_HTTP_SERVER_H_
   69.22 +
   69.23 +/*****************************************************************************/
   69.24 +
   69.25 +void    gt_http_server_incoming  (int fd, input_id id, TCPC *c);
   69.26 +
   69.27 +int     gt_server_setup_upload   (GtTransfer *xfer);
   69.28 +void    gt_server_upload_file    (int fd, input_id id, GtTransfer *xfer);
   69.29 +
   69.30 +void    gt_http_server_dispatch  (int fd, input_id id, TCPC *c);
   69.31 +void    gt_http_server_reset     (TCPC *c);
   69.32 +
   69.33 +/*****************************************************************************/
   69.34 +
   69.35 +#endif /* GIFT_GT_HTTP_SERVER_H_ */
    70.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    70.2 +++ b/src/gt_netorg.c	Sat Feb 20 21:18:28 2010 -0800
    70.3 @@ -0,0 +1,577 @@
    70.4 +/*
    70.5 + * $Id: gt_netorg.c,v 1.47 2005/01/04 15:00:51 mkern Exp $
    70.6 + *
    70.7 + * Copyright (C) 2001-2003 giFT project (gift.sourceforge.net)
    70.8 + *
    70.9 + * This program is free software; you can redistribute it and/or modify it
   70.10 + * under the terms of the GNU General Public License as published by the
   70.11 + * Free Software Foundation; either version 2, or (at your option) any
   70.12 + * later version.
   70.13 + *
   70.14 + * This program is distributed in the hope that it will be useful, but
   70.15 + * WITHOUT ANY WARRANTY; without even the implied warranty of
   70.16 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
   70.17 + * General Public License for more details.
   70.18 + */
   70.19 +
   70.20 +#include "gt_gnutella.h"
   70.21 +
   70.22 +#include "gt_node.h"
   70.23 +#include "gt_node_list.h"
   70.24 +#include "gt_netorg.h"
   70.25 +
   70.26 +#include "gt_connect.h"
   70.27 +#include "gt_accept.h"
   70.28 +
   70.29 +#include "gt_packet.h"
   70.30 +
   70.31 +#include "gt_node_cache.h"
   70.32 +#include "gt_web_cache.h"
   70.33 +
   70.34 +/*****************************************************************************/
   70.35 +
   70.36 +/* how often we check the network's condition */
   70.37 +#define MAINTAIN_INTERVAL         (10 * SECONDS)
   70.38 +
   70.39 +/* how often to check to disconnect idle nodes */
   70.40 +#define IDLE_DISCONNECT_INTERVAL  (2 * MINUTES)
   70.41 +
   70.42 +/* how often to trim the node list */
   70.43 +#define CLEANUP_INTERVAL          (15 * MINUTES)
   70.44 +
   70.45 +/* how often to clear indications of connecting to nodes */
   70.46 +#define RETRY_ALL_INTERVAL        (60 * MINUTES)
   70.47 +
   70.48 +/* maximum number of unreplied pings before disconnecting from a node */
   70.49 +#define MAX_UNREPLIED_PINGS       10
   70.50 +
   70.51 +/* how many connections attempts each maintain loop for nodes previously
   70.52 + * registered */
   70.53 +#define TRY_CONNECT_NODE_LIST     gt_config_get_int("connect/node_list=3")
   70.54 +
   70.55 +/* how many connection attempts for nodes in the pong cache */
   70.56 +#define TRY_CONNECT_NODE_CACHE    gt_config_get_int("connect/node_cache=7")
   70.57 +
   70.58 +/*****************************************************************************/
   70.59 +
   70.60 +/* timer for initiating/closing connections */
   70.61 +static timer_id   maintain_timer;
   70.62 +
   70.63 +/* timer for disconnecting connections */
   70.64 +static timer_id   disconnect_timer;
   70.65 +
   70.66 +/* timer for disconnecting idle nodes */
   70.67 +static timer_id   idle_disconnect_timer;
   70.68 +
   70.69 +/* timer for cleaning up the node list */
   70.70 +static timer_id   cleanup_timer;
   70.71 +
   70.72 +/* timer to clear 'tried' indicators to retry connecting */
   70.73 +static timer_id   retry_all_timer;
   70.74 +
   70.75 +/*****************************************************************************/
   70.76 +
   70.77 +static GtNode *node_disconnect_one (TCPC *c, GtNode *node, void *udata)
   70.78 +{
   70.79 +	GT->DBGFN (GT, "[%s]: disconnecting", net_ip_str (GT_NODE(c)->ip));
   70.80 +	gt_node_disconnect (c);
   70.81 +	return NULL;
   70.82 +}
   70.83 +
   70.84 +static GtNode *node_ping (TCPC *c, GtNode *node, GtPacket *packet)
   70.85 +{
   70.86 +	gt_packet_send (c, packet);
   70.87 +
   70.88 +	/* ->pings_with_noreply gets set to zero when the node sends a pong */
   70.89 +	if (gt_packet_ttl (packet) == 1)
   70.90 +		node->pings_with_noreply++;
   70.91 +
   70.92 +	return NULL;
   70.93 +}
   70.94 +
   70.95 +static void ping_hosts_ttl (uint8_t ttl)
   70.96 +{
   70.97 +	GtPacket  *packet;
   70.98 +
   70.99 +	if (!(packet = gt_packet_new (GT_MSG_PING, ttl, NULL)))
  70.100 +		return;
  70.101 +
  70.102 +	gt_conn_foreach (GT_CONN_FOREACH(node_ping), packet,
  70.103 +	                 GT_NODE_NONE, GT_NODE_CONNECTED, 0);
  70.104 +
  70.105 +	gt_packet_free (packet);
  70.106 +}
  70.107 +
  70.108 +static void ping_hosts (time_t now)
  70.109 +{
  70.110 +	static time_t last_ping;
  70.111 +	static time_t last_keep_alive;
  70.112 +	BOOL          need_connections;
  70.113 +	uint8_t       ttl;
  70.114 +
  70.115 +	need_connections = gt_conn_need_connections (GT_NODE_ULTRA);
  70.116 +
  70.117 +	if (now - last_ping < 30 * SECONDS && !need_connections)
  70.118 +		return;
  70.119 +
  70.120 +	last_ping = now;
  70.121 +
  70.122 +	/* ping to get more hosts if we need connections */
  70.123 +	if (now - last_keep_alive >= 1 * MINUTES)
  70.124 +	{
  70.125 +		/* do a keepalive */
  70.126 +		ttl = 1;
  70.127 +		last_keep_alive = now;
  70.128 +	}
  70.129 +	else
  70.130 +	{
  70.131 +		/* get more hosts */
  70.132 +		ttl = 7;
  70.133 +	}
  70.134 +
  70.135 +	ping_hosts_ttl (ttl);
  70.136 +}
  70.137 +
  70.138 +/*****************************************************************************/
  70.139 +
  70.140 +static void disconnect_no_query_route (void)
  70.141 +{
  70.142 +	int nr_supernodes;
  70.143 +
  70.144 +	/* only disconnect if theres other nodes to fallback on */
  70.145 +	nr_supernodes = gt_conn_length (GT_NODE_ULTRA, GT_NODE_CONNECTED);
  70.146 +
  70.147 +	if (nr_supernodes > 0)
  70.148 +	{
  70.149 +		gt_conn_foreach (node_disconnect_one, NULL,
  70.150 +		                 GT_NODE_LEAF, GT_NODE_CONNECTED, 0);
  70.151 +	}
  70.152 +}
  70.153 +
  70.154 +static void report_connected_leaf (int connected)
  70.155 +{
  70.156 +	static int last_connected = 0;
  70.157 +
  70.158 +	if (connected != last_connected)
  70.159 +	{
  70.160 +		GT->DBGFN (GT, "connected=%d nodes=%d", connected, 
  70.161 +		           gt_conn_length (GT_NODE_NONE, GT_NODE_ANY));
  70.162 +		last_connected = connected;
  70.163 +	}
  70.164 +}
  70.165 +
  70.166 +static int get_need_as_ultra (gt_node_class_t klass)
  70.167 +{
  70.168 +	switch (klass)
  70.169 +	{
  70.170 +	 case GT_NODE_ULTRA: return GT_PEER_CONNECTIONS;
  70.171 +	 case GT_NODE_LEAF:  return GT_LEAF_CONNECTIONS;
  70.172 +	 default:            return 0;
  70.173 +	}
  70.174 +}
  70.175 +
  70.176 +static int get_need_as_leaf (gt_node_class_t klass)
  70.177 +{
  70.178 +	switch (klass)
  70.179 +	{
  70.180 +	 case GT_NODE_ULTRA: return GT_SHIELDED_CONNECTIONS;
  70.181 +	 case GT_NODE_LEAF:  return 0; /* no leaf<->leaf connections allowed */
  70.182 +	 default:            return 0;
  70.183 +	}
  70.184 +}
  70.185 +
  70.186 +int gt_conn_need_connections (gt_node_class_t klass)
  70.187 +{
  70.188 +	int connected;
  70.189 +	int desired;
  70.190 +
  70.191 +	connected = gt_conn_length (klass, GT_NODE_CONNECTED);
  70.192 +
  70.193 +	/* don't call this with multiple classes -- the need of one
  70.194 +	 * class could cancel a surplus of the other */
  70.195 +	assert (klass == GT_NODE_ULTRA || klass == GT_NODE_LEAF);
  70.196 +
  70.197 +	if (GT_SELF->klass & GT_NODE_ULTRA)
  70.198 +		desired = get_need_as_ultra (klass);
  70.199 +	else
  70.200 +		desired = get_need_as_leaf (klass);
  70.201 +
  70.202 +	return desired - connected;
  70.203 +}
  70.204 +
  70.205 +static void disconnect_hosts (gt_node_class_t klass, int excess)
  70.206 +{
  70.207 +	int connected;
  70.208 +
  70.209 +	connected = gt_conn_length (klass, GT_NODE_CONNECTED);
  70.210 +
  70.211 +	GT->DBGFN (GT, "too many connections (%d)[%s], disconnecting %d", 
  70.212 +	           connected, gt_node_class_str (klass), excess);
  70.213 +
  70.214 +	while (excess-- > 0)
  70.215 +	{
  70.216 +		GtNode *node = gt_conn_random (klass, GT_NODE_CONNECTED);
  70.217 +
  70.218 +		/* TODO: send BYE message here */
  70.219 +
  70.220 +		assert (GT_CONN(node) != NULL);
  70.221 +		gt_node_disconnect (GT_CONN(node));
  70.222 +	}
  70.223 +}
  70.224 +
  70.225 +static BOOL disconnect_excess_timer (void *udata)
  70.226 +{
  70.227 +	int leaf_excess;
  70.228 +	int ultra_excess;
  70.229 +
  70.230 +	leaf_excess  = gt_conn_need_connections (GT_NODE_LEAF);
  70.231 +	ultra_excess = gt_conn_need_connections (GT_NODE_ULTRA);
  70.232 +
  70.233 +	if (leaf_excess < 0)
  70.234 +		disconnect_hosts (GT_NODE_LEAF, -leaf_excess);
  70.235 +
  70.236 +	if (ultra_excess < 0)
  70.237 +		disconnect_hosts (GT_NODE_ULTRA, -ultra_excess);
  70.238 +
  70.239 +	disconnect_timer = 0;
  70.240 +	return FALSE;
  70.241 +}
  70.242 +
  70.243 +static GtNode *collect_each_node (TCPC *c, GtNode *node, List **nodes)
  70.244 +{
  70.245 +	if (node->tried_connect)
  70.246 +		return NULL;
  70.247 +
  70.248 +	if (!node->gt_port)
  70.249 +		return NULL;
  70.250 +
  70.251 +	/* mark having tried to to connect to this node already */
  70.252 +	node->tried_connect = TRUE;
  70.253 +
  70.254 +	*nodes = list_append (*nodes, node);
  70.255 +
  70.256 +	/* stop iterating if we have enough nodes */
  70.257 +	if (list_length (*nodes) >= TRY_CONNECT_NODE_LIST)
  70.258 +		return node;
  70.259 +	
  70.260 +	return NULL;
  70.261 +}
  70.262 +
  70.263 +static GtNode *clear_try_bit (TCPC *c, GtNode *node, void *udata)
  70.264 +{
  70.265 +	node->tried_connect = FALSE;
  70.266 +	return NULL;
  70.267 +}
  70.268 +
  70.269 +static BOOL prune_registered (struct cached_node *cached, void *udata)
  70.270 +{
  70.271 +	if (gt_node_lookup (cached->addr.ip, cached->addr.port))
  70.272 +	{
  70.273 +		GT->DBGFN (GT, "pruning %s (already registered)", 
  70.274 +		           net_ip_str (cached->addr.ip), cached->addr.port);
  70.275 +		free (cached);
  70.276 +		return TRUE;
  70.277 +	}
  70.278 +
  70.279 +	return FALSE;
  70.280 +}
  70.281 +
  70.282 +static BOOL register_cached (struct cached_node *cached, void *udata)
  70.283 +{
  70.284 +	GtNode *node;
  70.285 +
  70.286 +	node = gt_node_lookup (cached->addr.ip, cached->addr.port);
  70.287 +
  70.288 +	if (node)
  70.289 +	{
  70.290 +		/* 
  70.291 +		 * Argh, gt_node_lookup only matches by IP 
  70.292 +		 * This should be assert (0)
  70.293 +		 */
  70.294 +		assert (node->gt_port != cached->addr.port);
  70.295 +
  70.296 +		free (cached);
  70.297 +		return TRUE;
  70.298 +	}
  70.299 +
  70.300 +	node = gt_node_register (cached->addr.ip, cached->addr.port,
  70.301 +	                         cached->klass);
  70.302 +
  70.303 +	/* we've got to free the node, Jim */
  70.304 +	free (cached);
  70.305 +
  70.306 +	/* this happens if the address is invalid or a mem failure */
  70.307 +	if (!node)
  70.308 +		return TRUE;
  70.309 +
  70.310 +	gt_connect (node);
  70.311 +	node->tried_connect = TRUE;
  70.312 +
  70.313 +	return TRUE;
  70.314 +}
  70.315 +
  70.316 +static BOOL connect_each (GtNode *node, void *udata)
  70.317 +{
  70.318 +	if (gt_connect (node) < 0)
  70.319 +	{
  70.320 +		GT->err (GT, "Failed to connect to node %s:%hu: %s",
  70.321 +		         net_ip_str (node->ip), node->gt_port, GIFT_NETERROR());
  70.322 +		return TRUE;
  70.323 +	}
  70.324 +
  70.325 +	return TRUE;
  70.326 +}
  70.327 +
  70.328 +/*****************************************************************************/
  70.329 +
  70.330 +/* returns number of nodes we will try to connect to */
  70.331 +static size_t try_some_nodes (time_t now)
  70.332 +{
  70.333 +	List    *nodes  = NULL;
  70.334 +	List    *cached = NULL;
  70.335 +	size_t   total  = 0;
  70.336 +	size_t   nr;
  70.337 +	size_t   len;
  70.338 +	size_t   count;
  70.339 +
  70.340 +	/* the total amount of nodes we should try */
  70.341 +	nr = TRY_CONNECT_NODE_LIST + TRY_CONNECT_NODE_CACHE;
  70.342 +
  70.343 +	/*
  70.344 +	 * Iterate the node (pong) cache and node list until we
  70.345 +	 * have seen 'nr' nodes or there are no more hosts to try.
  70.346 +	 */
  70.347 +
  70.348 +	while (total < nr)
  70.349 +	{
  70.350 +		gt_conn_foreach (GT_CONN_FOREACH(collect_each_node), &nodes,
  70.351 +		                 GT_NODE_NONE, GT_NODE_DISCONNECTED, 0);
  70.352 +
  70.353 +		/* grab at most nr - total nodes (still need to fix the preceeding
  70.354 +		 * call to gt_conn_foreach() to respect 'total') */
  70.355 +		count = MIN (nr - total, TRY_CONNECT_NODE_CACHE);
  70.356 +		assert (count >= 0);
  70.357 +
  70.358 +		cached = gt_node_cache_get_remove (count);
  70.359 +
  70.360 +		/* registered nodes can still slip into our node cache, argh */
  70.361 +		cached = list_foreach_remove (cached, 
  70.362 +		                              (ListForeachFunc)prune_registered,
  70.363 +		                              NULL);
  70.364 +
  70.365 +		len = list_length (nodes) + list_length (cached);
  70.366 +
  70.367 +		total += len;
  70.368 +
  70.369 +		if (len == 0)
  70.370 +			break;
  70.371 +		
  70.372 +		nodes = list_foreach_remove (nodes, (ListForeachFunc)connect_each, 
  70.373 +		                             NULL);
  70.374 +		assert (nodes == NULL);
  70.375 +
  70.376 +		cached = list_foreach_remove (cached, (ListForeachFunc)register_cached,
  70.377 +		                              NULL);
  70.378 +		assert (cached == NULL);
  70.379 +	}
  70.380 +
  70.381 +	return total;
  70.382 +}
  70.383 +
  70.384 +static void maintain_class (gt_node_class_t klass, time_t now)
  70.385 +{
  70.386 +	int   connected;
  70.387 +	int   need;
  70.388 +
  70.389 +	connected = gt_conn_length (klass, GT_NODE_CONNECTED);
  70.390 +	need      = gt_conn_need_connections (klass);
  70.391 +
  70.392 +	/* 
  70.393 +	 * print the number of nodes connected if it has changed 
  70.394 +	 * XXX: print leaves from ultrapeers and leaves too.
  70.395 +	 *      damn static variables to hell 
  70.396 +	 */
  70.397 +	if (klass == GT_NODE_ULTRA)
  70.398 +		report_connected_leaf (connected);
  70.399 +
  70.400 +	/* 0 == perfection */
  70.401 +	if (need == 0)
  70.402 +		return;
  70.403 +
  70.404 +	/* disconnect some nodes */
  70.405 +	if (need < 0)
  70.406 +	{
  70.407 +		if (disconnect_timer)
  70.408 +			return;
  70.409 +
  70.410 +		/* 
  70.411 +		 * Disconnect the node soon, because it could happen that 
  70.412 +		 * someone will disconnect from us first, causing cascading
  70.413 +		 * disconnects.
  70.414 +		 */
  70.415 +		GT->DBGFN (GT, "starting disconnect timer...");
  70.416 +		disconnect_timer = timer_add (4 * SECONDS, 
  70.417 +		                              (TimerCallback)disconnect_excess_timer, 
  70.418 +		                              NULL);
  70.419 +		return;
  70.420 +	}
  70.421 +
  70.422 +	/*
  70.423 +	 * If try_some_nodes() returns 0, then there are no nodes in the node
  70.424 +	 * cache nor any on the node list that we haven't tried yet. In that case,
  70.425 +	 * we need to contact the gwebcaches and hope a fresh infusion of nodes
  70.426 +	 * will help. While we wait, we retry all the nodes we already tried by
  70.427 +	 * clearing node->tried_connect for each node, which otherwise prevents
  70.428 +	 * from recontacting the nodes.
  70.429 +	 *
  70.430 +	 * We will "block" on the gwebcaches if the bandwidth is completely
  70.431 +	 * saturated and we can't get a reply from anyone, or if there are no
  70.432 +	 * ultrapeers with connection slots available. The gwebcache subsystem
  70.433 +	 * imposes its own limits on how often it will contact gwebcaches, so if
  70.434 +	 * we do end up in this situation, hopefully we will simply spend most of
  70.435 +	 * the time unconnected rather than hammering the gwebcaches.
  70.436 +	 */
  70.437 +	if (try_some_nodes (now) == 0)
  70.438 +	{
  70.439 +		size_t len;
  70.440 +
  70.441 +		len = gt_conn_length (GT_NODE_NONE, GT_NODE_ANY);
  70.442 +		GT->dbg (GT, "try_some_nodes() returned 0. node list len=%u", len);
  70.443 +
  70.444 +		if (connected == 0 || len < 20)
  70.445 +		{
  70.446 +			/* try to get more hosts */
  70.447 +			GT->dbg (GT, "No hosts to try. Looking in gwebcaches...");
  70.448 +			gt_web_cache_update ();
  70.449 +		}
  70.450 +
  70.451 +		GT->dbg (GT, "Retrying to connect to nodes...");
  70.452 +
  70.453 +		/* while we are waiting for the gwebcaches, try each node again */
  70.454 +		gt_conn_foreach (GT_CONN_FOREACH(clear_try_bit), NULL,
  70.455 +		                 GT_NODE_NONE, GT_NODE_ANY, 0);
  70.456 +
  70.457 +		return;
  70.458 +	}
  70.459 +}
  70.460 +
  70.461 +static GtNode *disconnect_no_ping_replies (TCPC *c, GtNode *node, void *udata)
  70.462 +{
  70.463 +	if (node->pings_with_noreply < MAX_UNREPLIED_PINGS)
  70.464 +		return NULL;
  70.465 +
  70.466 +	GT->DBGSOCK (GT, node->c, "%d unreplied pings. disconnecting",
  70.467 +	             node->pings_with_noreply);
  70.468 +
  70.469 +	gt_node_disconnect (c);
  70.470 +	return NULL;
  70.471 +}
  70.472 +
  70.473 +/*****************************************************************************/
  70.474 +
  70.475 +/*
  70.476 + * This is the main network maintainence function. All connections to the
  70.477 + * network are initiated from here.
  70.478 + */
  70.479 +static BOOL maintain (void *udata)
  70.480 +{
  70.481 +	time_t now;
  70.482 +
  70.483 +	now = time (NULL);
  70.484 +
  70.485 +	/* disconnect nodes without query routing if we are not a supernode */
  70.486 +	if (!(GT_SELF->klass & GT_NODE_ULTRA))
  70.487 +		disconnect_no_query_route ();
  70.488 +
  70.489 +#if 0
  70.490 +	trace_list (connections);
  70.491 +#endif
  70.492 +
  70.493 +	/*
  70.494 +	 * Send pings to all connected nodes. We used to do this only every
  70.495 +	 * minute, but because some nodes have short timeouts if they receive
  70.496 +	 * nothing from you, we now do it every MAINTAIN_INTERVAL.
  70.497 +	 */
  70.498 +	ping_hosts (now);
  70.499 +
  70.500 +	maintain_class (GT_NODE_ULTRA, now);
  70.501 +	maintain_class (GT_NODE_LEAF, now);
  70.502 +
  70.503 +	return TRUE;
  70.504 +}
  70.505 +
  70.506 +static BOOL idle_disconnect (void *udata)
  70.507 +{
  70.508 +	gt_conn_foreach (GT_CONN_FOREACH(disconnect_no_ping_replies), NULL,
  70.509 +	                 GT_NODE_NONE, GT_NODE_CONNECTED, 0);
  70.510 +	return TRUE;
  70.511 +}
  70.512 +
  70.513 +static BOOL cleanup (void *udata)
  70.514 +{
  70.515 +	/* trim excess nodes */
  70.516 +	gt_conn_trim ();
  70.517 +
  70.518 +	/* save to disk important nodes from the node list */
  70.519 +	gt_node_list_save ();
  70.520 +
  70.521 +	/* save to disk important nodes from the node cache */
  70.522 +	gt_node_cache_save ();
  70.523 +
  70.524 +	return TRUE;
  70.525 +}
  70.526 +
  70.527 +static BOOL retry_all (void *udata)
  70.528 +{
  70.529 +	/*
  70.530 +	 * Clear the 'tried' bit for all nodes, so if we start looking for nodes
  70.531 +	 * we try reconnecting to the ones we know about instead of contacting the
  70.532 +	 * gwebcaches.
  70.533 +	 *
  70.534 +	 * NOTE: should all the nodes be possibly retried (GT_NODE_ANY) or
  70.535 +	 * only those that are disconnected (GT_NODE_DISCONNECTED)?
  70.536 +	 */
  70.537 +	gt_conn_foreach (GT_CONN_FOREACH(clear_try_bit), NULL,
  70.538 +	                 GT_NODE_NONE, GT_NODE_ANY, 0);
  70.539 +
  70.540 +	return TRUE;
  70.541 +}
  70.542 +/*****************************************************************************/
  70.543 +
  70.544 +void gt_netorg_init (void)
  70.545 +{
  70.546 +	if (maintain_timer != 0)
  70.547 +		return;
  70.548 +
  70.549 +	/* load the node cache */
  70.550 +	gt_node_cache_init ();
  70.551 +
  70.552 +	/* setup the links maintain timer */
  70.553 +	maintain_timer = timer_add (MAINTAIN_INTERVAL,
  70.554 +	                            maintain, NULL);
  70.555 +
  70.556 +	idle_disconnect_timer = timer_add (IDLE_DISCONNECT_INTERVAL,
  70.557 +	                                   idle_disconnect, NULL);
  70.558 +
  70.559 +	cleanup_timer = timer_add (CLEANUP_INTERVAL,
  70.560 +	                           cleanup, NULL);
  70.561 +
  70.562 +	retry_all_timer = timer_add (RETRY_ALL_INTERVAL,
  70.563 +	                             retry_all, NULL);
  70.564 +
  70.565 +	/* call it now so we don't have to wait the first time */
  70.566 +	maintain (NULL);
  70.567 +}
  70.568 +
  70.569 +void gt_netorg_cleanup (void)
  70.570 +{
  70.571 +	/* save the node cache */
  70.572 +	gt_node_cache_cleanup ();
  70.573 +
  70.574 +	timer_remove_zero (&disconnect_timer);
  70.575 +
  70.576 +	timer_remove_zero (&maintain_timer);
  70.577 +	timer_remove_zero (&idle_disconnect_timer);
  70.578 +	timer_remove_zero (&cleanup_timer);
  70.579 +	timer_remove_zero (&retry_all_timer);
  70.580 +}
    71.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    71.2 +++ b/src/gt_netorg.h	Sat Feb 20 21:18:28 2010 -0800
    71.3 @@ -0,0 +1,48 @@
    71.4 +/*
    71.5 + * $Id: gt_netorg.h,v 1.16 2004/01/04 06:01:20 hipnod Exp $
    71.6 + *
    71.7 + * Copyright (C) 2001-2003 giFT project (gift.sourceforge.net)
    71.8 + *
    71.9 + * This program is free software; you can redistribute it and/or modify it
   71.10 + * under the terms of the GNU General Public License as published by the
   71.11 + * Free Software Foundation; either version 2, or (at your option) any
   71.12 + * later version.
   71.13 + *
   71.14 + * This program is distributed in the hope that it will be useful, but
   71.15 + * WITHOUT ANY WARRANTY; without even the implied warranty of
   71.16 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
   71.17 + * General Public License for more details.
   71.18 + */
   71.19 +
   71.20 +#ifndef GIFT_GT_NETORG_H_
   71.21 +#define GIFT_GT_NETORG_H_
   71.22 +
   71.23 +/*****************************************************************************/
   71.24 +
   71.25 +/* number of ultrapeers we try to maintain connections to if we are a leaf */
   71.26 +#define GT_SHIELDED_CONNECTIONS    gt_config_get_int("main/connections=3")
   71.27 +
   71.28 +/* number of leaf connections we will maintain as ultrapeer */
   71.29 +#define GT_LEAF_CONNECTIONS        gt_config_get_int("main/leaf_connections=0")
   71.30 +
   71.31 +/* number of ultrapeer<->ultrapeer connections we maintain if we're one */
   71.32 +#define GT_PEER_CONNECTIONS        gt_config_get_int("main/peer_connections=3")
   71.33 +
   71.34 +/* timeouts for connecting to nodes at different stages */
   71.35 +#define TIMEOUT_1                  gt_config_get_int("handshake/timeout1=20")
   71.36 +#define TIMEOUT_2                  gt_config_get_int("handshake/timeout2=40")
   71.37 +#define TIMEOUT_3                  gt_config_get_int("handshake/timeout3=60")
   71.38 +
   71.39 +/*****************************************************************************/
   71.40 +
   71.41 +/* return how many connections we need for the given node class */
   71.42 +int      gt_conn_need_connections (gt_node_class_t klass);
   71.43 +
   71.44 +/*****************************************************************************/
   71.45 +
   71.46 +void     gt_netorg_init      (void);
   71.47 +void     gt_netorg_cleanup   (void);
   71.48 +
   71.49 +/*****************************************************************************/
   71.50 +
   71.51 +#endif /* GIFT_GT_NETORG_H_ */
    72.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    72.2 +++ b/src/gt_node.c	Sat Feb 20 21:18:28 2010 -0800
    72.3 @@ -0,0 +1,459 @@
    72.4 +/*
    72.5 + * $Id: gt_node.c,v 1.59 2005/01/04 15:00:51 mkern Exp $
    72.6 + *
    72.7 + * Copyright (C) 2001-2003 giFT project (gift.sourceforge.net)
    72.8 + *
    72.9 + * This program is free software; you can redistribute it and/or modify it
   72.10 + * under the terms of the GNU General Public License as published by the
   72.11 + * Free Software Foundation; either version 2, or (at your option) any
   72.12 + * later version.
   72.13 + *
   72.14 + * This program is distributed in the hope that it will be useful, but
   72.15 + * WITHOUT ANY WARRANTY; without even the implied warranty of
   72.16 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
   72.17 + * General Public License for more details.
   72.18 + */
   72.19 +
   72.20 +#include "gt_gnutella.h"
   72.21 +
   72.22 +#include "gt_node.h"
   72.23 +#include "gt_node_list.h"
   72.24 +
   72.25 +#include "gt_utils.h"
   72.26 +
   72.27 +#include "gt_packet.h"
   72.28 +#include "gt_query_route.h"
   72.29 +#include "gt_share_state.h"
   72.30 +
   72.31 +#include "gt_node_cache.h"
   72.32 +
   72.33 +#include "io/rx_stack.h"            /* gt_rx_stack_free */
   72.34 +#include "io/tx_stack.h"            /* gt_tx_stack_free, gt_tx_stack_queue */
   72.35 +
   72.36 +#include "transfer/push_proxy.h"
   72.37 +
   72.38 +/*****************************************************************************/
   72.39 +
   72.40 +/* maps ids -> node, so we dont have to keep TCPC ptrs in
   72.41 + * various data structures */
   72.42 +static Dataset *node_ids;
   72.43 +
   72.44 +/*****************************************************************************/
   72.45 +
   72.46 +static void node_add (GtNode *node)
   72.47 +{
   72.48 +	if (!node_ids)
   72.49 +		node_ids = dataset_new (DATASET_HASH);
   72.50 +
   72.51 +	if (!node->ip)
   72.52 +		return;
   72.53 +
   72.54 +	dataset_insert (&node_ids, &node->ip, sizeof (node->ip), node, 0);
   72.55 +}
   72.56 +
   72.57 +static void node_remove (GtNode *node)
   72.58 +{
   72.59 +	if (!node)
   72.60 +		return;
   72.61 +
   72.62 +	if (!node->ip)
   72.63 +		return;
   72.64 +
   72.65 +	dataset_remove (node_ids, &node->ip, sizeof (node->ip));
   72.66 +}
   72.67 +
   72.68 +/*****************************************************************************/
   72.69 +
   72.70 +GtNode *gt_node_new ()
   72.71 +{
   72.72 +	GtNode *node;
   72.73 +
   72.74 +	if (!(node = MALLOC (sizeof (GtNode))))
   72.75 +		return NULL;
   72.76 +
   72.77 +	return node;
   72.78 +}
   72.79 +
   72.80 +static void free_node (GtNode *node)
   72.81 +{
   72.82 +	if (!node)
   72.83 +		return;
   72.84 +
   72.85 +	gt_node_disconnect (GT_CONN(node));
   72.86 +	gt_conn_remove (node);
   72.87 +
   72.88 +	free (node);
   72.89 +}
   72.90 +
   72.91 +/* NOTE: this isnt safe to call at all times */
   72.92 +void gt_node_free (GtNode *node)
   72.93 +{
   72.94 +	node_remove (node);
   72.95 +	free_node (node);
   72.96 +}
   72.97 +
   72.98 +/* set the node to use the TCP connection */
   72.99 +void gt_node_connect (GtNode *node, TCPC *c)
  72.100 +{
  72.101 +	assert (GT_CONN(node) == NULL);
  72.102 +	assert (GT_NODE(c) == NULL);
  72.103 +
  72.104 +	node->c = c;
  72.105 +	c->udata = node;
  72.106 +}
  72.107 +
  72.108 +/* put the node into some data structures to keep track of it */
  72.109 +static void track_node (GtNode *node, TCPC *c)
  72.110 +{
  72.111 +	if (node->ip)
  72.112 +		assert (node->ip == c->host);
  72.113 +
  72.114 +	/* fill in peer info (in network byte order) */
  72.115 +	node->ip = c->host;
  72.116 +	assert (node->ip != 0);
  72.117 +
  72.118 +	gt_conn_add (node);
  72.119 +	node_add (node);
  72.120 +}
  72.121 +
  72.122 +/* instantiate a node from an existing connection */
  72.123 +GtNode *gt_node_instantiate (TCPC *c)
  72.124 +{
  72.125 +	GtNode *node;
  72.126 +	BOOL    existed = FALSE;
  72.127 +
  72.128 +	if (!c || !c->host)
  72.129 +		return NULL;
  72.130 +
  72.131 +	/* TODO: We should really lookup the port in Listen-IP header, right? */
  72.132 +	node = gt_node_lookup (c->host, 0);
  72.133 +
  72.134 +	if (node)
  72.135 +	{
  72.136 +		existed = TRUE;
  72.137 +
  72.138 +		/* abort if already connected/connecting */
  72.139 +		if (node->state != GT_NODE_DISCONNECTED)
  72.140 +			return NULL;
  72.141 +	}
  72.142 +	else
  72.143 +	{
  72.144 +		if (!(node = gt_node_new ()))
  72.145 +			return NULL;
  72.146 +	}
  72.147 +
  72.148 +	assert (node->c == NULL);
  72.149 +
  72.150 +	/* attach this node to the connection and vice-versa */
  72.151 +	gt_node_connect (node, c);
  72.152 +
  72.153 +	if (!existed)
  72.154 +		track_node (node, c);
  72.155 +
  72.156 +	return node;
  72.157 +}
  72.158 +
  72.159 +static int free_one (ds_data_t *key, ds_data_t *value, void *udata)
  72.160 +{
  72.161 +	GtNode *node = value->data;
  72.162 +
  72.163 +	/* don't call gt_node_free here while iterating through the
  72.164 +	 * Dataset because it will cause us to miss items when the
  72.165 +	 * Dataset is resized */
  72.166 +	free_node (node);
  72.167 +
  72.168 +	return DS_CONTINUE | DS_REMOVE;
  72.169 +}
  72.170 +
  72.171 +void gt_node_remove_all (void)
  72.172 +{
  72.173 +	dataset_foreach_ex (node_ids, DS_FOREACH_EX(free_one), NULL);
  72.174 +	dataset_clear (node_ids);
  72.175 +	node_ids = NULL;
  72.176 +}
  72.177 +
  72.178 +BOOL gt_node_freeable (GtNode *node)
  72.179 +{
  72.180 +	time_t now;
  72.181 +
  72.182 +	if (node->state != GT_NODE_DISCONNECTED)
  72.183 +		return FALSE;
  72.184 +
  72.185 +	now = time (NULL);
  72.186 +
  72.187 +	/* keep hosts with whom we've had a connection for a good while */
  72.188 +	if (node->vitality > 0 && now - node->vitality <= 30 * EDAYS)
  72.189 +		return FALSE;
  72.190 +
  72.191 +	if (now - node->start_connect_time <= 30 * EMINUTES)
  72.192 +		return FALSE;
  72.193 +
  72.194 +	/* yeah, sure, free the node if you want */
  72.195 +	return TRUE;
  72.196 +}
  72.197 +
  72.198 +/*****************************************************************************/
  72.199 +
  72.200 +/*
  72.201 + * Check if this node supports the vendor message packet inside 'pkt',
  72.202 + * and then send the vendor message if so.
  72.203 + *
  72.204 + * The 'version' field of the VMSG is mangled to be the minimum supported
  72.205 + * by both this node and the remote end.
  72.206 + */
  72.207 +BOOL gt_node_send_if_supported (GtNode *node, GtPacket *pkt)
  72.208 +{
  72.209 +	gt_vendor_msg_t vmsg;
  72.210 +	unsigned char  *vendor;
  72.211 +	uint16_t        id;
  72.212 +	uint16_t        ver;
  72.213 +	uint16_t       *send_ver;
  72.214 +
  72.215 +	gt_packet_seek (pkt, GNUTELLA_HDR_LEN);
  72.216 +	vendor = gt_packet_get_ustr   (pkt, 4);
  72.217 +	id     = gt_packet_get_uint16 (pkt);
  72.218 +	ver    = gt_packet_get_uint16 (pkt);
  72.219 +
  72.220 +	if (gt_packet_error (pkt))
  72.221 +		return FALSE;
  72.222 +
  72.223 +	memset (&vmsg, 0, sizeof(vmsg));
  72.224 +	memcpy (&vmsg.vendor_id, vendor, 4);
  72.225 +	vmsg.id = id;
  72.226 +
  72.227 +	send_ver = dataset_lookup (node->vmsgs_supported, &vmsg, sizeof(vmsg));
  72.228 +	if (!send_ver)
  72.229 +		return FALSE;
  72.230 +
  72.231 +	/* XXX: we've no good facility for writing in the middle of the packet */
  72.232 +	memcpy (&pkt->data[GNUTELLA_HDR_LEN + VMSG_HDR_LEN - 2], send_ver, 2);
  72.233 +
  72.234 +	if (gt_packet_send (GT_CONN(node), pkt) < 0)
  72.235 +		return FALSE;
  72.236 +
  72.237 +	return TRUE;
  72.238 +}
  72.239 +
  72.240 +BOOL gt_node_send (GtNode *node, GtPacket *packet)
  72.241 +{
  72.242 +	/* don't queue the packet if the node isn't in a state to send it */
  72.243 +	if (!(node->state & (GT_NODE_CONNECTED | GT_NODE_CONNECTING_2)))
  72.244 +		return FALSE;
  72.245 +
  72.246 +	/* enable this at some point in the future */
  72.247 +#if 0
  72.248 +	assert (GT_CONN(node) != NULL);
  72.249 +#endif
  72.250 +	if (!GT_CONN(node) || GT_CONN(node)->fd < 0)
  72.251 +		return FALSE;
  72.252 +
  72.253 +	return gt_tx_stack_queue (node->tx_stack, packet->data, packet->len);
  72.254 +}
  72.255 +
  72.256 +/*****************************************************************************/
  72.257 +
  72.258 +GtNode *gt_node_lookup (in_addr_t ip, in_port_t port)
  72.259 +{
  72.260 +	return dataset_lookup (node_ids, &ip, sizeof (ip));
  72.261 +}
  72.262 +
  72.263 +GtNode *gt_node_register (in_addr_t ip, in_port_t port,
  72.264 +                          gt_node_class_t klass)
  72.265 +{
  72.266 +	GtNode *node;
  72.267 +
  72.268 +	if (GNUTELLA_LOCAL_MODE)
  72.269 +	{
  72.270 +		if (!net_match_host (ip, "LOCAL"))
  72.271 +			return NULL;
  72.272 +	}
  72.273 +
  72.274 +	if (!ip)
  72.275 +		return NULL;
  72.276 +
  72.277 +	/* TODO: there is probably a problem here if a node is already
  72.278 +	 *       connected and we're informed about it falsely some other way.  */
  72.279 +	if ((node = dataset_lookup (node_ids, &ip, sizeof (ip))))
  72.280 +	{
  72.281 +		if (klass != GT_NODE_NONE)
  72.282 +			gt_node_class_set (node, klass);
  72.283 +
  72.284 +		return node;
  72.285 +	}
  72.286 +
  72.287 +	if (!(node = gt_node_new ()))
  72.288 +		return NULL;
  72.289 +
  72.290 +	node->ip      = ip;
  72.291 +	node->gt_port = port;
  72.292 +
  72.293 +	node_add (node);
  72.294 +	gt_conn_add (node);
  72.295 +
  72.296 +	if (klass != GT_NODE_NONE)
  72.297 +		gt_node_class_set (node, klass);
  72.298 +
  72.299 +	/* remove this node from the node cache in order to keep the cache
  72.300 +	 * conherent with the node list */
  72.301 +	gt_node_cache_del_ipv4 (ip, port);
  72.302 +
  72.303 +	return node;
  72.304 +}
  72.305 +
  72.306 +void gt_node_error (TCPC *c, const char *fmt, ...)
  72.307 +{
  72.308 +	static char buf[4096];
  72.309 +	va_list     args;
  72.310 +
  72.311 +	assert (GT_CONN(GT_NODE(c)) == c);
  72.312 +
  72.313 +	if (!fmt)
  72.314 +	{
  72.315 +		GT->DBGSOCK (GT, c, "[%hu] error: %s", GT_NODE(c)->gt_port,
  72.316 +		             GIFT_NETERROR ());
  72.317 +		return;
  72.318 +	}
  72.319 +
  72.320 +	va_start (args, fmt);
  72.321 +	vsnprintf (buf, sizeof (buf) - 1, fmt, args);
  72.322 +	va_end (args);
  72.323 +
  72.324 +	GT->DBGSOCK (GT, c, "error: %s", buf);
  72.325 +}
  72.326 +
  72.327 +void gt_node_disconnect (TCPC *c)
  72.328 +{
  72.329 +	GtNode *node;
  72.330 +
  72.331 +	if (!c)
  72.332 +		return;
  72.333 +
  72.334 +	node = GT_NODE(c);
  72.335 +	assert (node->c == c);
  72.336 +
  72.337 +	/* remove node timers */
  72.338 +	timer_remove_zero (&node->handshake_timer);
  72.339 +	timer_remove_zero (&node->search_timer);
  72.340 +	timer_remove_zero (&node->query_route_timer);
  72.341 +
  72.342 +	/* destroy existing received buffers for this connection */
  72.343 +	gt_rx_stack_free (node->rx_stack);
  72.344 +	node->rx_stack = NULL;
  72.345 +
  72.346 +	/* destroy send buffers */
  72.347 +	gt_tx_stack_free (node->tx_stack);
  72.348 +	node->tx_stack = NULL;
  72.349 +
  72.350 +	/* remove the node from push proxy status */
  72.351 +	gt_push_proxy_del (node);
  72.352 +
  72.353 +	/* reset connection status flags */
  72.354 +	node->verified      = FALSE;
  72.355 +	node->firewalled    = FALSE;
  72.356 +	node->incoming      = FALSE;
  72.357 +	node->rx_inflated   = FALSE;
  72.358 +	node->tx_deflated   = FALSE;
  72.359 +	node->vmsgs_sent    = FALSE;
  72.360 +
  72.361 +	/* close the connection for this node, if any */
  72.362 +	tcp_close_null (&node->c);
  72.363 +
  72.364 +	node->pings_with_noreply = 0;
  72.365 +
  72.366 +	/* clear verification connection */
  72.367 +	tcp_close_null (&node->gt_port_verify);
  72.368 +
  72.369 +	free (node->ping_guid);
  72.370 +	node->ping_guid = NULL;
  72.371 +
  72.372 +	dataset_clear (node->hdr);
  72.373 +	node->hdr = NULL;
  72.374 +
  72.375 +	dataset_clear (node->vmsgs_supported);
  72.376 +	node->vmsgs_supported = NULL;
  72.377 +
  72.378 +	gt_share_state_free (node->share_state);
  72.379 +	node->share_state = NULL;
  72.380 +
  72.381 +	gt_query_router_free (node->query_router);
  72.382 +	node->query_router         = NULL;
  72.383 +	node->query_router_counter = 0;
  72.384 +
  72.385 +	/* update the last time if this node was connected */
  72.386 +	node->last_connect_duration = time (NULL) - node->start_connect_time;
  72.387 +	node->total_connect_duration += node->last_connect_duration;
  72.388 +
  72.389 +	gt_node_state_set (node, GT_NODE_DISCONNECTED);
  72.390 +}
  72.391 +
  72.392 +/*****************************************************************************/
  72.393 +
  72.394 +char *gt_node_class_str (gt_node_class_t klass)
  72.395 +{
  72.396 +	switch (klass)
  72.397 +	{
  72.398 +	 case GT_NODE_NONE:   return "NONE";
  72.399 +	 case GT_NODE_LEAF:   return "LEAF";
  72.400 +	 case GT_NODE_ULTRA:  return "ULTRAPEER";
  72.401 +	 case GT_NODE_DEAD:   return "DEAD (freeing node)";
  72.402 +	 default:             return "<Unknown class>";
  72.403 +	}
  72.404 +}
  72.405 +
  72.406 +char *gt_node_state_str (gt_node_state_t state)
  72.407 +{
  72.408 +	switch (state)
  72.409 +	{
  72.410 +	 case GT_NODE_DISCONNECTED:    return "Disconnected";
  72.411 +	 case GT_NODE_CONNECTING_1:    return "Connecting (handshaking)";
  72.412 +	 case GT_NODE_CONNECTING_2:    return "Connecting (awaiting ping response)";
  72.413 +	 case GT_NODE_CONNECTED:       return "Connected";
  72.414 +	 default:                      return "<Unknown state>";
  72.415 +	}
  72.416 +}
  72.417 +
  72.418 +char *gt_node_str (GtNode *node)
  72.419 +{
  72.420 +	static char buf[128];
  72.421 +
  72.422 +	snprintf (buf, sizeof (buf) - 1, "%s:%hu", net_ip_str (node->ip),
  72.423 +	          node->gt_port);
  72.424 +
  72.425 +	return buf;
  72.426 +}
  72.427 +
  72.428 +void gt_node_state_set (GtNode *node, gt_node_state_t state)
  72.429 +{
  72.430 +	gt_node_state_t old_state = node->state;
  72.431 +
  72.432 +	if (old_state != state)
  72.433 +	{
  72.434 +		node->state = state;
  72.435 +		gt_conn_set_state (node, old_state, state);
  72.436 +	}
  72.437 +}
  72.438 +
  72.439 +void gt_node_class_set (GtNode *node, gt_node_class_t klass)
  72.440 +{
  72.441 +	gt_node_class_t old_class = node->klass;
  72.442 +
  72.443 +	if (old_class != klass)
  72.444 +	{
  72.445 +		/* quiet, please */
  72.446 +#if 0
  72.447 +		if (old_class == GT_NODE_NONE)
  72.448 +		{
  72.449 +			GT->dbg (GT, "%-24s %s", gt_node_str (node),
  72.450 +			         gt_node_class_str (klass));
  72.451 +		}
  72.452 +		else
  72.453 +		{
  72.454 +			GT->dbg (GT, "%-24s %s (%s)", gt_node_str (node),
  72.455 +			         gt_node_class_str (klass), gt_node_class_str (old_class));
  72.456 +		}
  72.457 +#endif
  72.458 +
  72.459 +		node->klass = klass;
  72.460 +		gt_conn_set_class (node, old_class, klass);
  72.461 +	}
  72.462 +}
    73.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    73.2 +++ b/src/gt_node.h	Sat Feb 20 21:18:28 2010 -0800
    73.3 @@ -0,0 +1,185 @@
    73.4 +/*
    73.5 + * $Id: gt_node.h,v 1.36 2005/01/04 15:00:51 mkern Exp $
    73.6 + *
    73.7 + * Copyright (C) 2001-2003 giFT project (gift.sourceforge.net)
    73.8 + *
    73.9 + * This program is free software; you can redistribute it and/or modify it
   73.10 + * under the terms of the GNU General Public License as published by the
   73.11 + * Free Software Foundation; either version 2, or (at your option) any
   73.12 + * later version.
   73.13 + *
   73.14 + * This program is distributed in the hope that it will be useful, but
   73.15 + * WITHOUT ANY WARRANTY; without even the implied warranty of
   73.16 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
   73.17 + * General Public License for more details.
   73.18 + */
   73.19 +
   73.20 +#ifndef GIFT_GT_NODE_H_
   73.21 +#define GIFT_GT_NODE_H_
   73.22 +
   73.23 +/*****************************************************************************/
   73.24 +
   73.25 +#define MAX_NODES               gt_config_get_int("main/max_nodes=2000")
   73.26 +
   73.27 +/*****************************************************************************/
   73.28 +
   73.29 +struct gt_query_router;
   73.30 +struct gt_packet;
   73.31 +struct gt_vendor_msg;
   73.32 +struct gt_rx_stack;
   73.33 +struct gt_tx_stack;
   73.34 +
   73.35 +typedef enum gt_node_state
   73.36 +{
   73.37 +	GT_NODE_DISCONNECTED  = 0x00, /* functionless node */
   73.38 +	GT_NODE_CONNECTING_1  = 0x01, /* pending */
   73.39 +	GT_NODE_CONNECTING_2  = 0x02, /* waiting for first ping response */
   73.40 +	GT_NODE_CONNECTED     = 0x08, /* first packet is seen */
   73.41 +	GT_NODE_ANY           = 0xFF, /* any state */
   73.42 +} gt_node_state_t;
   73.43 +
   73.44 +typedef enum gt_node_class
   73.45 +{
   73.46 +	GT_NODE_NONE   = 0x00,
   73.47 +	GT_NODE_LEAF   = 0x01,        /* plain 0.6 or 0.4 nodes */
   73.48 +	GT_NODE_ULTRA  = 0x02,        /* ultrapeers */
   73.49 +	GT_NODE_DEAD   = 0x04,        /* node is marked for deletion (unused) */
   73.50 +} gt_node_class_t;
   73.51 +
   73.52 +typedef struct gt_node
   73.53 +{
   73.54 +	in_addr_t       ip;
   73.55 +
   73.56 +	/* the gnutella port of the other side */
   73.57 +	in_port_t       gt_port;
   73.58 +
   73.59 +	/* the port the other side came from, could be the same as gt_port */
   73.60 +	in_port_t       peer_port;
   73.61 +
   73.62 +	/* IP address used in communication with this node */
   73.63 +	in_addr_t       my_ip;
   73.64 +
   73.65 +	/* HTTP headers the other node sent on 0.6 connection in stage-2 of
   73.66 +	 * the 3-way handshake */
   73.67 +	Dataset        *hdr;
   73.68 +
   73.69 +	/* Contains all the vendor messages supported by this node */
   73.70 +	Dataset        *vmsgs_supported;
   73.71 +
   73.72 +	unsigned int    incoming      : 1;    /* incoming connection */
   73.73 +	unsigned int    verified      : 1;    /* port has been verified */
   73.74 +	unsigned int    firewalled    : 1;    /* firewalled connection */
   73.75 +	unsigned int    tried_connect : 1;    /* used internally by gt_netorg.c */
   73.76 +	unsigned int    rx_inflated   : 1;    /* incoming traffic compressed */
   73.77 +	unsigned int    tx_deflated   : 1;    /* outgoing traffic compressed */
   73.78 +	unsigned int    vmsgs_sent    : 1;    /* sent our initial batch of vmsgs */
   73.79 +
   73.80 +	/* current state of the given connection */
   73.81 +	gt_node_state_t state;
   73.82 +
   73.83 +	/* node classification that this connection is communicating with */
   73.84 +	gt_node_class_t klass;
   73.85 +
   73.86 +	/* TCPC a node uses. could be null */
   73.87 +	TCPC           *c;
   73.88 +
   73.89 +	/* consecutive number of pings the host has not replied to */
   73.90 +	unsigned int    pings_with_noreply;
   73.91 +
   73.92 +	/* push proxy address, which may be different from peer address if remote
   73.93 +	 * end is multi-homed */
   73.94 +	in_addr_t       push_proxy_ip;
   73.95 +	in_port_t       push_proxy_port;
   73.96 +
   73.97 +	/* Data source for packets being read in */
   73.98 +	struct gt_rx_stack      *rx_stack;
   73.99 +	/* Data source for packets being sent out */
  73.100 +	struct gt_tx_stack      *tx_stack;
  73.101 +
  73.102 +	/* TCPC used for port verification */
  73.103 +	TCPC          *gt_port_verify;
  73.104 +
  73.105 +	/* identifier for this node in the GUID cache */
  73.106 +	unsigned long  id;
  73.107 +
  73.108 +	/* stats information */
  73.109 +	unsigned long  size_kb;
  73.110 +	unsigned long  files;
  73.111 +
  73.112 +	/* timers for node things */
  73.113 +	timer_id       handshake_timer;
  73.114 +	timer_id       search_timer;
  73.115 +	timer_id       query_route_timer;
  73.116 +
  73.117 +	/* around the time of the last connect to this node */
  73.118 +	time_t         vitality;
  73.119 +
  73.120 +	/* number of disconnections from this node */
  73.121 +	unsigned int   disconnect_cnt;
  73.122 +
  73.123 +	/* guid of the last ping from this node */
  73.124 +	gt_guid_t     *ping_guid;
  73.125 +
  73.126 +	/* time of the last ping from this node */
  73.127 +	time_t         last_ping_time;
  73.128 +
  73.129 +	/* start of the last connect to this node */
  73.130 +	time_t         start_connect_time;
  73.131 +
  73.132 +	/* time the last connection made to this node lasted */
  73.133 +	time_t         last_connect_duration;
  73.134 +
  73.135 +	/* total amount of time we have been connected to this node */
  73.136 +	time_t         total_connect_duration;
  73.137 +
  73.138 +	/* status of shares submitted to this node */
  73.139 +	struct gt_share_state    *share_state;
  73.140 +
  73.141 +	/* router for query packets */
  73.142 +	struct gt_query_router   *query_router;
  73.143 +
  73.144 +	/* version of the query router table submitted to this node currently */
  73.145 +	int                       query_router_counter;
  73.146 +} GtNode;
  73.147 +
  73.148 +/*****************************************************************************/
  73.149 +
  73.150 +#define GT_NODE(c)         ((GtNode *)c->udata)
  73.151 +#define GT_CONN(node)      ((TCPC *) node->c)
  73.152 +
  73.153 +/*****************************************************************************/
  73.154 +
  73.155 +GtNode       *gt_node_new         (void);
  73.156 +GtNode       *gt_node_instantiate (TCPC *c);
  73.157 +void          gt_node_free        (GtNode *node);
  73.158 +BOOL          gt_node_freeable    (GtNode *node);
  73.159 +
  73.160 +char         *gt_node_str         (GtNode *node);
  73.161 +void          gt_node_connect     (GtNode *node, TCPC *c);
  73.162 +void          gt_node_disconnect  (TCPC *c);
  73.163 +void          gt_node_error       (TCPC *c, const char *fmt, ...);
  73.164 +
  73.165 +void          gt_node_remove_all  (void);
  73.166 +
  73.167 +/*****************************************************************************/
  73.168 +
  73.169 +void          gt_node_state_set   (GtNode *node, gt_node_state_t state);
  73.170 +void          gt_node_class_set   (GtNode *node, gt_node_class_t klass);
  73.171 +
  73.172 +char         *gt_node_class_str   (gt_node_class_t klass);
  73.173 +char         *gt_node_state_str   (gt_node_state_t state);
  73.174 +
  73.175 +/*****************************************************************************/
  73.176 +
  73.177 +GtNode       *gt_node_lookup      (in_addr_t ip, in_port_t port);
  73.178 +GtNode       *gt_node_register    (in_addr_t ip, in_port_t port,
  73.179 +                                   gt_node_class_t klass);
  73.180 +
  73.181 +/*****************************************************************************/
  73.182 +
  73.183 +BOOL          gt_node_send_if_supported (GtNode *node, struct gt_packet *pkt);
  73.184 +BOOL          gt_node_send              (GtNode *node, struct gt_packet *pkt);
  73.185 +
  73.186 +/*****************************************************************************/
  73.187 +
  73.188 +#endif /* GIFT_GT_NODE_H_ */
    74.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    74.2 +++ b/src/gt_node_cache.c	Sat Feb 20 21:18:28 2010 -0800
    74.3 @@ -0,0 +1,459 @@
    74.4 +/*
    74.5 + * $Id: gt_node_cache.c,v 1.11 2004/03/05 17:58:39 hipnod Exp $
    74.6 + *
    74.7 + * Copyright (C) 2001-2003 giFT project (gift.sourceforge.net)
    74.8 + *
    74.9 + * This program is free software; you can redistribute it and/or modify it
   74.10 + * under the terms of the GNU General Public License as published by the
   74.11 + * Free Software Foundation; either version 2, or (at your option) any
   74.12 + * later version.
   74.13 + *
   74.14 + * This program is distributed in the hope that it will be useful, but
   74.15 + * WITHOUT ANY WARRANTY; without even the implied warranty of
   74.16 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
   74.17 + * General Public License for more details.
   74.18 + */
   74.19 +
   74.20 +#include "gt_gnutella.h"
   74.21 +
   74.22 +#include "gt_node.h"
   74.23 +#include "gt_node_cache.h"
   74.24 +
   74.25 +#include "file_cache.h"
   74.26 +
   74.27 +/*****************************************************************************/
   74.28 +
   74.29 +#define MAX_RECENT          (150)
   74.30 +#define MAX_STABLE          (30)
   74.31 +
   74.32 +#define MAX_STICKY_RECENT   (150)
   74.33 +#define MAX_STICKY_STABLE   (30)
   74.34 +
   74.35 +/*****************************************************************************/
   74.36 +
   74.37 +static List       *recent;
   74.38 +static List       *stable;
   74.39 +
   74.40 +static List       *sticky_recent;   /* synced to disk */
   74.41 +static List       *sticky_stable;   /* like stable list, but nodes stay */
   74.42 +
   74.43 +#if 0
   74.44 +static List       *compressible;
   74.45 +#endif
   74.46 +
   74.47 +/*****************************************************************************/
   74.48 +
   74.49 +static void ipv4_addr_init (struct ipv4_addr *addr, in_addr_t ip,
   74.50 +                            in_port_t port)
   74.51 +{
   74.52 +	memset (addr, 0, sizeof (struct ipv4_addr));
   74.53 +
   74.54 +	addr->ip   = ip;
   74.55 +	addr->port = port;
   74.56 +}
   74.57 +
   74.58 +static void cached_node_init (struct cached_node *node, in_addr_t ipv4,
   74.59 +                              in_port_t port, gt_node_class_t klass,
   74.60 +                              time_t timestamp, time_t uptime,
   74.61 +                              in_addr_t src_ip)
   74.62 +{
   74.63 +	memset (node, 0, sizeof (*node));
   74.64 +
   74.65 +	ipv4_addr_init (&node->addr, ipv4, port);
   74.66 +
   74.67 +	node->klass     = klass;
   74.68 +	node->timestamp = timestamp;
   74.69 +	node->uptime    = uptime;
   74.70 +	node->src_ip    = src_ip;
   74.71 +}
   74.72 +
   74.73 +static int cmp_ipv4 (struct cached_node *a, struct cached_node *b)
   74.74 +{
   74.75 +	return memcmp (&a->addr, &b->addr, sizeof (a->addr));
   74.76 +}
   74.77 +
   74.78 +static int cmp_recent (struct cached_node *a, struct cached_node *b)
   74.79 +{
   74.80 +	return INTCMP (b->timestamp, a->timestamp);
   74.81 +}
   74.82 +
   74.83 +static int cmp_stable (struct cached_node *a, struct cached_node *b)
   74.84 +{
   74.85 +	time_t a_time, b_time;
   74.86 +
   74.87 +	/*
   74.88 +	 * Assume the node will be up for as much time as it was up
   74.89 +	 * already, and convert this to a timestamp.
   74.90 +	 *
   74.91 +	 * This makes a difference than just comparing the uptime
   74.92 +	 * because the cache gets synced to disk.
   74.93 +	 */
   74.94 +	a_time = a->uptime * 2 + a->timestamp;
   74.95 +	b_time = b->uptime * 2 + b->timestamp;
   74.96 +
   74.97 +	return INTCMP (b_time, a_time);
   74.98 +}
   74.99 +
  74.100 +static List *add_list (List *list, size_t max_elements, CompareFunc func,
  74.101 +                       struct cached_node *node)
  74.102 +{
  74.103 +	struct cached_node  *new_node;
  74.104 +	struct cached_node  *rm;
  74.105 +	List                *dup;
  74.106 +	List                *link;
  74.107 +
  74.108 +	if ((dup = list_find_custom (list, node, (CompareFunc)cmp_ipv4)))
  74.109 +	{
  74.110 +		free (dup->data);
  74.111 +		list = list_remove_link (list, dup);
  74.112 +	}
  74.113 +
  74.114 +	if (!(new_node = gift_memdup (node, sizeof (struct cached_node))))
  74.115 +		return list;
  74.116 +
  74.117 +	list = list_insert_sorted (list, func, new_node);
  74.118 +
  74.119 +	/*
  74.120 +	 * Truncate list at max_elements.
  74.121 +	 */
  74.122 +	link = list_nth (list, max_elements);
  74.123 +	rm   = list_nth_data (link, 0);
  74.124 +
  74.125 +	list = list_remove_link (list, link);
  74.126 +	free (rm);
  74.127 +
  74.128 +	return list;
  74.129 +}
  74.130 +
  74.131 +static void add_to_cache (struct cached_node *node)
  74.132 +{
  74.133 +	recent        = add_list (recent, MAX_RECENT,
  74.134 +	                          (CompareFunc)cmp_recent, node);
  74.135 +	sticky_recent = add_list (sticky_recent, MAX_STICKY_RECENT,
  74.136 +	                          (CompareFunc)cmp_recent, node);
  74.137 +
  74.138 +	if (node->uptime > 0)
  74.139 +	{
  74.140 +		stable        = add_list (stable, MAX_STABLE,
  74.141 +		                          (CompareFunc)cmp_stable, node);
  74.142 +		sticky_stable = add_list (sticky_stable, MAX_STICKY_STABLE,
  74.143 +		                          (CompareFunc)cmp_stable, node);
  74.144 +	}
  74.145 +}
  74.146 +
  74.147 +void gt_node_cache_add_ipv4 (in_addr_t ipv4, in_port_t port,
  74.148 +                             gt_node_class_t klass, time_t timestamp,
  74.149 +                             time_t uptime, in_addr_t src_ip)
  74.150 +{
  74.151 +	struct cached_node node;
  74.152 +
  74.153 +	/* make sure we don't add nodes with class GT_NODE_NONE */
  74.154 +	if (klass == GT_NODE_NONE)
  74.155 +		klass = GT_NODE_LEAF;
  74.156 +
  74.157 +	cached_node_init (&node, ipv4, port, klass, timestamp, uptime, src_ip);
  74.158 +	add_to_cache (&node);
  74.159 +
  74.160 +	/* don't put nodes that are already in the node list in the cache */
  74.161 +	if (gt_node_lookup (ipv4, port))
  74.162 +		gt_node_cache_del_ipv4 (ipv4, port);
  74.163 +}
  74.164 +
  74.165 +static List *del_list (List *list, struct cached_node *node,
  74.166 +                       in_addr_t ipv4, in_port_t port)
  74.167 +{
  74.168 +	List *link;
  74.169 +
  74.170 +	if (!(link = list_find_custom (list, node, (CompareFunc)cmp_ipv4)))
  74.171 +		return list;
  74.172 +
  74.173 +	free (link->data);
  74.174 +	return list_remove_link (list, link);
  74.175 +}
  74.176 +
  74.177 +static void del_from_cache (in_addr_t ipv4, in_port_t port)
  74.178 +{
  74.179 +	struct cached_node node;
  74.180 +
  74.181 +	cached_node_init (&node, ipv4, port, GT_NODE_NONE, 0, 0, 0);
  74.182 +
  74.183 +	recent = del_list (recent, &node, ipv4, port);
  74.184 +	stable = del_list (stable, &node, ipv4, port);
  74.185 +}
  74.186 +
  74.187 +void gt_node_cache_del_ipv4 (in_addr_t ipv4, in_port_t port)
  74.188 +{
  74.189 +	del_from_cache (ipv4, port);
  74.190 +}
  74.191 +
  74.192 +/*****************************************************************************/
  74.193 +
  74.194 +#if 0
  74.195 +static int print_node (struct cached_node *node, String *s)
  74.196 +{
  74.197 +	char *src;
  74.198 +
  74.199 +	src = STRDUP (net_ip_str (node->src_ip));
  74.200 +
  74.201 +	string_appendf (s, "[%s:%hu {%s}] ", net_ip_str (node->addr.ip),
  74.202 +	                node->addr.port, src);
  74.203 +	free (src);
  74.204 +
  74.205 +	return FALSE;
  74.206 +}
  74.207 +
  74.208 +static void print_list (char *prefix, List *list)
  74.209 +{
  74.210 +	String *s;
  74.211 +
  74.212 +	if (!(s = string_new (NULL, 0, 0, TRUE)))
  74.213 +	      return;
  74.214 +
  74.215 +	string_append (s, prefix);
  74.216 +
  74.217 +	list_foreach (list, (ListForeachFunc)print_node, s);
  74.218 +	GT->dbg (GT, "%s", s->str);
  74.219 +
  74.220 +	string_free (s);
  74.221 +}
  74.222 +#endif
  74.223 +
  74.224 +void gt_node_cache_trace (void)
  74.225 +{
  74.226 +#if 0
  74.227 +	print_list ("recent: ", recent);
  74.228 +	print_list ("stable: ", stable);
  74.229 +	print_list ("sticky_recent: ", sticky_recent);
  74.230 +	print_list ("sticky_stable: ", sticky_stable);
  74.231 +#endif
  74.232 +}
  74.233 +
  74.234 +/*****************************************************************************/
  74.235 +
  74.236 +/* return some nodes from the cache, and remove them */
  74.237 +size_t get_first (List **src_list, List **dst_list, size_t nr)
  74.238 +{
  74.239 +	struct cached_node *node;
  74.240 +	struct cached_node *dup;
  74.241 +
  74.242 +	node = list_nth_data (*src_list, 0);
  74.243 +
  74.244 +	if (!node || !(dup = gift_memdup (node, sizeof (*node))))
  74.245 +		return nr;
  74.246 +
  74.247 +	*dst_list = list_prepend (*dst_list, dup);
  74.248 +	nr--;
  74.249 +
  74.250 +	gt_node_cache_del_ipv4 (node->addr.ip, node->addr.port);
  74.251 +	return nr;
  74.252 +}
  74.253 +
  74.254 +/*
  74.255 + * Remove some elements from the cache and return them in a list .
  74.256 + *
  74.257 + * The nodes and the list returned SHOULD be freed.
  74.258 + */
  74.259 +List *gt_node_cache_get_remove (size_t nr)
  74.260 +{
  74.261 +	List *list = NULL;
  74.262 +
  74.263 +	/*
  74.264 +	 * We check the recent list first, and then if that's empty check the
  74.265 +	 * stable list, so we don't end up checking the stable list all the time.
  74.266 +	 */
  74.267 +	while (nr > 0 && recent != NULL)
  74.268 +		nr = get_first (&recent, &list, nr);
  74.269 +
  74.270 +	while (nr > 0 && stable != NULL)
  74.271 +		nr = get_first (&stable, &list, nr);
  74.272 +
  74.273 +	return list;
  74.274 +}
  74.275 +
  74.276 +/*
  74.277 + * Return some elements from the cache in a list
  74.278 + *
  74.279 + * NOTE: the data in the list returned SHOULD NOT be freed
  74.280 + */
  74.281 +List *gt_node_cache_get (size_t nr)
  74.282 +{
  74.283 +	List    *list = NULL;
  74.284 +	size_t   len;
  74.285 +	int      index;
  74.286 +
  74.287 +	len = list_length (sticky_recent);
  74.288 +
  74.289 +	/*
  74.290 +	 * If we don't have more than twice the number of nodes, just return an
  74.291 +	 * offset in the list of recent nodes.
  74.292 +	 *
  74.293 +	 * This is done so we can use the simple (stupid) selection algorithm
  74.294 +	 * below that would be inefficient otherwise.
  74.295 +	 */
  74.296 +	if (len / 2 < nr)
  74.297 +		return list_copy (list_nth (sticky_recent, MAX (0, len - nr)));
  74.298 +
  74.299 +	while (nr > 0)
  74.300 +	{
  74.301 +		struct cached_node *node;
  74.302 +
  74.303 +		index = (float)len * rand() / (RAND_MAX + 1.0);
  74.304 +
  74.305 +		node = list_nth_data (sticky_recent, index);
  74.306 +		assert (node != NULL);
  74.307 +
  74.308 +		if (list_find (list, node))
  74.309 +			continue;
  74.310 +
  74.311 +		list = list_append (list, node);
  74.312 +		nr--;
  74.313 +	}
  74.314 +
  74.315 +	return list;
  74.316 +}
  74.317 +
  74.318 +/*****************************************************************************/
  74.319 +
  74.320 +static char *node_cache_file (const char *name)
  74.321 +{
  74.322 +	return gift_conf_path ("Gnutella/%s", name);
  74.323 +}
  74.324 +
  74.325 +/*
  74.326 + * Store the cache data in the dataset. The ip:port as a string
  74.327 + * is used as a key.
  74.328 + */
  74.329 +static BOOL write_line (struct cached_node *node, FileCache *cache)
  74.330 +{
  74.331 +	char *ip_port;
  74.332 +	char *line;
  74.333 +
  74.334 +	ip_port = stringf_dup ("%s:%hu", net_ip_str (node->addr.ip),
  74.335 +	                       node->addr.port);
  74.336 +
  74.337 +	if (!ip_port)
  74.338 +		return FALSE;
  74.339 +
  74.340 +	line = stringf_dup ("%s %lu %lu %s", gt_node_class_str (node->klass),
  74.341 +	                    (long)node->timestamp, (long)node->uptime,
  74.342 +	                    net_ip_str (node->src_ip));
  74.343 +
  74.344 +	if (!line)
  74.345 +	{
  74.346 +		free (ip_port);
  74.347 +		return FALSE;
  74.348 +	}
  74.349 +
  74.350 +	file_cache_insert (cache, ip_port, line);
  74.351 +
  74.352 +	free (ip_port);
  74.353 +	free (line);
  74.354 +
  74.355 +	return FALSE;
  74.356 +}
  74.357 +
  74.358 +/*
  74.359 + * Read in a line from a cache file.
  74.360 + *
  74.361 + * The ip:port is the key in the Dataset. The value
  74.362 + * is everything else that dsecribe an entry in the node
  74.363 + * cache, as a string.
  74.364 + */
  74.365 +static void parse_line (ds_data_t *key, ds_data_t *value, void *udata)
  74.366 +{
  74.367 +	char      *ip_port = key->data;
  74.368 +	char      *str     = value->data;
  74.369 +	in_addr_t  ipv4;
  74.370 +	in_port_t  port;
  74.371 +	time_t     timestamp;
  74.372 +	time_t     uptime;
  74.373 +	in_addr_t  src_ip;
  74.374 +	char      *klass;
  74.375 +
  74.376 +	ipv4 = net_ip (string_sep (&ip_port, ":"));
  74.377 +	port = ATOUL  (ip_port);
  74.378 +
  74.379 +	if (ipv4 == 0 || ipv4 == INADDR_NONE || port == 0)
  74.380 +		return;
  74.381 +
  74.382 +	/* NOTE: we ignore the class string for now */
  74.383 +	klass     =         string_sep (&str, " ");
  74.384 +	timestamp = ATOUL  (string_sep (&str, " "));
  74.385 +	uptime    = ATOUL  (string_sep (&str, " "));
  74.386 +	src_ip    = net_ip (string_sep (&str, " "));
  74.387 +
  74.388 +	if (!klass || timestamp == 0)
  74.389 +		return;
  74.390 +
  74.391 +	/* add it to the cache */
  74.392 +	gt_node_cache_add_ipv4 (ipv4, port, GT_NODE_ULTRA, timestamp, uptime,
  74.393 +	                        src_ip);
  74.394 +}
  74.395 +
  74.396 +static BOOL load_cache (char *name)
  74.397 +{
  74.398 +	FileCache  *cache;
  74.399 +	char       *file;
  74.400 +
  74.401 +	file  = node_cache_file (name);
  74.402 +	cache = file_cache_new (file);
  74.403 +
  74.404 +	if (!cache)
  74.405 +		return FALSE;
  74.406 +
  74.407 +	dataset_foreach (cache->d, DS_FOREACH(parse_line), NULL);
  74.408 +
  74.409 +	file_cache_free (cache);
  74.410 +	return TRUE;
  74.411 +}
  74.412 +
  74.413 +static BOOL save_cache (char *name, List *list)
  74.414 +{
  74.415 +	FileCache  *cache;
  74.416 +	char       *file;
  74.417 +
  74.418 +	file  = node_cache_file (name);
  74.419 +	cache = file_cache_new (file);
  74.420 +
  74.421 +	/* flush the existing data (in memory, only) */
  74.422 +	file_cache_flush (cache);
  74.423 +
  74.424 +	/* save each entry in the node cache to the file cache */
  74.425 +	list_foreach (list, (ListForeachFunc)write_line, cache);
  74.426 +
  74.427 +	if (!file_cache_sync (cache))
  74.428 +	{
  74.429 +		GT->DBGFN (GT, "error saving cache \"%s\": %s", name, GIFT_STRERROR());
  74.430 +		return FALSE;
  74.431 +	}
  74.432 +
  74.433 +	file_cache_free (cache);
  74.434 +
  74.435 +	return TRUE;
  74.436 +}
  74.437 +
  74.438 +void gt_node_cache_load (void)
  74.439 +{
  74.440 +	load_cache ("stable_nodes");
  74.441 +	load_cache ("recent_nodes");
  74.442 +}
  74.443 +
  74.444 +void gt_node_cache_save (void)
  74.445 +{
  74.446 +	save_cache ("stable_nodes", sticky_stable);
  74.447 +	save_cache ("recent_nodes", sticky_recent);
  74.448 +}
  74.449 +
  74.450 +/*****************************************************************************/
  74.451 +
  74.452 +void gt_node_cache_init (void)
  74.453 +{
  74.454 +	gt_node_cache_load ();
  74.455 +}
  74.456 +
  74.457 +void gt_node_cache_cleanup (void)
  74.458 +{
  74.459 +	gt_node_cache_save ();
  74.460 +
  74.461 +	/* TODO: free node cache lists */
  74.462 +}
    75.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    75.2 +++ b/src/gt_node_cache.h	Sat Feb 20 21:18:28 2010 -0800
    75.3 @@ -0,0 +1,62 @@
    75.4 +/*
    75.5 + * $Id: gt_node_cache.h,v 1.4 2004/01/04 06:01:20 hipnod Exp $
    75.6 + *
    75.7 + * Copyright (C) 2001-2003 giFT project (gift.sourceforge.net)
    75.8 + *
    75.9 + * This program is free software; you can redistribute it and/or modify it
   75.10 + * under the terms of the GNU General Public License as published by the
   75.11 + * Free Software Foundation; either version 2, or (at your option) any
   75.12 + * later version.
   75.13 + *
   75.14 + * This program is distributed in the hope that it will be useful, but
   75.15 + * WITHOUT ANY WARRANTY; without even the implied warranty of
   75.16 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
   75.17 + * General Public License for more details.
   75.18 + */
   75.19 +
   75.20 +#ifndef GIFT__GT_NODE_CACHE_H__
   75.21 +#define GIFT__GT_NODE_CACHE_H__
   75.22 +
   75.23 +/*****************************************************************************/
   75.24 +
   75.25 +struct ipv4_addr
   75.26 +{
   75.27 +	in_addr_t ip;
   75.28 +	in_port_t port;
   75.29 +};
   75.30 +
   75.31 +struct cached_node
   75.32 +{
   75.33 +	struct ipv4_addr  addr;
   75.34 +	gt_node_class_t   klass;
   75.35 +	time_t            timestamp;
   75.36 +	time_t            uptime;
   75.37 +	in_addr_t         src_ip;
   75.38 +};
   75.39 +
   75.40 +/*****************************************************************************/
   75.41 +
   75.42 +void         gt_node_cache_add_ipv4    (in_addr_t ipv4, in_port_t port,
   75.43 +                                        gt_node_class_t klass,
   75.44 +                                        time_t timestamp, time_t uptime,
   75.45 +                                        in_addr_t src_ip);
   75.46 +void         gt_node_cache_del_ipv4    (in_addr_t ipv4, in_port_t port);
   75.47 +
   75.48 +List        *gt_node_cache_get_remove  (size_t max_len);
   75.49 +List        *gt_node_cache_get         (size_t max_len);
   75.50 +
   75.51 +void         gt_node_cache_trace       (void);
   75.52 +
   75.53 +/*****************************************************************************/
   75.54 +
   75.55 +void         gt_node_cache_load        (void);
   75.56 +void         gt_node_cache_save        (void);
   75.57 +
   75.58 +/*****************************************************************************/
   75.59 +
   75.60 +void         gt_node_cache_init        (void);
   75.61 +void         gt_node_cache_cleanup     (void);
   75.62 +
   75.63 +/*****************************************************************************/
   75.64 +
   75.65 +#endif /* GIFT__GT_NODE_CACHE_H__ */
    76.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    76.2 +++ b/src/gt_node_list.c	Sat Feb 20 21:18:28 2010 -0800
    76.3 @@ -0,0 +1,567 @@
    76.4 +/*
    76.5 + * $Id: gt_node_list.c,v 1.12 2004/01/29 07:50:25 hipnod Exp $
    76.6 + *
    76.7 + * Copyright (C) 2001-2003 giFT project (gift.sourceforge.net)
    76.8 + *
    76.9 + * This program is free software; you can redistribute it and/or modify it
   76.10 + * under the terms of the GNU General Public License as published by the
   76.11 + * Free Software Foundation; either version 2, or (at your option) any
   76.12 + * later version.
   76.13 + *
   76.14 + * This program is distributed in the hope that it will be useful, but
   76.15 + * WITHOUT ANY WARRANTY; without even the implied warranty of
   76.16 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
   76.17 + * General Public License for more details.
   76.18 + */
   76.19 +
   76.20 +#include "gt_gnutella.h"
   76.21 +
   76.22 +#include "gt_node.h"
   76.23 +#include "gt_node_list.h"
   76.24 +
   76.25 +/*
   76.26 + * TODO: rename gt_conn -> gt_node_list
   76.27 + */
   76.28 +
   76.29 +/*****************************************************************************/
   76.30 +
   76.31 +/* list of all nodes -- NOTE: duplicated info in gt_node.c */
   76.32 +static List      *node_list;
   76.33 +
   76.34 +/* last place in node_list for gt_conn_foreach */
   76.35 +static List      *iterator;
   76.36 +
   76.37 +/* cache of length of connected portion of node list by class (GtNodeLeaf,
   76.38 + * first, then GtNodeUltra) */
   76.39 +static int        len_cache[2] = { 0 };
   76.40 +
   76.41 +/*****************************************************************************/
   76.42 +
   76.43 +static void move_iterator (GtNode *mv)
   76.44 +{
   76.45 +	if (list_nth_data (iterator, 0) == mv)
   76.46 +		iterator = list_next (iterator);
   76.47 +}
   76.48 +
   76.49 +void gt_conn_add (GtNode *node)
   76.50 +{
   76.51 +	if (!node)
   76.52 +	{
   76.53 +		GIFT_ERROR (("adding null node to node list"));
   76.54 +		return;
   76.55 +	}
   76.56 +
   76.57 +	node_list = list_append (node_list, node);
   76.58 +}
   76.59 +
   76.60 +void gt_conn_remove (GtNode *node)
   76.61 +{
   76.62 +	if (!list_find (node_list, node))
   76.63 +		return;
   76.64 +
   76.65 +	/* move the iterator if it's pointing at the node we're removing */
   76.66 +	move_iterator (node);
   76.67 +
   76.68 +	node_list = list_remove (node_list, node);
   76.69 +}
   76.70 +
   76.71 +static void trace_list (List *nodes)
   76.72 +{
   76.73 +	GtNode *node;
   76.74 +
   76.75 +	if (!nodes)
   76.76 +		return;
   76.77 +
   76.78 +	node = list_nth_data (nodes, 0);
   76.79 +
   76.80 +	assert (node != NULL);
   76.81 +	assert (GT_CONN(node) != NULL);
   76.82 +
   76.83 +	GT->DBGFN (GT, "%s:%hu", net_ip_str (node->ip), node->gt_port);
   76.84 +
   76.85 +	if (list_next (nodes))
   76.86 +		trace_list (list_next (nodes));
   76.87 +}
   76.88 +
   76.89 +/*****************************************************************************/
   76.90 +
   76.91 +GtNode *gt_conn_foreach (GtConnForeachFunc func, void *udata,
   76.92 +                         gt_node_class_t klass, gt_node_state_t state,
   76.93 +                         int iter)
   76.94 +{
   76.95 +	GtNode      *node;
   76.96 +	TCPC        *c;
   76.97 +	GtNode      *ret       = NULL;
   76.98 +	List        *ptr;
   76.99 +	List        *start;
  76.100 +	List        *next;
  76.101 +	unsigned int i, count;
  76.102 +	int          looped    = FALSE;
  76.103 +	int          iterating = FALSE;
  76.104 +
  76.105 +	assert (func != NULL);
  76.106 +
  76.107 +#if 0
  76.108 +	GT->DBGFN (GT, "length of conn list: %u", list_length (connections));
  76.109 +#endif
  76.110 +
  76.111 +	if (iter)
  76.112 +		iterating = TRUE;
  76.113 +
  76.114 +	if (!iterator)
  76.115 +		iterator = node_list;
  76.116 +
  76.117 +	start = ptr = (iterating) ? iterator : node_list;
  76.118 +
  76.119 +	/* having count be the static list length should keep
  76.120 +	 * concurrent conn_adds from making us never stop */
  76.121 +	count = list_length (node_list);
  76.122 +
  76.123 +	/* hack for backward-compatible interface */
  76.124 +	if (state == (gt_node_state_t) -1)
  76.125 +		state = GT_NODE_ANY;
  76.126 +
  76.127 +	for (i = 0; i < count; i++)
  76.128 +	{
  76.129 +		if (iter && !ptr && !looped)
  76.130 +		{
  76.131 +			/* data only gets appended to connection list:
  76.132 +			 * safe to use head of connection list (connections) */
  76.133 +			ptr = node_list;
  76.134 +			looped = TRUE;
  76.135 +		}
  76.136 +
  76.137 +		if (!ptr)
  76.138 +			break;
  76.139 +
  76.140 +		/* we wrapped to the beginning, but have just reached the original
  76.141 +		 * start so we should bail out */
  76.142 +		if (looped && ptr == start)
  76.143 +			break;
  76.144 +
  76.145 +		node = ptr->data;
  76.146 +		c = GT_CONN(node);
  76.147 +
  76.148 +		assert (node != NULL);
  76.149 +
  76.150 +		if (klass && !(node->klass & klass))
  76.151 +		{
  76.152 +			ptr = list_next (ptr);
  76.153 +			continue;
  76.154 +		}
  76.155 +
  76.156 +		if (state != GT_NODE_ANY && node->state != state)
  76.157 +		{
  76.158 +			ptr = list_next (ptr);
  76.159 +			continue;
  76.160 +		}
  76.161 +
  76.162 +		/* grab the next item. this allows the callback to free this item */
  76.163 +		next = list_next (ptr);
  76.164 +
  76.165 +		ret = (*func) (c, node, udata);
  76.166 +
  76.167 +		ptr = next;
  76.168 +
  76.169 +		if (ret)
  76.170 +			break;
  76.171 +
  76.172 +		if (iterating && --iter == 0)
  76.173 +			break;
  76.174 +	}
  76.175 +
  76.176 +	/* save the position for next time */
  76.177 +	if (iterating)
  76.178 +		iterator = ptr;
  76.179 +
  76.180 +	return ret;
  76.181 +}
  76.182 +
  76.183 +/*****************************************************************************/
  76.184 +
  76.185 +static void add_connected (gt_node_class_t klass)
  76.186 +{
  76.187 +	int add;
  76.188 +
  76.189 +	if (klass != GT_NODE_LEAF && klass != GT_NODE_ULTRA)
  76.190 +		return;
  76.191 +
  76.192 +	add = (klass == GT_NODE_LEAF ? 0 : 1);
  76.193 +	len_cache[add]++;
  76.194 +}
  76.195 +
  76.196 +static void del_connected (gt_node_class_t klass)
  76.197 +{
  76.198 +	int del;
  76.199 +
  76.200 +	if (klass != GT_NODE_LEAF && klass != GT_NODE_ULTRA)
  76.201 +		return;
  76.202 +
  76.203 +	del = (klass == GT_NODE_LEAF ? 0 : 1);
  76.204 +	len_cache[del]--;
  76.205 +}
  76.206 +
  76.207 +void gt_conn_set_state (GtNode *node, gt_node_state_t old_state,
  76.208 +                        gt_node_state_t new_state)
  76.209 +{
  76.210 +	if (new_state == GT_NODE_CONNECTED && old_state != GT_NODE_CONNECTED)
  76.211 +		add_connected (node->klass);
  76.212 +
  76.213 +	if (new_state != GT_NODE_CONNECTED && old_state == GT_NODE_CONNECTED)
  76.214 +		del_connected (node->klass);
  76.215 +}
  76.216 +
  76.217 +void gt_conn_set_class (GtNode *node, gt_node_class_t old_class,
  76.218 +                        gt_node_class_t new_class)
  76.219 +{
  76.220 +	if (node->state != GT_NODE_CONNECTED)
  76.221 +		return;
  76.222 +
  76.223 +	del_connected (old_class);
  76.224 +	add_connected (new_class);
  76.225 +
  76.226 +	assert (len_cache[0] >= 0);
  76.227 +	assert (len_cache[1] >= 0);
  76.228 +}
  76.229 +
  76.230 +static int check_len_cache (gt_node_class_t klass)
  76.231 +{
  76.232 +	int len = 0;
  76.233 +
  76.234 +	if (klass == GT_NODE_NONE)
  76.235 +		klass = GT_NODE_LEAF | GT_NODE_ULTRA;
  76.236 +
  76.237 +	if (klass & GT_NODE_LEAF)
  76.238 +		len += len_cache[0];
  76.239 +
  76.240 +	if (klass & GT_NODE_ULTRA)
  76.241 +		len += len_cache[1];
  76.242 +
  76.243 +	return len;
  76.244 +}
  76.245 +
  76.246 +static GtNode *conn_counter (TCPC *c, GtNode *node, int *length)
  76.247 +{
  76.248 +	(*length)++;
  76.249 +	return NULL;
  76.250 +}
  76.251 +
  76.252 +int gt_conn_length (gt_node_class_t klass, gt_node_state_t state)
  76.253 +{
  76.254 +	int ret = 0;
  76.255 +	int cached_len;
  76.256 +
  76.257 +	/*
  76.258 +	 * We keep a small cache of the length of connected ultrapeers+leaves
  76.259 +	 * so we don't have to traverse the list most of the time here.
  76.260 +	 *
  76.261 +	 * Traversal still happens now as a sanity check.
  76.262 +	 */
  76.263 +	if (state == GT_NODE_CONNECTED &&
  76.264 +	    (klass == GT_NODE_NONE || klass == GT_NODE_LEAF ||
  76.265 +		 klass == GT_NODE_ULTRA))
  76.266 +	{
  76.267 +		cached_len = check_len_cache (klass);
  76.268 +
  76.269 +		/* make sure the cache length is the same as the real one */
  76.270 +		gt_conn_foreach (GT_CONN_FOREACH(conn_counter), &ret, klass, state, 0);
  76.271 +		assert (ret == cached_len);
  76.272 +
  76.273 +		return cached_len;
  76.274 +	}
  76.275 +
  76.276 +	gt_conn_foreach (GT_CONN_FOREACH(conn_counter), &ret,
  76.277 +	                 klass, state, 0);
  76.278 +
  76.279 +	return ret;
  76.280 +}
  76.281 +
  76.282 +/*****************************************************************************/
  76.283 +
  76.284 +static GtNode *select_rand (TCPC *c, GtNode *node, void **cmp)
  76.285 +{
  76.286 +	int     *nr    = cmp[0];
  76.287 +	GtNode **ret   = cmp[1];
  76.288 +	float    range = *nr;
  76.289 +	float    prob;
  76.290 +
  76.291 +	/* make sure we pick at least one */
  76.292 +	if (!*ret)
  76.293 +		*ret = node;
  76.294 +
  76.295 +	/* set the probability of selecting this node */
  76.296 +	prob = range * rand() / (RAND_MAX + 1.0);
  76.297 +
  76.298 +	if (prob < 1)
  76.299 +		*ret = node;
  76.300 +
  76.301 +	(*nr)++;
  76.302 +
  76.303 +	/* we dont use the return value here, because we need to try
  76.304 +	 * all the nodes, and returning non-null here short-circuits */
  76.305 +	return NULL;
  76.306 +}
  76.307 +
  76.308 +/*
  76.309 + * Pick a node at random that is also of the specified 
  76.310 + * class and state.
  76.311 + */
  76.312 +GtNode *gt_conn_random (gt_node_class_t klass, gt_node_state_t state)
  76.313 +{
  76.314 +	void   *cmp[2];
  76.315 +	int     nr;   
  76.316 +	GtNode *ret = NULL;
  76.317 +
  76.318 +	/* initial probability */
  76.319 +	nr = 1;
  76.320 +
  76.321 +	cmp[0] = &nr;
  76.322 +	cmp[1] = &ret;
  76.323 +
  76.324 +	gt_conn_foreach (GT_CONN_FOREACH(select_rand), cmp,
  76.325 +	                 klass, state, 0);
  76.326 +
  76.327 +	return ret;
  76.328 +}
  76.329 +
  76.330 +/*****************************************************************************/
  76.331 +
  76.332 +static BOOL collect_old (GtNode *node, void **data)
  76.333 +{
  76.334 +	List   **to_free    = data[0];
  76.335 +	int     *max_tofree = data[1];
  76.336 +
  76.337 +	/* don't make the node list too small */
  76.338 +	if (*max_tofree == 0)
  76.339 +		return FALSE;
  76.340 +
  76.341 +	if (gt_node_freeable (node))
  76.342 +	{
  76.343 +		/* protect the iterator because we're removing a node */
  76.344 +		move_iterator (node);
  76.345 +
  76.346 +		(*max_tofree)--;
  76.347 +		*to_free = list_append (*to_free, node);
  76.348 +
  76.349 +		return TRUE;
  76.350 +	}
  76.351 +
  76.352 +	return FALSE;
  76.353 +}
  76.354 +
  76.355 +static BOOL dump_node (GtNode *node, void *udata)
  76.356 +{
  76.357 +	gt_node_free (node);
  76.358 +	return TRUE;
  76.359 +}
  76.360 +
  76.361 +/*
  76.362 + * NOTE: We can't re-descend the node_list by calling gt_node_free [which
  76.363 + * calls gt_conn_remove->list_remove] while iterating the node_list in
  76.364 + * list_foreach_remove. So, we build a second a list of nodes to free while
  76.365 + * removing those from node_list "by hand" and then free that list.
  76.366 + */
  76.367 +void gt_conn_trim (void)
  76.368 +{
  76.369 +	List   *to_free     = NULL;
  76.370 +	int     max_tofree;
  76.371 +	int     len;
  76.372 +	void   *data[2];
  76.373 +
  76.374 +	len = list_length (node_list);
  76.375 +	max_tofree = MAX (0, len - 500);
  76.376 +
  76.377 +	data[0] = &to_free;
  76.378 +	data[1] = &max_tofree;
  76.379 +
  76.380 +	/* get rid of the oldest nodes first */
  76.381 +	gt_conn_sort ((CompareFunc)gt_conn_sort_vit_neg);
  76.382 +
  76.383 +	node_list = list_foreach_remove (node_list, (ListForeachFunc)collect_old,
  76.384 +	                                 data);
  76.385 +
  76.386 +	GT->DBGFN (GT, "trimming %d/%d nodes", list_length (to_free), len);
  76.387 +	list_foreach_remove (to_free, (ListForeachFunc)dump_node, NULL);
  76.388 +
  76.389 +	/* set the node list back to rights wrt vitality */
  76.390 +	gt_conn_sort ((CompareFunc)gt_conn_sort_vit);
  76.391 +
  76.392 +	/* reset the iterator to some random node */
  76.393 +	iterator = list_nth (node_list,
  76.394 +	                     (float)rand() * len / (RAND_MAX + 1.0));
  76.395 +}
  76.396 +
  76.397 +/*****************************************************************************/
  76.398 +
  76.399 +int gt_conn_sort_vit (GtNode *a, GtNode *b)
  76.400 +{
  76.401 +	if (a->vitality > b->vitality)
  76.402 +		return -1;
  76.403 +	else if (a->vitality < b->vitality)
  76.404 +		return 1;
  76.405 +	else
  76.406 +		return 0;
  76.407 +}
  76.408 +
  76.409 +int gt_conn_sort_vit_neg (GtNode *a, GtNode *b)
  76.410 +{
  76.411 +	return -gt_conn_sort_vit (a, b);
  76.412 +}
  76.413 +
  76.414 +/* NOTE: this isnt safe to call at all times */
  76.415 +void gt_conn_sort (CompareFunc func)
  76.416 +{
  76.417 +	node_list = list_sort (node_list, func);
  76.418 +
  76.419 +	/* reset the iterator */
  76.420 +	iterator = NULL;
  76.421 +}
  76.422 +
  76.423 +/*****************************************************************************/
  76.424 +
  76.425 +struct _sync_args
  76.426 +{
  76.427 +	time_t tm;
  76.428 +	FILE  *f;
  76.429 +};
  76.430 +
  76.431 +static GtNode *sync_node (TCPC *c, GtNode *node, struct _sync_args *sync)
  76.432 +{
  76.433 +	size_t ret;
  76.434 +
  76.435 +	/* node->vitality is updated lazily, to avoid a syscall for every
  76.436 +	 * packet.  Maybe this isnt worth it */
  76.437 +	if (node->state & GT_NODE_CONNECTED)
  76.438 +		node->vitality = sync->tm;
  76.439 +
  76.440 +	/* only cache the node if we have connected to it before successfully */
  76.441 +	if (node->vitality > 0 &&
  76.442 +	    node->gt_port > 0)
  76.443 +	{
  76.444 +		ret = fprintf (sync->f, "%lu %s:%hu %lu %lu\n", (long)node->vitality,
  76.445 +		               net_ip_str (node->ip), node->gt_port,
  76.446 +		               (long)node->size_kb, (long)node->files);
  76.447 +
  76.448 +		/* stop iterating if there was an error */
  76.449 +		if (ret <= 0)
  76.450 +			return node;
  76.451 +	}
  76.452 +
  76.453 +	return NULL;
  76.454 +}
  76.455 +
  76.456 +void gt_node_list_save (void)
  76.457 +{
  76.458 +	struct _sync_args sync;
  76.459 +	char  *tmp_path;
  76.460 +
  76.461 +	time (&sync.tm);
  76.462 +	tmp_path = STRDUP (gift_conf_path ("Gnutella/nodes.tmp"));
  76.463 +
  76.464 +	if (!(sync.f = fopen (gift_conf_path ("Gnutella/nodes.tmp"), "w")))
  76.465 +	{
  76.466 +		GT->DBGFN (GT, "error opening tmp file: %s", GIFT_STRERROR ());
  76.467 +		free (tmp_path);
  76.468 +		return;
  76.469 +	}
  76.470 +
  76.471 +	/*
  76.472 +	 * The nodes file is fairly important. Check for errors when writing to
  76.473 +	 * the disk.
  76.474 +	 */
  76.475 +	if (gt_conn_foreach (GT_CONN_FOREACH(sync_node), &sync,
  76.476 +	                     GT_NODE_NONE, GT_NODE_ANY, 0) != NULL)
  76.477 +	{
  76.478 +		GT->warn (GT, "error writing nodes file: %s", GIFT_STRERROR());
  76.479 +		fclose (sync.f);
  76.480 +		free (tmp_path);
  76.481 +		return;
  76.482 +	}
  76.483 +
  76.484 +	if (fclose (sync.f) != 0)
  76.485 +	{
  76.486 +		GT->warn (GT, "error closing nodes file: %s", GIFT_STRERROR());
  76.487 +		free (tmp_path);
  76.488 +		return;
  76.489 +	}
  76.490 +
  76.491 +	file_mv (tmp_path, gift_conf_path ("Gnutella/nodes"));
  76.492 +
  76.493 +	free (tmp_path);
  76.494 +}
  76.495 +
  76.496 +static void load_nodes (/*const*/ char *conf_path, gt_node_class_t klass)
  76.497 +{
  76.498 +	GtNode *node;
  76.499 +	FILE   *f;
  76.500 +	char   *buf = NULL;
  76.501 +	char   *ptr;
  76.502 +
  76.503 +	f = fopen (gift_conf_path (conf_path), "r");
  76.504 +
  76.505 +	/* try the global nodes file */
  76.506 +	if (!f)
  76.507 +	{
  76.508 +		char *filename;
  76.509 +
  76.510 +		if (!(filename = malloc (strlen (platform_data_dir ()) + 50)))
  76.511 +			return;
  76.512 +
  76.513 +		sprintf (filename, "%s/%s", platform_data_dir (), conf_path);
  76.514 +
  76.515 +		f = fopen (filename, "r");
  76.516 +
  76.517 +		free (filename);
  76.518 +	}
  76.519 +
  76.520 +	if (!f)
  76.521 +		return;
  76.522 +
  76.523 +	while (file_read_line (f, &buf))
  76.524 +	{
  76.525 +		unsigned long  vitality;
  76.526 +		in_addr_t      ip;
  76.527 +		in_port_t      port;
  76.528 +		uint32_t       size_kb;
  76.529 +		uint32_t       files;
  76.530 +
  76.531 +		ptr = buf;
  76.532 +
  76.533 +		/* [vitality] [ip]:[port] [shares size(kB)] [file count] */
  76.534 +
  76.535 +		vitality = ATOUL  (string_sep (&ptr, " "));
  76.536 +		ip       = net_ip (string_sep (&ptr, ":"));
  76.537 +		port     = ATOI   (string_sep (&ptr, " "));
  76.538 +		size_kb  = ATOI   (string_sep (&ptr, " "));
  76.539 +		files    = ATOI   (string_sep (&ptr, " "));
  76.540 +
  76.541 +		if (!ip || ip == INADDR_NONE)
  76.542 +			continue;
  76.543 +
  76.544 +		if (size_kb == (uint32_t)-1)
  76.545 +			size_kb = 0;
  76.546 +
  76.547 +		if (files == (uint32_t)-1)
  76.548 +			files = 0;
  76.549 +
  76.550 +		node = gt_node_register (ip, port, klass);
  76.551 +
  76.552 +		if (!node)
  76.553 +			continue;
  76.554 +
  76.555 +		node->vitality = vitality;
  76.556 +
  76.557 +		node->size_kb  = size_kb;
  76.558 +		node->files    = files;
  76.559 +	}
  76.560 +
  76.561 +	fclose (f);
  76.562 +}
  76.563 +
  76.564 +void gt_node_list_load (void)
  76.565 +{
  76.566 +	load_nodes ("Gnutella/nodes", GT_NODE_ULTRA);
  76.567 +
  76.568 +	/* sort the list so we contact the most recent nodes first */
  76.569 +	gt_conn_sort ((CompareFunc) gt_conn_sort_vit);
  76.570 +}
    77.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    77.2 +++ b/src/gt_node_list.h	Sat Feb 20 21:18:28 2010 -0800
    77.3 @@ -0,0 +1,60 @@
    77.4 +/*
    77.5 + * $Id: gt_node_list.h,v 1.6 2004/01/04 06:01:20 hipnod Exp $
    77.6 + *
    77.7 + * Copyright (C) 2001-2003 giFT project (gift.sourceforge.net)
    77.8 + *
    77.9 + * This program is free software; you can redistribute it and/or modify it
   77.10 + * under the terms of the GNU General Public License as published by the
   77.11 + * Free Software Foundation; either version 2, or (at your option) any
   77.12 + * later version.
   77.13 + *
   77.14 + * This program is distributed in the hope that it will be useful, but
   77.15 + * WITHOUT ANY WARRANTY; without even the implied warranty of
   77.16 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
   77.17 + * General Public License for more details.
   77.18 + */
   77.19 +
   77.20 +#ifndef GIFT_GT_NODE_LIST_H_
   77.21 +#define GIFT_GT_NODE_LIST_H_
   77.22 +
   77.23 +/*****************************************************************************/
   77.24 +
   77.25 +typedef GtNode* (*GtConnForeachFunc) (TCPC *c, GtNode *node, void *udata);
   77.26 +#define GT_CONN_FOREACH(func) ((GtConnForeachFunc)func)
   77.27 +
   77.28 +/*****************************************************************************/
   77.29 +
   77.30 +void        gt_conn_add          (GtNode *node);
   77.31 +void        gt_conn_remove       (GtNode *node);
   77.32 +GtNode     *gt_conn_foreach      (GtConnForeachFunc func, void *udata,
   77.33 +                                  gt_node_class_t klass, gt_node_state_t state,
   77.34 +                                  int iter);
   77.35 +
   77.36 +/*****************************************************************************/
   77.37 +
   77.38 +int         gt_conn_length       (gt_node_class_t klass,
   77.39 +                                  gt_node_state_t state);
   77.40 +GtNode     *gt_conn_random       (gt_node_class_t klass,
   77.41 +                                  gt_node_state_t state);
   77.42 +void        gt_conn_trim         (void);
   77.43 +
   77.44 +void        gt_conn_sort         (CompareFunc func);
   77.45 +int         gt_conn_sort_vit     (GtNode *a, GtNode *b);
   77.46 +int         gt_conn_sort_vit_neg (GtNode *a, GtNode *b);
   77.47 +
   77.48 +/*****************************************************************************/
   77.49 +
   77.50 +void        gt_conn_set_state    (GtNode *node, gt_node_state_t old_state,
   77.51 +                                  gt_node_state_t new_state);
   77.52 +void        gt_conn_set_class    (GtNode *node, gt_node_class_t old_class,
   77.53 +                                  gt_node_class_t new_class);
   77.54 +
   77.55 +/*****************************************************************************/
   77.56 +
   77.57 +/* update or load the list of nodes in ~/.giFT/Gnutella/nodes */
   77.58 +void        gt_node_list_save    (void);
   77.59 +void        gt_node_list_load    (void);
   77.60 +
   77.61 +/*****************************************************************************/
   77.62 +
   77.63 +#endif /* GIFT_GT_NODE_LIST_H_ */
    78.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    78.2 +++ b/src/gt_packet.c	Sat Feb 20 21:18:28 2010 -0800
    78.3 @@ -0,0 +1,813 @@
    78.4 +/*
    78.5 + * $Id: gt_packet.c,v 1.35 2004/04/17 06:05:53 hipnod Exp $
    78.6 + *
    78.7 + * Copyright (C) 2001-2003 giFT project (gift.sourceforge.net)
    78.8 + *
    78.9 + * This program is free software; you can redistribute it and/or modify it
   78.10 + * under the terms of the GNU General Public License as published by the
   78.11 + * Free Software Foundation; either version 2, or (at your option) any
   78.12 + * later version.
   78.13 + *
   78.14 + * This program is distributed in the hope that it will be useful, but
   78.15 + * WITHOUT ANY WARRANTY; without even the implied warranty of
   78.16 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
   78.17 + * General Public License for more details.
   78.18 + */
   78.19 +
   78.20 +#include "gt_gnutella.h"
   78.21 +
   78.22 +#include "gt_packet.h"
   78.23 +
   78.24 +#include "gt_node.h"
   78.25 +#include "gt_netorg.h"
   78.26 +
   78.27 +#include "gt_utils.h"
   78.28 +
   78.29 +#include "gt_query_route.h"
   78.30 +#include "message/gt_message.h"  /* gt_vendor_msg_get_{id,version} */
   78.31 +
   78.32 +#include <stdarg.h>
   78.33 +
   78.34 +/*****************************************************************************/
   78.35 +
   78.36 +GtPacket *gt_packet_new (uint8_t cmd, uint8_t ttl, gt_guid_t *guid)
   78.37 +{
   78.38 +	GtPacket      *packet;
   78.39 +	unsigned char *data;
   78.40 +
   78.41 +	if (!(packet = MALLOC (sizeof (GtPacket))))
   78.42 +		return NULL;
   78.43 +
   78.44 +	if (!(data = MALLOC (GT_PACKET_INITIAL)))
   78.45 +	{
   78.46 +		free (packet);
   78.47 +		return NULL;
   78.48 +	}
   78.49 +
   78.50 +	packet->data     = data;
   78.51 +	packet->len      = GNUTELLA_HDR_LEN;
   78.52 +	packet->data_len = GT_PACKET_INITIAL;
   78.53 +
   78.54 +	/*
   78.55 +	 * Caller could provide GUID or request it be randomly initialized.
   78.56 +	 */
   78.57 +	if (guid)
   78.58 +		gt_packet_set_guid (packet, guid);
   78.59 +	else
   78.60 +		gt_guid_init ((gt_guid_t *)packet->data);
   78.61 +
   78.62 +	gt_packet_set_command     (packet, cmd);
   78.63 +	gt_packet_set_ttl         (packet, ttl);
   78.64 +	gt_packet_set_payload_len (packet, 0);
   78.65 +	gt_packet_set_hops        (packet, 0);
   78.66 +
   78.67 +	/* set the offset to start at the end of the header */
   78.68 +	packet->offset = GNUTELLA_HDR_LEN;
   78.69 +
   78.70 +	return packet;
   78.71 +}
   78.72 +
   78.73 +GtPacket *gt_packet_reply (GtPacket *src, uint8_t cmd)
   78.74 +{
   78.75 +	GtPacket  *packet;
   78.76 +	uint8_t    hops;
   78.77 +	gt_guid_t *guid;
   78.78 +
   78.79 +	hops = gt_packet_hops (src);
   78.80 +	guid = gt_packet_guid (src);
   78.81 +
   78.82 +	if (!(packet = gt_packet_new (cmd, hops + 1, guid)))
   78.83 +		return NULL;
   78.84 +
   78.85 +	return packet;
   78.86 +}
   78.87 +
   78.88 +GtPacket *gt_packet_vendor (const gt_vendor_msg_t *vmsg)
   78.89 +{
   78.90 +	GtPacket            *pkt;
   78.91 +
   78.92 +	if (!(pkt = gt_packet_new (GT_MSG_VENDOR, 1, NULL)))
   78.93 +		return NULL;
   78.94 +
   78.95 +	gt_packet_put_ustr   (pkt, vmsg->vendor_id, 4);
   78.96 +	gt_packet_put_uint16 (pkt, vmsg->id);
   78.97 +	gt_packet_put_uint16 (pkt, 1); /* vmsg version */
   78.98 +
   78.99 +	if (gt_packet_error (pkt))
  78.100 +	{
  78.101 +		gt_packet_free (pkt);
  78.102 +		return NULL;
  78.103 +	}
  78.104 +
  78.105 +	return pkt;
  78.106 +}
  78.107 +
  78.108 +void gt_packet_free (GtPacket *packet)
  78.109 +{
  78.110 +	if (!packet)
  78.111 +		return;
  78.112 +
  78.113 +	free (packet->data);
  78.114 +	free (packet);
  78.115 +}
  78.116 +
  78.117 +/*****************************************************************************/
  78.118 +
  78.119 +gt_guid_t *gt_packet_guid (GtPacket *packet)
  78.120 +{
  78.121 +	assert (packet->data_len >= GNUTELLA_HDR_LEN);
  78.122 +
  78.123 +	return packet->data;
  78.124 +}
  78.125 +
  78.126 +uint32_t gt_packet_payload_len (GtPacket *packet)
  78.127 +{
  78.128 +	assert (packet->data_len >= GNUTELLA_HDR_LEN);
  78.129 +
  78.130 +	return get_payload_len (packet->data);
  78.131 +}
  78.132 +
  78.133 +uint32_t gt_packet_command (GtPacket *packet)
  78.134 +{
  78.135 +	assert (packet->data_len >= GNUTELLA_HDR_LEN);
  78.136 +
  78.137 +	return get_command (packet->data);
  78.138 +}
  78.139 +
  78.140 +uint8_t gt_packet_hops (GtPacket *packet)
  78.141 +{
  78.142 +	assert (packet->data_len >= GNUTELLA_HDR_LEN);
  78.143 +
  78.144 +	return get_hops (packet->data);
  78.145 +}
  78.146 +
  78.147 +uint8_t gt_packet_ttl (GtPacket *packet)
  78.148 +{
  78.149 +	assert (packet->data_len >= GNUTELLA_HDR_LEN);
  78.150 +
  78.151 +	return get_ttl (packet->data);
  78.152 +}
  78.153 +
  78.154 +/*****************************************************************************/
  78.155 +
  78.156 +void gt_packet_set_guid (GtPacket *packet, gt_guid_t *guid)
  78.157 +{
  78.158 +	assert (packet->data_len >= GNUTELLA_HDR_LEN);
  78.159 +
  78.160 +	memcpy (packet->data, guid, 16);
  78.161 +}
  78.162 +
  78.163 +void gt_packet_set_command (GtPacket *packet, uint8_t cmd)
  78.164 +{
  78.165 +	assert (packet->data_len >= GNUTELLA_HDR_LEN);
  78.166 +
  78.167 +	get_command (packet->data) = cmd;
  78.168 +}
  78.169 +
  78.170 +void gt_packet_set_ttl (GtPacket *packet, uint8_t ttl)
  78.171 +{
  78.172 +	assert (packet->data_len >= GNUTELLA_HDR_LEN);
  78.173 +
  78.174 +	get_ttl (packet->data) = ttl;
  78.175 +}
  78.176 +
  78.177 +void gt_packet_set_hops (GtPacket *packet, uint8_t hops)
  78.178 +{
  78.179 +	assert (packet->data_len >= GNUTELLA_HDR_LEN);
  78.180 +
  78.181 +	get_hops (packet->data) = hops;
  78.182 +}
  78.183 +
  78.184 +void gt_packet_set_payload_len (GtPacket *packet, uint32_t len)
  78.185 +{
  78.186 +	assert (packet->data_len >= GNUTELLA_HDR_LEN);
  78.187 +
  78.188 +	len = htovl (len);
  78.189 +
  78.190 +	memcpy (packet->data + 19, &len, 4);
  78.191 +}
  78.192 +
  78.193 +/*****************************************************************************/
  78.194 +/* functions to read data from packets */
  78.195 +
  78.196 +static uint8_t gt_get8 (unsigned char *src)
  78.197 +{
  78.198 +	return *src;
  78.199 +}
  78.200 +
  78.201 +#define copy_bytes(src,sz,endian,swap,sizedvar_t,swap_net,swap_vax) \
  78.202 +	sizedvar_t r;                        \
  78.203 +	sizedvar_t v;                        \
  78.204 +	sizedvar_t n;                        \
  78.205 +	                                     \
  78.206 +	memcpy (&r, src, sz);                \
  78.207 +	                                     \
  78.208 +	n = swap_net (r);                    \
  78.209 +	                                     \
  78.210 +	assert_at_compile (BIG == 0x01);     \
  78.211 +	if (endian & swap)                   \
  78.212 +	    r = n;                           \
  78.213 +	                                     \
  78.214 +	v = swap_vax (r);                    \
  78.215 +	                                     \
  78.216 +	assert_at_compile (LITTLE == 0x00);  \
  78.217 +	if (~endian & swap)                  \
  78.218 +	    r = v;                           \
  78.219 +	                                     \
  78.220 +	return r;
  78.221 +
  78.222 +static uint16_t gt_get16 (unsigned char *src, int endian, int swap)
  78.223 +{
  78.224 +	copy_bytes (src, 2, endian, swap, uint16_t, ntohs, vtohs);
  78.225 +}
  78.226 +
  78.227 +static uint32_t gt_get32 (unsigned char *src, int endian, int swap)
  78.228 +{
  78.229 +	copy_bytes (src, 4, endian, swap, uint32_t, ntohl, vtohl);
  78.230 +}
  78.231 +
  78.232 +/*****************************************************************************/
  78.233 +
  78.234 +static BOOL gt_packet_resize (GtPacket *packet, size_t len)
  78.235 +{
  78.236 +	size_t         resize_len;
  78.237 +	unsigned char *resized;
  78.238 +
  78.239 +	if (!packet)
  78.240 +		return FALSE;
  78.241 +
  78.242 +	assert (len >= GNUTELLA_HDR_LEN);
  78.243 +	assert (len < GT_PACKET_MAX);
  78.244 +
  78.245 +	/* the buffer we have allocated is already large enough */
  78.246 +	if (packet->data_len >= len)
  78.247 +		return TRUE;
  78.248 +
  78.249 +	/* determine an appropriate resize length */
  78.250 +	for (resize_len = packet->data_len; resize_len < len; )
  78.251 +	{
  78.252 +		if (resize_len == 0)
  78.253 +			resize_len = GT_PACKET_INITIAL;
  78.254 +		else
  78.255 +			resize_len *= 2;
  78.256 +	}
  78.257 +
  78.258 +	if (!(resized = realloc (packet->data, resize_len)))
  78.259 +	{
  78.260 +		packet->error = TRUE;
  78.261 +		return FALSE;
  78.262 +	}
  78.263 +
  78.264 +	memset (resized + packet->data_len, 0, resize_len - packet->data_len);
  78.265 +
  78.266 +	/* modify the packet structure to reflect this resize */
  78.267 +	packet->data_len = resize_len;
  78.268 +	packet->data     = resized;
  78.269 +
  78.270 +	return TRUE;
  78.271 +}
  78.272 +
  78.273 +int gt_packet_error (GtPacket *packet)
  78.274 +{
  78.275 +	return packet->error;
  78.276 +}
  78.277 +
  78.278 +int gt_packet_seek (GtPacket *packet, int offset)
  78.279 +{
  78.280 +	int old_offset;
  78.281 +
  78.282 +	/* should we be setting packet->error here? */
  78.283 +	if (offset >= packet->len || offset < 0)
  78.284 +	{
  78.285 +		packet->error = TRUE;
  78.286 +		return -1;
  78.287 +	}
  78.288 +
  78.289 +	old_offset = packet->offset;
  78.290 +	packet->offset = offset;
  78.291 +
  78.292 +	return old_offset;
  78.293 +}
  78.294 +
  78.295 +GtPacket *gt_packet_unserialize (unsigned char *data, size_t len)
  78.296 +{
  78.297 +	GtPacket *packet;
  78.298 +
  78.299 +	if (!(packet = gt_packet_new (0, 0, NULL)))
  78.300 +		return NULL;
  78.301 +
  78.302 +	if (len >= GT_PACKET_MAX)
  78.303 +	{
  78.304 +		gt_packet_free (packet);
  78.305 +		return NULL;
  78.306 +	}
  78.307 +
  78.308 +	if (!gt_packet_resize (packet, len))
  78.309 +	{
  78.310 +		GIFT_ERROR (("error resizing packet"));
  78.311 +		gt_packet_free (packet);
  78.312 +		return NULL;
  78.313 +	}
  78.314 +
  78.315 +	memcpy (packet->data, data, len);
  78.316 +
  78.317 +	packet->len = len;
  78.318 +
  78.319 +	/* Hmm, this should never happen, time to valgrind */
  78.320 +	if (gt_packet_payload_len (packet) != len - GNUTELLA_HDR_LEN)
  78.321 +	{
  78.322 +		GIFT_ERROR (("corrupt packet"));
  78.323 +		gt_packet_free (packet);
  78.324 +		return NULL;
  78.325 +	}
  78.326 +
  78.327 +	return packet;
  78.328 +}
  78.329 +
  78.330 +/*****************************************************************************/
  78.331 +
  78.332 +uint8_t gt_packet_get_uint8 (GtPacket *packet)
  78.333 +{ return gt_packet_get_uint (packet, 1, LITTLE, FALSE); }
  78.334 +
  78.335 +uint16_t gt_packet_get_uint16 (GtPacket *packet)
  78.336 +{ return gt_packet_get_uint (packet, 2, LITTLE, TRUE); }
  78.337 +
  78.338 +uint32_t gt_packet_get_uint32 (GtPacket *packet)
  78.339 +{ return gt_packet_get_uint (packet, 4, LITTLE, TRUE); }
  78.340 +
  78.341 +in_addr_t gt_packet_get_ip (GtPacket *packet)
  78.342 +{ return gt_packet_get_uint (packet, 4, BIG, FALSE); }
  78.343 +
  78.344 +in_port_t gt_packet_get_port (GtPacket *packet)
  78.345 +{ return gt_packet_get_uint (packet, 2, LITTLE, TRUE); }
  78.346 +
  78.347 +/*****************************************************************************/
  78.348 +
  78.349 +uint32_t gt_packet_get_uint (GtPacket *packet, size_t size,
  78.350 +                              int endian, int swap)
  78.351 +{
  78.352 +	uint32_t    data32 = 0;
  78.353 +	char       *offs;
  78.354 +
  78.355 +	assert (packet);
  78.356 +
  78.357 +	/* check overrun */
  78.358 +	if (packet->offset + size > packet->len)
  78.359 +	{
  78.360 +		packet->error = TRUE;
  78.361 +		return 0;
  78.362 +	}
  78.363 +
  78.364 +	offs = packet->data + packet->offset;
  78.365 +
  78.366 +	switch (size)
  78.367 +	{
  78.368 +	 case 1:
  78.369 +		data32 = (uint32_t)gt_get8 (offs);
  78.370 +		break;
  78.371 +	 case 2:
  78.372 +		data32 = (uint32_t)gt_get16 (offs, endian, swap);
  78.373 +		break;
  78.374 +	 case 4:
  78.375 +		data32 = gt_get32 (offs, endian, swap);
  78.376 +		break;
  78.377 +	 default:
  78.378 +		printf ("%s: wtf are you doing?\n", __PRETTY_FUNCTION__);
  78.379 +		return data32;
  78.380 +	}
  78.381 +
  78.382 +	packet->offset += size;
  78.383 +
  78.384 +	return data32;
  78.385 +}
  78.386 +
  78.387 +/*****************************************************************************/
  78.388 +
  78.389 +static int gt_packet_append (GtPacket *packet, const void *data, size_t size)
  78.390 +{
  78.391 +	size_t required;
  78.392 +
  78.393 +	if (!packet || !data || size == 0)
  78.394 +		return FALSE;
  78.395 +
  78.396 +	if (packet->data_len + size >= GT_PACKET_MAX)
  78.397 +	{
  78.398 +		packet->error = TRUE;
  78.399 +		return FALSE;
  78.400 +	}
  78.401 +
  78.402 +	/* determine the total required space to append size bytes */
  78.403 +	required = packet->len + size;
  78.404 +
  78.405 +	/* if we can't resize, gracefully fail...the caller should determine
  78.406 +	 * how bad this truly is */
  78.407 +	if (!gt_packet_resize (packet, required))
  78.408 +		return FALSE;
  78.409 +
  78.410 +	/* append size bytes of data */
  78.411 +	memcpy (packet->data + packet->len, data, size);
  78.412 +
  78.413 +	/* increment the length of this packet */
  78.414 +	packet->len += size;
  78.415 +
  78.416 +	gt_packet_set_payload_len (packet, gt_packet_payload_len (packet) + size);
  78.417 +	return TRUE;
  78.418 +}
  78.419 +
  78.420 +int gt_packet_put_uint (GtPacket *packet, void *data, size_t size,
  78.421 +                        int endian, int swap)
  78.422 +{
  78.423 +	int ret;
  78.424 +	uint16_t unet16;
  78.425 +	uint32_t unet32;
  78.426 +
  78.427 +	if (!data || size < 0 || size > sizeof (uint32_t))
  78.428 +		return FALSE;
  78.429 +
  78.430 +	switch (size)
  78.431 +	{
  78.432 +	 case 2:
  78.433 +		unet16 = gt_get16 (data, endian, swap);
  78.434 +		ret = gt_packet_append (packet, &unet16, size);
  78.435 +		break;
  78.436 +	 case 4:
  78.437 +		unet32 = gt_get32 (data, endian, swap);
  78.438 +		ret = gt_packet_append (packet, &unet32, size);
  78.439 +		break;
  78.440 +	 default:
  78.441 +		ret = gt_packet_append (packet, data, size);
  78.442 +		break;
  78.443 +	}
  78.444 +
  78.445 +	return ret;
  78.446 +}
  78.447 +
  78.448 +/*****************************************************************************/
  78.449 +
  78.450 +int gt_packet_put_uint8 (GtPacket *packet, uint8_t byte)
  78.451 +{ return gt_packet_put_uint (packet, &byte, 1, LITTLE, FALSE); }
  78.452 +
  78.453 +int gt_packet_put_uint16 (GtPacket *packet, uint16_t bytes)
  78.454 +{ return gt_packet_put_uint (packet, &bytes, 2, LITTLE, TRUE); }
  78.455 +
  78.456 +int gt_packet_put_uint32 (GtPacket *packet, uint32_t bytes)
  78.457 +{ return gt_packet_put_uint (packet, &bytes, 4, LITTLE, TRUE); }
  78.458 +
  78.459 +int gt_packet_put_ip (GtPacket *packet, in_addr_t ip)
  78.460 +{ return gt_packet_put_uint (packet, &ip, 4, BIG, FALSE); }
  78.461 +
  78.462 +int gt_packet_put_port (GtPacket *packet, in_port_t port)
  78.463 +{ return gt_packet_put_uint (packet, &port, 2, LITTLE, TRUE); }
  78.464 +
  78.465 +int gt_packet_put_ustr (GtPacket *packet, const unsigned char *str, size_t len)
  78.466 +{
  78.467 +	assert (len > 0);
  78.468 +	return gt_packet_append (packet, str, len);
  78.469 +}
  78.470 +
  78.471 +int gt_packet_put_str (GtPacket *packet, const char *str)
  78.472 +{
  78.473 +	size_t len;
  78.474 +
  78.475 +	if (!str)
  78.476 +		return gt_packet_put_uint8 (packet, 0);
  78.477 +
  78.478 +	len = strlen (str) + 1;
  78.479 +	return gt_packet_put_ustr (packet, (const unsigned char *)str, len);
  78.480 +}
  78.481 +
  78.482 +/*****************************************************************************/
  78.483 +
  78.484 +/* checks for the gt_packet_get_array sentinel given the size.  the sentinel is
  78.485 + * defined as a full element filled with zeroes */
  78.486 +static int array_sentinel (char *ptr, size_t size)
  78.487 +{
  78.488 +	while (size--)
  78.489 +	{
  78.490 +		/* non-zero byte, this element couldnt be the sentinel */
  78.491 +		if (*ptr != 0)
  78.492 +			return FALSE;
  78.493 +
  78.494 +		ptr++;
  78.495 +	}
  78.496 +
  78.497 +	return TRUE;
  78.498 +}
  78.499 +
  78.500 +void *gt_packet_get_array (GtPacket *packet, size_t nmemb, size_t size,
  78.501 +                           int term, int endian, int swap)
  78.502 +{
  78.503 +	char *start;
  78.504 +	char *ptr;
  78.505 +	char *end;
  78.506 +	int   n;
  78.507 +
  78.508 +	assert (packet);
  78.509 +
  78.510 +	/* we tried to read past the end of the packet */
  78.511 +	if (packet->offset >= packet->len)
  78.512 +	{
  78.513 +		packet->error = TRUE;
  78.514 +		return NULL;
  78.515 +	}
  78.516 +
  78.517 +	start = packet->data + packet->offset;
  78.518 +	end   = packet->data + packet->len;
  78.519 +
  78.520 +	/* TODO - optimize compares inside this loop */
  78.521 +	n = 0;
  78.522 +	for (ptr = start; ptr + size < end; ptr += size, n++)
  78.523 +	{
  78.524 +		if (term && array_sentinel (ptr, size))
  78.525 +			break;
  78.526 +
  78.527 +		if (nmemb > 0 && n >= nmemb)
  78.528 +			break;
  78.529 +
  78.530 +		if (swap)
  78.531 +		{
  78.532 +			switch (size)
  78.533 +			{
  78.534 +			 case 2:
  78.535 +				net_put16 (ptr, gt_get16 (ptr, endian, swap));
  78.536 +				break;
  78.537 +			 case 4:
  78.538 +				net_put32 (ptr, gt_get32 (ptr, endian, swap));
  78.539 +				break;
  78.540 +			 default:
  78.541 +				assert (0);
  78.542 +				break;
  78.543 +			}
  78.544 +		}
  78.545 +	}
  78.546 +
  78.547 +	/* If the array was not null terminated, then terminate it now */
  78.548 +	if (term && !array_sentinel (ptr, size))
  78.549 +	{
  78.550 +		uint32_t   zero = 0;
  78.551 +		size_t     len;
  78.552 +
  78.553 +		/* this is the length of the array we read */
  78.554 +		len = (ptr - start + size);
  78.555 +
  78.556 +		/* we must have hit the end of the packet */
  78.557 +		assert (packet->offset + len == packet->len);
  78.558 +
  78.559 +		if (!gt_packet_resize (packet, packet->len + size))
  78.560 +		{
  78.561 +			packet->offset = packet->len;
  78.562 +			return NULL;
  78.563 +		}
  78.564 +
  78.565 +		/* Hrm, this changes the payload, which we really dont want to do. */
  78.566 +		if (!gt_packet_append (packet, &zero, size))
  78.567 +		{
  78.568 +			packet->offset = packet->len;
  78.569 +			return NULL;
  78.570 +		}
  78.571 +	}
  78.572 +
  78.573 +	/* invalid data...no sentinel found */
  78.574 +	if (ptr + size > end)
  78.575 +	{
  78.576 +		packet->offset = packet->len;
  78.577 +		return NULL;
  78.578 +	}
  78.579 +
  78.580 +	/* ptr is at the sentinel right now, move one element out to calculate the
  78.581 +	 * next packet start */
  78.582 +	if (term)
  78.583 +		ptr += size;
  78.584 +
  78.585 +	/* this includes the sentinel now */
  78.586 +	packet->offset += (ptr - start);
  78.587 +
  78.588 +	return start;
  78.589 +}
  78.590 +
  78.591 +char *gt_packet_get_str (GtPacket *packet)
  78.592 +{
  78.593 +	return gt_packet_get_array (packet, 0, 1, TRUE, FALSE, FALSE);
  78.594 +}
  78.595 +
  78.596 +unsigned char *gt_packet_get_ustr (GtPacket *packet, size_t len)
  78.597 +{
  78.598 +	return gt_packet_get_array (packet, len, 1, FALSE, FALSE, FALSE);
  78.599 +}
  78.600 +
  78.601 +/******************************************************************************/
  78.602 +
  78.603 +static char *packet_command_str (unsigned char cmd)
  78.604 +{
  78.605 +	static char buf[16];
  78.606 +
  78.607 +	switch (cmd)
  78.608 +	{
  78.609 +	 case GT_MSG_PING:        return "PING";
  78.610 +	 case GT_MSG_PING_REPLY:  return "PONG";
  78.611 +	 case GT_MSG_BYE:         return "BYE";
  78.612 +	 case GT_MSG_QUERY_ROUTE: return "QROUTE";
  78.613 +	 case GT_MSG_VENDOR:      return "VMSG";
  78.614 +	 case GT_MSG_VENDOR_STD:  return "VMSG-S";
  78.615 +	 case GT_MSG_PUSH:        return "PUSH";
  78.616 +	 case GT_MSG_QUERY:       return "QUERY";
  78.617 +	 case GT_MSG_QUERY_REPLY: return "HITS";
  78.618 +
  78.619 +	 default:
  78.620 +		snprintf (buf, sizeof (buf), "[<%02hx>]", cmd);
  78.621 +		return buf;
  78.622 +	}
  78.623 +}
  78.624 +
  78.625 +static void packet_log (char *data, int len, int sent, char *user_agent,
  78.626 +                        in_addr_t ip)
  78.627 +{
  78.628 +	uint8_t      cmd;
  78.629 +	char         user_buf[32];
  78.630 +	char        *file;
  78.631 +	static FILE *ascii_log;
  78.632 +
  78.633 +	if (!ascii_log)
  78.634 +	{
  78.635 +		file = PACKET_ASCII_LOG;
  78.636 +
  78.637 +		if (!(ascii_log = fopen (file, "w")))
  78.638 +			return;
  78.639 +	}
  78.640 +
  78.641 +	cmd = get_command (data);
  78.642 +
  78.643 +	user_buf[0] = 0;
  78.644 +
  78.645 +	/* copy the first few chars of user_agent to make it line up */
  78.646 +	if (user_agent)
  78.647 +	{
  78.648 +		strncpy (user_buf, user_agent, 21);
  78.649 +		user_buf[21] = 0;
  78.650 +	}
  78.651 +
  78.652 +	fprintf (ascii_log, "%2s %-6s sz: %-5hu peer: %-22s [%s]\n",
  78.653 +	         (sent ? "<=" : "=>"),
  78.654 +	         packet_command_str (cmd), len,
  78.655 +	         (user_buf[0] ? user_buf : "(None)"),
  78.656 +	         (ip == 0 ? "None" : net_ip_str (ip)));
  78.657 +
  78.658 +	fprint_hex (ascii_log, data, len);
  78.659 +}
  78.660 +
  78.661 +void gt_packet_log (GtPacket *packet, TCPC *src, int sent)
  78.662 +{
  78.663 +	char      *user_agent;
  78.664 +	in_addr_t  ip;
  78.665 +
  78.666 +	if (!PACKET_DEBUG)
  78.667 +		return;
  78.668 +
  78.669 +	user_agent = NULL;
  78.670 +	ip         = 0;
  78.671 +
  78.672 +	/* append the user-agent string to the packet log */
  78.673 +	if (src)
  78.674 +	{
  78.675 +		ip         = src->host;
  78.676 +		user_agent = dataset_lookupstr (GT_NODE(src)->hdr, "user-agent");
  78.677 +	}
  78.678 +
  78.679 +	packet_log (packet->data, packet->len, sent, user_agent, ip);
  78.680 +}
  78.681 +
  78.682 +/******************************************************************************/
  78.683 +
  78.684 +int gt_packet_send (TCPC *c, GtPacket *packet)
  78.685 +{
  78.686 +	if (!c || c->fd < 0)
  78.687 +		return -1;
  78.688 +
  78.689 +	if (!gt_node_send (GT_NODE(c), packet))
  78.690 +		return -1;
  78.691 +
  78.692 +	return 0;
  78.693 +}
  78.694 +
  78.695 +/******************************************************************************/
  78.696 +
  78.697 +static int send_packetva (TCPC *c, uint8_t cmd,
  78.698 +                          gt_guid_t *guid, uint8_t ttl,
  78.699 +                          uint8_t hops, char *fmt, va_list args)
  78.700 +{
  78.701 +	GtPacket *pkt;
  78.702 +	char      *p;
  78.703 +	int        short_fmt   = FALSE;
  78.704 +	int        field_width = 0;
  78.705 +	int        ret;
  78.706 +
  78.707 +	if (!(pkt = gt_packet_new (cmd, ttl, guid)))
  78.708 +		return -1;
  78.709 +
  78.710 +	for (p = fmt; *p; p++)
  78.711 +	{
  78.712 +		switch (*p)
  78.713 +		{
  78.714 +		 case '%':
  78.715 +			short_fmt = FALSE;
  78.716 +			break;
  78.717 +		 case 'h':
  78.718 +			short_fmt = TRUE;
  78.719 +			break;
  78.720 +		 case 'l':
  78.721 +			break;
  78.722 +		 case 'c':
  78.723 +			{
  78.724 +				uint8_t bits8 = (uint8_t) va_arg (args, int);
  78.725 +				gt_packet_put_uint8 (pkt, bits8);
  78.726 +			}
  78.727 +			break;
  78.728 +		 case 'u':
  78.729 +			if (short_fmt)
  78.730 +			{
  78.731 +				uint16_t bits16 = (uint16_t) va_arg (args, int);
  78.732 +				gt_packet_put_uint16 (pkt, bits16);
  78.733 +			}
  78.734 +			else
  78.735 +			{
  78.736 +				uint32_t bits32 = (uint32_t) va_arg (args, int);
  78.737 +				gt_packet_put_uint32 (pkt, bits32);
  78.738 +			}
  78.739 +			break;
  78.740 +		 case 's':
  78.741 +			{
  78.742 +				char *str = va_arg (args, char *);
  78.743 +				gt_packet_put_str (pkt, str);
  78.744 +			}
  78.745 +			break;
  78.746 +		 case '0': case '1': case '2': case '3': case '4': case '5':
  78.747 +		 case '6': case '7': case '8': case '9':
  78.748 +			field_width = field_width * 10 + (*p - '0');
  78.749 +			break;
  78.750 +		 case '*':
  78.751 +			field_width = va_arg (args, int);
  78.752 +			break;
  78.753 +		 case 'p':
  78.754 +			{
  78.755 +				unsigned char *ustr = va_arg (args, unsigned char *);
  78.756 +
  78.757 +				gt_packet_put_ustr (pkt, ustr, field_width);
  78.758 +				field_width = 0;
  78.759 +			}
  78.760 +			break;
  78.761 +		 default:
  78.762 +			abort ();
  78.763 +			break;
  78.764 +		}
  78.765 +	}
  78.766 +
  78.767 +	if (gt_packet_error (pkt))
  78.768 +	{
  78.769 +		gt_packet_free (pkt);
  78.770 +		return -1;
  78.771 +	}
  78.772 +
  78.773 +	ret = gt_packet_send (c, pkt);
  78.774 +	gt_packet_free (pkt);
  78.775 +
  78.776 +	return ret;
  78.777 +}
  78.778 +
  78.779 +int gt_packet_send_fmt (TCPC *c, uint8_t cmd,
  78.780 +                        gt_guid_t *guid, uint8_t ttl,
  78.781 +                        uint8_t hops, char *fmt, ...)
  78.782 +{
  78.783 +	va_list args;
  78.784 +	int     ret;
  78.785 +
  78.786 +	va_start (args, fmt);
  78.787 +	ret = send_packetva (c, cmd, guid, ttl, hops, fmt, args);
  78.788 +	va_end (args);
  78.789 +
  78.790 +	return ret;
  78.791 +}
  78.792 +
  78.793 +int gt_packet_reply_fmt (TCPC *c, GtPacket *packet,
  78.794 +                         uint8_t cmd, char *fmt, ...)
  78.795 +{
  78.796 +	va_list     args;
  78.797 +	int         ret;
  78.798 +	size_t      hops;
  78.799 +	gt_guid_t  *guid;
  78.800 +
  78.801 +	guid = gt_packet_guid (packet);
  78.802 +	hops = gt_packet_hops (packet);
  78.803 +
  78.804 +	va_start (args, fmt);
  78.805 +	ret = send_packetva (c, cmd, guid, hops + 1, 0, fmt, args);
  78.806 +	va_end (args);
  78.807 +
  78.808 +	return ret;
  78.809 +}
  78.810 +
  78.811 +/******************************************************************************/
  78.812 +
  78.813 +int gt_packet_forward (GtPacket *packet, TCPC *c)
  78.814 +{
  78.815 +	return -1;
  78.816 +}
    79.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    79.2 +++ b/src/gt_packet.h	Sat Feb 20 21:18:28 2010 -0800
    79.3 @@ -0,0 +1,215 @@
    79.4 +/*
    79.5 + * $Id: gt_packet.h,v 1.27 2004/05/02 10:09:41 hipnod Exp $
    79.6 + *
    79.7 + * Copyright (C) 2001-2003 giFT project (gift.sourceforge.net)
    79.8 + *
    79.9 + * This program is free software; you can redistribute it and/or modify it
   79.10 + * under the terms of the GNU General Public License as published by the
   79.11 + * Free Software Foundation; either version 2, or (at your option) any
   79.12 + * later version.
   79.13 + *
   79.14 + * This program is distributed in the hope that it will be useful, but
   79.15 + * WITHOUT ANY WARRANTY; without even the implied warranty of
   79.16 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
   79.17 + * General Public License for more details.
   79.18 + */
   79.19 +
   79.20 +#ifndef GIFT_GT_PACKET_H_
   79.21 +#define GIFT_GT_PACKET_H_
   79.22 +
   79.23 +/*****************************************************************************/
   79.24 +
   79.25 +#define PACKET_DEBUG         gt_config_get_int("packet/debug=0")
   79.26 +#define PACKET_ASCII_LOG     gt_config_get_str("packet/ascii_log_file=/dev/tty")
   79.27 +
   79.28 +/*****************************************************************************/
   79.29 +
   79.30 +#define GNUTELLA_HDR_LEN    23
   79.31 +
   79.32 +#define GT_PACKET_INITIAL   (48)
   79.33 +#define GT_PACKET_MAX       (65536)    /* smallest invalid, including header */
   79.34 +
   79.35 +/*****************************************************************************/
   79.36 +
   79.37 +struct gt_packet
   79.38 +{
   79.39 +	uint32_t       offset;             /* Pointer within packet */
   79.40 +	uint32_t       len;                /* size of packet structure */
   79.41 +	uint32_t       data_len;           /* how big the packet data is */
   79.42 +	uint32_t       error;              /* packet encountered memory error */
   79.43 +
   79.44 +	unsigned char *data;    /* packet header + arbtrary packet data */
   79.45 +};
   79.46 +
   79.47 +typedef struct gt_packet GtPacket;
   79.48 +
   79.49 +typedef enum gt_packet_type
   79.50 +{
   79.51 +	GT_MSG_PING        = 0x00,
   79.52 +	GT_MSG_PING_REPLY  = 0x01,
   79.53 +	GT_MSG_BYE         = 0x02,
   79.54 +	GT_MSG_QUERY_ROUTE = 0x30,
   79.55 +	GT_MSG_VENDOR      = 0x31,
   79.56 +	GT_MSG_VENDOR_STD  = 0x32,
   79.57 +	GT_MSG_PUSH        = 0x40,
   79.58 +	GT_MSG_QUERY       = 0x80,
   79.59 +	GT_MSG_QUERY_REPLY = 0x81,
   79.60 +} gt_packet_type_t;
   79.61 +
   79.62 +/*****************************************************************************/
   79.63 +
   79.64 +#define VMSG_HDR_LEN     (8)
   79.65 +
   79.66 +typedef struct gt_vendor_msg
   79.67 +{
   79.68 +	char          vendor_id[4];
   79.69 +	uint16_t      id;
   79.70 +} gt_vendor_msg_t;
   79.71 +
   79.72 +/*
   79.73 + * Pretend these global variables are enumerated constants...don't squint
   79.74 + * too hard and you won't see they are global variables.
   79.75 + */
   79.76 +extern const gt_vendor_msg_t *GT_VMSG_MESSAGES_SUPP,
   79.77 +                             *GT_VMSG_TCP_CONNECT_BACK,
   79.78 +                             *GT_VMSG_HOPS_FLOW,
   79.79 +                             *GT_VMSG_PUSH_PROXY_REQ,
   79.80 +                             *GT_VMSG_PUSH_PROXY_ACK;
   79.81 +
   79.82 +/*****************************************************************************/
   79.83 +
   79.84 +#define get_guid(pkt)    ((pkt)[0])
   79.85 +#define get_command(pkt) ((pkt)[16])
   79.86 +#define get_ttl(pkt)     ((pkt)[17])
   79.87 +#define get_hops(pkt)    ((pkt)[18])
   79.88 +
   79.89 +#define get_payload_len(pkt) \
   79.90 +   	(((pkt)[19])       | ((pkt)[20] << 8) | \
   79.91 +     ((pkt)[21] << 16) | ((pkt)[22] << 24))
   79.92 +
   79.93 +/*****************************************************************************/
   79.94 +
   79.95 +/* handle little-endian ordering on the network */
   79.96 +
   79.97 +#ifdef WORDS_BIGENDIAN
   79.98 +/*
   79.99 + * It's best to watch out for sign extension, so we copy to temporary
  79.100 + * unsigned variables here. In case the arguments are signed, all is
  79.101 + * well.
  79.102 + *
  79.103 + * NOTE: this depends on a gcc-extension. If someone wants to port to
  79.104 + * a big-endian, non-gcc compiler, more work here is needed.
  79.105 + *
  79.106 + * NOTE2: the uint{16,32}_t types are guaranteed to be _at least_ the
  79.107 + * number of bits they say they are (i think), so we discard possibly
  79.108 + * extra bits by using bitwise-and.
  79.109 + */
  79.110 +#define vtohl(x)                                           \
  79.111 +    ({                                                     \
  79.112 +        uint32_t _tmp = (x);                               \
  79.113 +        (((_tmp & 0xff) << 24)  | ((_tmp & 0xff00) << 8) | \
  79.114 +        ((_tmp & 0xff0000) >> 8) | ((_tmp >> 24) & 0xff)); \
  79.115 +    })
  79.116 +
  79.117 +#define vtohs(x)                                           \
  79.118 +    ({                                                     \
  79.119 +        uint16_t _tmp = (x);                               \
  79.120 +        (((_tmp & 0xff) << 8) | ((_tmp >> 8) & 0xff));     \
  79.121 +    })
  79.122 +#else
  79.123 +#define vtohs(x)    (x)
  79.124 +#define vtohl(x)    (x)
  79.125 +#endif /* WORDS_BIGENDIAN */
  79.126 +
  79.127 +#define htovs(x)    vtohs(x)
  79.128 +#define htovl(x)    vtohl(x)
  79.129 +
  79.130 +/* endianness defines */
  79.131 +#define BIG         1
  79.132 +#define LITTLE      0
  79.133 +
  79.134 +/*****************************************************************************/
  79.135 +
  79.136 +#ifdef __GNUC__
  79.137 +#define FORMAT_ATTRIBUTE(kind, fmt_arg, first_arg) \
  79.138 +	__attribute__ ((format (kind, fmt_arg, first_arg)))
  79.139 +#else
  79.140 +#define FORMAT_ATTRIBUTE(kind, fmt_arg, first_arg)
  79.141 +#endif
  79.142 +
  79.143 +/*****************************************************************************/
  79.144 +
  79.145 +GtPacket       *gt_packet_new       (uint8_t cmd, uint8_t ttl, gt_guid_t *guid);
  79.146 +GtPacket       *gt_packet_reply     (GtPacket *packet, uint8_t cmd);
  79.147 +GtPacket       *gt_packet_vendor    (const gt_vendor_msg_t *vmsg);
  79.148 +void            gt_packet_free      (GtPacket *packet);
  79.149 +int             gt_packet_error     (GtPacket *packet);
  79.150 +int             gt_packet_seek      (GtPacket *packet, int offset);
  79.151 +
  79.152 +GtPacket       *gt_packet_unserialize (unsigned char *data, size_t len);
  79.153 +
  79.154 +/*****************************************************************************/
  79.155 +
  79.156 +gt_guid_t      *gt_packet_guid         (GtPacket *packet);
  79.157 +uint32_t        gt_packet_payload_len  (GtPacket *packet);
  79.158 +uint32_t        gt_packet_command      (GtPacket *packet);
  79.159 +uint8_t         gt_packet_hops         (GtPacket *packet);
  79.160 +uint8_t         gt_packet_ttl          (GtPacket *packet);
  79.161 +
  79.162 +/*****************************************************************************/
  79.163 +
  79.164 +void            gt_packet_set_guid         (GtPacket *packet, gt_guid_t *guid);
  79.165 +void            gt_packet_set_payload_len  (GtPacket *packet, uint32_t len);
  79.166 +void            gt_packet_set_command      (GtPacket *packet, uint8_t cmd);
  79.167 +void            gt_packet_set_hops         (GtPacket *packet, uint8_t hops);
  79.168 +void            gt_packet_set_ttl          (GtPacket *packet, uint8_t ttl);
  79.169 +
  79.170 +/*****************************************************************************/
  79.171 +
  79.172 +uint32_t        gt_packet_get_uint   (GtPacket *packet, size_t size,
  79.173 +                                      int endian, int swap);
  79.174 +
  79.175 +uint8_t         gt_packet_get_uint8  (GtPacket *packet);
  79.176 +uint16_t        gt_packet_get_uint16 (GtPacket *packet);
  79.177 +uint32_t        gt_packet_get_uint32 (GtPacket *packet);
  79.178 +
  79.179 +in_addr_t       gt_packet_get_ip     (GtPacket *packet);
  79.180 +in_port_t       gt_packet_get_port   (GtPacket *packet);
  79.181 +
  79.182 +char           *gt_packet_get_str    (GtPacket *packet);
  79.183 +unsigned char  *gt_packet_get_ustr   (GtPacket *packet, size_t len);
  79.184 +
  79.185 +/*****************************************************************************/
  79.186 +
  79.187 +int         gt_packet_put_uint8  (GtPacket *packet, uint8_t byte);
  79.188 +int         gt_packet_put_uint16 (GtPacket *packet, uint16_t bytes);
  79.189 +int         gt_packet_put_uint32 (GtPacket *packet, uint32_t bytes);
  79.190 +
  79.191 +int         gt_packet_put_str    (GtPacket *packet, const char *str);
  79.192 +int         gt_packet_put_ustr   (GtPacket *packet, const unsigned char *ustr,
  79.193 +                                  size_t len);
  79.194 +
  79.195 +int         gt_packet_put_ip     (GtPacket *packet, in_addr_t ip);
  79.196 +int         gt_packet_put_port   (GtPacket *packet, in_port_t port);
  79.197 +
  79.198 +/*****************************************************************************/
  79.199 +
  79.200 +int         gt_packet_send       (TCPC *c, GtPacket *packet);
  79.201 +
  79.202 +int         gt_packet_send_fmt   (TCPC *c, uint8_t cmd,
  79.203 +                                  gt_guid_t *guid, uint8_t ttl,
  79.204 +                                  uint8_t hops, char *fmt, ...)
  79.205 +                                    FORMAT_ATTRIBUTE (printf, 6, 7);
  79.206 +
  79.207 +int         gt_packet_reply_fmt  (TCPC *c, GtPacket *packet,
  79.208 +                                  uint8_t cmd, char *fmt, ...)
  79.209 +                                    FORMAT_ATTRIBUTE (printf, 4, 5);
  79.210 +
  79.211 +
  79.212 +/*****************************************************************************/
  79.213 +
  79.214 +void gt_packet_log (GtPacket *packet, struct tcp_conn *src, int sent);
  79.215 +
  79.216 +/*****************************************************************************/
  79.217 +
  79.218 +#endif /* GIFT_GT_PACKET_H_ */
    80.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    80.2 +++ b/src/gt_query_route.c	Sat Feb 20 21:18:28 2010 -0800
    80.3 @@ -0,0 +1,1255 @@
    80.4 +/*
    80.5 + * $Id: gt_query_route.c,v 1.46 2004/04/05 07:56:54 hipnod Exp $
    80.6 + *
    80.7 + * Copyright (C) 2001-2003 giFT project (gift.sourceforge.net)
    80.8 + *
    80.9 + * This program is free software; you can redistribute it and/or modify it
   80.10 + * under the terms of the GNU General Public License as published by the
   80.11 + * Free Software Foundation; either version 2, or (at your option) any
   80.12 + * later version.
   80.13 + *
   80.14 + * This program is distributed in the hope that it will be useful, but
   80.15 + * WITHOUT ANY WARRANTY; without even the implied warranty of
   80.16 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
   80.17 + * General Public License for more details.
   80.18 + */
   80.19 +
   80.20 +#include "gt_gnutella.h"
   80.21 +
   80.22 +#include "gt_query_route.h"
   80.23 +#include "gt_packet.h"
   80.24 +#include "gt_utils.h"
   80.25 +
   80.26 +#include "gt_node.h"
   80.27 +#include "gt_node_list.h"
   80.28 +
   80.29 +#include <libgift/stopwatch.h>
   80.30 +
   80.31 +#include <zlib.h>
   80.32 +
   80.33 +/*****************************************************************************/
   80.34 +
   80.35 +/*
   80.36 + * TODO:
   80.37 + *      - compact table to bit-level representation 
   80.38 + *      - support incremental updates of table
   80.39 + *      - cut-off entries when MAX_FILL_RATIO is reached
   80.40 + */
   80.41 +#define MIN_TABLE_BITS        (16)                          /* 16   bits  */
   80.42 +#define MAX_TABLE_BITS        (21)                          /* 21   bits  */
   80.43 +#define MIN_TABLE_SIZE        (1UL << (MIN_TABLE_BITS - 1)) /* 32k  bytes */
   80.44 +#define MAX_TABLE_SIZE        (1UL << (MAX_TABLE_BITS - 1)) /* 1M   bytes */
   80.45 +#define MIN_TABLE_SLOTS       (MIN_TABLE_SIZE * 2)          /* 64k  slots */
   80.46 +#define MAX_TABLE_SLOTS       (MAX_TABLE_SIZE * 2)          /* 2M   slots */
   80.47 +#define INC_FILL_RATIO        (0.70)                        /* 0.7%       */
   80.48 +#define MAX_FILL_RATIO        (1.00)                        /* 1% (unused)*/
   80.49 +
   80.50 +/*
   80.51 + * magical constant necessary for the query routing hash function
   80.52 + */
   80.53 +#define MULTIPLIER            0x4F1BBCDC
   80.54 +
   80.55 +/*
   80.56 + * How often to synchronize the QRT with ultrapeers.
   80.57 + *
   80.58 + * This is very big because we don't support incremental updating
   80.59 + * yet.
   80.60 + */
   80.61 +#define QRT_UPDATE_INTERVAL   (20 * MINUTES)
   80.62 +
   80.63 +/*
   80.64 + * How often we check to build a compressed patch of local shares.
   80.65 + */
   80.66 +#define QRT_BUILD_INTERVAL    (3 * SECONDS)
   80.67 +
   80.68 +/*
   80.69 + * How long to wait after the first query_route_table_submit() before
   80.70 + * actually submitting the table.
   80.71 + */
   80.72 +#define QRT_SUBMIT_DELAY      (1 * MINUTES)
   80.73 +
   80.74 +/*
   80.75 + * Largest hops value in table. It looks like Limewire hardcodes
   80.76 + * this as 7, and won't understand any other value.
   80.77 + */
   80.78 +#define INFINITY              7
   80.79 +
   80.80 +/*
   80.81 + * Constants for changing route table.
   80.82 + */
   80.83 +#define QRT_KEYWORD_ADD       (0x0a)           /* -6 */
   80.84 +#define QRT_KEYWORD_REMOVE    (0x06)           /*  6 */
   80.85 +
   80.86 +/*
   80.87 + * The minimum length of a keyword
   80.88 + */
   80.89 +#define QRP_MIN_LENGTH        3
   80.90 +
   80.91 +/*
   80.92 + * Maximum patch fragment size to send
   80.93 + */
   80.94 +#define PATCH_FRAGSIZE        2048
   80.95 +
   80.96 +/*
   80.97 + * Number of bits in the patches we send
   80.98 + */
   80.99 +#define PATCH_BITS            4
  80.100 +
  80.101 +/*
  80.102 + * Holds a 32-bit index describing each token this node shares.
  80.103 + */
  80.104 +struct qrp_route_entry
  80.105 +{
  80.106 +	int        ref;                    /* number of references to this index */
  80.107 +	uint32_t   index;                  /* the actual position */
  80.108 +};
  80.109 +
  80.110 +struct qrp_route_table
  80.111 +{
  80.112 +	uint8_t   *table;
  80.113 +	size_t     bits;
  80.114 +	size_t     size;
  80.115 +	size_t     slots;
  80.116 +	size_t     present;
  80.117 +	size_t     shared;
  80.118 +};
  80.119 +
  80.120 +/*****************************************************************************/
  80.121 +
  80.122 +/*
  80.123 + * The set of indices that are currently marked "present" in the
  80.124 + * routing table.
  80.125 + */
  80.126 +static Dataset       *indices;
  80.127 +
  80.128 +/*
  80.129 + * This holds the compressed table as a full QRP patch (incremental
  80.130 + * updates not supported yet).
  80.131 + */
  80.132 +static uint8_t *compressed_table;
  80.133 +static size_t   compressed_slots;
  80.134 +static size_t   compressed_size;
  80.135 +
  80.136 +/*
  80.137 + * Keeps track of how many times the compressed table has changed.
  80.138 + * Used to avoid sending updates when not necessary.
  80.139 + */
  80.140 +static int            compressed_version;
  80.141 +
  80.142 +/*
  80.143 + * Timer that builds the compressed patch for the table submitted
  80.144 + * to peers.
  80.145 + */
  80.146 +static timer_id       build_timer;
  80.147 +
  80.148 +/*
  80.149 + * Whether we have to rebuild the table when shares are done
  80.150 + * syncing.
  80.151 + */
  80.152 +static BOOL           table_changed;
  80.153 +
  80.154 +/*
  80.155 + * The full query-routing table in binary form. This will get
  80.156 + * compressed before transmission.
  80.157 + */
  80.158 +static struct qrp_route_table *route_table;
  80.159 +
  80.160 +/*****************************************************************************/
  80.161 +
  80.162 +/* hash function used for query-routing */
  80.163 +uint32_t gt_query_router_hash_str (char *str, size_t bits)
  80.164 +{
  80.165 +	uint32_t      hash;
  80.166 +	unsigned int  i;
  80.167 +	unsigned char c;
  80.168 +
  80.169 +	i = hash = 0;
  80.170 +
  80.171 +	while ((c = *str++) && !isspace (c))
  80.172 +	{
  80.173 +		hash ^= tolower (c) << (i * 8);
  80.174 +
  80.175 +		/* using & instead of %, sorry */
  80.176 +		i = (i+1) & 0x03;
  80.177 +	}
  80.178 +
  80.179 +	return (hash * MULTIPLIER) >> (32 - bits);
  80.180 +}
  80.181 +
  80.182 +/*****************************************************************************/
  80.183 +
  80.184 +static struct qrp_route_table *qrp_route_table_new (size_t bits)
  80.185 +{
  80.186 +	struct qrp_route_table *qrt;
  80.187 +
  80.188 +	if (!(qrt = MALLOC (sizeof (struct qrp_route_table))))
  80.189 +		return NULL;
  80.190 +
  80.191 +	qrt->bits  = bits;
  80.192 +	qrt->size  = (1UL << (bits - 1));
  80.193 +	qrt->slots = qrt->size * 2;        /* 4-bit entries only */
  80.194 +
  80.195 +	if (!(qrt->table = MALLOC (qrt->size)))
  80.196 +	{
  80.197 +		free (qrt);
  80.198 +		return NULL;
  80.199 +	}
  80.200 +
  80.201 +	return qrt;
  80.202 +}
  80.203 +
  80.204 +static void qrp_route_table_free (struct qrp_route_table *qrt)
  80.205 +{
  80.206 +	if (!qrt)
  80.207 +		return;
  80.208 +
  80.209 +	free (qrt->table);
  80.210 +	free (qrt);
  80.211 +}
  80.212 +
  80.213 +static void qrp_route_table_insert (struct qrp_route_table *qrt, uint32_t index)
  80.214 +{
  80.215 +	uint8_t   old_entry;
  80.216 +	int       set_lower;
  80.217 +	int       entry;
  80.218 +
  80.219 +	if (!qrt)
  80.220 +		return;
  80.221 +
  80.222 +	assert (index < qrt->size * 2);
  80.223 +
  80.224 +	set_lower = index % 2;
  80.225 +	entry     = index / 2;
  80.226 +
  80.227 +	if (set_lower)
  80.228 +	{
  80.229 +		old_entry = qrt->table[entry] & 0x0f;
  80.230 +		qrt->table[entry] = (qrt->table[entry] & 0xf0) |
  80.231 +		                    ((QRT_KEYWORD_ADD) & 0x0f);
  80.232 +	}
  80.233 +	else
  80.234 +	{
  80.235 +		old_entry = (qrt->table[entry] & 0xf0) >> 4;
  80.236 +		qrt->table[entry] = (qrt->table[entry] & 0x0f) |
  80.237 +		                    ((QRT_KEYWORD_ADD << 4) & 0xf0);
  80.238 +	}
  80.239 +
  80.240 +	assert (old_entry == 0 || old_entry == QRT_KEYWORD_REMOVE);
  80.241 +#if 0
  80.242 +	GT->dbg (GT, "+%u [%d/%d]", index, entry, set_lower);
  80.243 +#endif
  80.244 +
  80.245 +	qrt->present++;
  80.246 +}
  80.247 +
  80.248 +#if 0
  80.249 +/* untested */
  80.250 +static void qrp_route_table_remove (struct qrp_route_table *qrt, uint32_t index)
  80.251 +{
  80.252 +	uint8_t   old_entry;
  80.253 +	int       clear_lower;
  80.254 +	int       entry;
  80.255 +
  80.256 +	if (!qrt)
  80.257 +		return;
  80.258 +
  80.259 +	assert (index < qrt->size * 2);
  80.260 +
  80.261 +	clear_lower = index % 2;
  80.262 +	entry       = index / 2;
  80.263 +
  80.264 +	/*
  80.265 +	 * This needs to change when doing incremental updating...
  80.266 +	 */
  80.267 +
  80.268 +	if (clear_lower)
  80.269 +	{
  80.270 +		old_entry = qrt->table[entry] & 0x0f;
  80.271 +		qrt->table[entry] = (qrt->table[entry] & 0xf0) |
  80.272 +		                    ((QRT_KEYWORD_REMOVE) & 0x0f);
  80.273 +	}
  80.274 +	else
  80.275 +	{
  80.276 +		old_entry = (qrt->table[entry] & 0xf0) >> 4;
  80.277 +		qrt->table[entry] = (qrt->table[entry] & 0x0f) |
  80.278 +		                    ((QRT_KEYWORD_REMOVE << 4) & 0xf0);
  80.279 +	}
  80.280 +
  80.281 +	assert (old_entry == (uint8_t) QRT_KEYWORD_ADD);
  80.282 +#if 0
  80.283 +	GT->dbg (GT, "-%u [%d/%d]", index, entry, clear_lower);
  80.284 +#endif
  80.285 +
  80.286 +	qrt->present--;
  80.287 +}
  80.288 +#endif
  80.289 +
  80.290 +static BOOL qrp_route_table_lookup (struct qrp_route_table *qrt, uint32_t index)
  80.291 +{
  80.292 +	int       check_lower;
  80.293 +	uint32_t  entry;
  80.294 +
  80.295 +	if (!qrt)
  80.296 +		return FALSE;
  80.297 +
  80.298 +	assert (index < qrt->slots);
  80.299 +	assert (qrt->slots == qrt->size * 2);
  80.300 +	        
  80.301 +	check_lower = index % 2;
  80.302 +	entry       = index / 2;
  80.303 +
  80.304 +	if (check_lower)
  80.305 +	{
  80.306 +		if ((qrt->table[entry] & 0x0f) == QRT_KEYWORD_ADD)
  80.307 +			return TRUE;
  80.308 +	}
  80.309 +	else
  80.310 +	{
  80.311 +		if (((qrt->table[entry] & 0xf0) >> 4) == QRT_KEYWORD_ADD) 
  80.312 +			return TRUE;
  80.313 +	}
  80.314 +
  80.315 +	return FALSE;
  80.316 +}
  80.317 +
  80.318 +static double qrp_route_table_fill_ratio (struct qrp_route_table *qrt)
  80.319 +{
  80.320 +	return (double)qrt->present * 100 / qrt->slots;
  80.321 +}
  80.322 +
  80.323 +/*****************************************************************************/
  80.324 +
  80.325 +static char *zlib_strerror (int error)
  80.326 +{
  80.327 +	switch (error)
  80.328 +	{
  80.329 +	 case Z_OK:             return "OK";
  80.330 +	 case Z_STREAM_END:     return "End of stream";
  80.331 +	 case Z_NEED_DICT:      return "Decompressing dictionary needed";
  80.332 +	 case Z_STREAM_ERROR:   return "Stream error";
  80.333 +	 case Z_ERRNO:          return "Generic zlib error";
  80.334 +	 case Z_DATA_ERROR:     return "Data error";
  80.335 +	 case Z_MEM_ERROR:      return "Memory error";
  80.336 +	 case Z_BUF_ERROR:      return "Buffer error";
  80.337 +	 case Z_VERSION_ERROR:  return "Incompatible runtime zlib library";
  80.338 +	 default:               break;
  80.339 +	}
  80.340 +
  80.341 +	return "Invalid zlib error code";
  80.342 +}
  80.343 +
  80.344 +/* TODO: make this use a stream-like interface */
  80.345 +static uint8_t *compress_table (uint8_t *table, size_t in_size, size_t *out_size)
  80.346 +{
  80.347 +	z_streamp   out;
  80.348 +	int         ret;
  80.349 +	uint8_t    *out_buf;
  80.350 +	int         free_size;
  80.351 +
  80.352 +	*out_size = 0;
  80.353 +
  80.354 +	if (!(out = MALLOC (sizeof(*out))))
  80.355 +		return NULL;
  80.356 +
  80.357 +	out->zalloc = Z_NULL;
  80.358 +	out->zfree  = Z_NULL;
  80.359 +	out->opaque = Z_NULL;
  80.360 +
  80.361 +	if ((ret = deflateInit (out, Z_DEFAULT_COMPRESSION)) != Z_OK)
  80.362 +	{
  80.363 +		GT->DBGFN (GT, "deflateInit error: %s", zlib_strerror (ret));
  80.364 +		free (out);
  80.365 +		return NULL;
  80.366 +	}
  80.367 +
  80.368 +	/* allocate initial buffer */
  80.369 +	free_size = in_size + in_size / 100;
  80.370 +
  80.371 +	if (!(out_buf = malloc (free_size)))
  80.372 +	{
  80.373 +		free (out_buf);
  80.374 +		deflateEnd (out);
  80.375 +		free (out);
  80.376 +		return NULL;
  80.377 +	}
  80.378 +
  80.379 +	out->next_in   = table;
  80.380 +	out->avail_in  = in_size;
  80.381 +	out->next_out  = out_buf;
  80.382 +	out->avail_out = free_size;
  80.383 +
  80.384 +	if ((ret = deflate (out, Z_FINISH)) != Z_STREAM_END)
  80.385 +	{
  80.386 +		GT->DBGFN (GT, "compression error: %s", zlib_strerror (ret));
  80.387 +		free (out_buf);
  80.388 +		deflateEnd (out);
  80.389 +		free (out);
  80.390 +		return NULL;
  80.391 +	}
  80.392 +
  80.393 +	/* 
  80.394 +	 * This could theoretically fail I guess. If it does, we shouldn't keep
  80.395 +	 * the table at least.
  80.396 +	 */
  80.397 +	assert (out->avail_in == 0);
  80.398 +
  80.399 +	*out_size = free_size - out->avail_out;
  80.400 +
  80.401 +	deflateEnd (out);
  80.402 +	free (out);
  80.403 +
  80.404 +	return out_buf;
  80.405 +}
  80.406 +
  80.407 +#if 0
  80.408 +/* send the a QRP table to nodes we haven't sent a real table yet */
  80.409 +static GtNode *update_nodes (TCPC *c, GtNode *node, void *udata)
  80.410 +{
  80.411 +	assert (node->state == GT_NODE_CONNECTED);
  80.412 +	assert (GT_CONN(node) == c);
  80.413 +	
  80.414 +	/* 
  80.415 +	 * If the counter is not 0, we sent a table to this node already.
  80.416 +	 * So, wait for the timer to pick that up.
  80.417 +	 */
  80.418 +	if (node->query_router_counter != 0)
  80.419 +		return NULL;
  80.420 +
  80.421 +	/* submit the table */
  80.422 +	query_route_table_submit (c);
  80.423 +
  80.424 +	/* reset the submit timer */
  80.425 +	if (GT_NODE(c)->query_route_timer != 0)
  80.426 +		timer_reset (GT_NODE(c)->query_route_timer);
  80.427 +
  80.428 +	return NULL;
  80.429 +}
  80.430 +#endif
  80.431 +
  80.432 +static void add_index (ds_data_t *key, ds_data_t *value, 
  80.433 +                       struct qrp_route_table *qrt)
  80.434 +{
  80.435 +	struct qrp_route_entry *entry = value->data;
  80.436 +	uint32_t slot;
  80.437 +
  80.438 +	/* grab only the most significant bits of the entry */
  80.439 +	slot = entry->index >> (32 - qrt->bits);
  80.440 +
  80.441 +	/* 
  80.442 +	 * If the entry already exists in the table, bump shared entries and
  80.443 +	 * forget about this entry.
  80.444 +	 */
  80.445 +	if (qrp_route_table_lookup (qrt, slot))
  80.446 +	{
  80.447 +		qrt->shared++;
  80.448 +		return;
  80.449 +	}
  80.450 +
  80.451 +	qrp_route_table_insert (qrt, slot);
  80.452 +}
  80.453 +
  80.454 +static void build_uncompressed (struct qrp_route_table *qrt)
  80.455 +{
  80.456 +	dataset_foreach (indices, DS_FOREACH(add_index), qrt);
  80.457 +}
  80.458 +
  80.459 +static int build_qrp_table (void *udata)
  80.460 +{
  80.461 +	uint8_t   *new_table;
  80.462 +	size_t     new_size;
  80.463 +	StopWatch *sw;
  80.464 +	double     elapsed;
  80.465 +	double     fill_ratio;
  80.466 +
  80.467 +	if (!route_table && !(route_table = qrp_route_table_new (MIN_TABLE_BITS)))
  80.468 +	{
  80.469 +		/* try again later */
  80.470 +		return TRUE;
  80.471 +	}
  80.472 +
  80.473 +	sw = stopwatch_new (TRUE);
  80.474 +
  80.475 +	/* build a table from the indices */
  80.476 +	build_uncompressed (route_table);
  80.477 +
  80.478 +	stopwatch_stop (sw);
  80.479 +
  80.480 +	elapsed = stopwatch_elapsed (sw, NULL);
  80.481 +
  80.482 +	fill_ratio = qrp_route_table_fill_ratio (route_table);
  80.483 +
  80.484 +	GT->DBGFN (GT, "%.4lfs elapsed building", elapsed);
  80.485 +	GT->DBGFN (GT, "present=%u shared=%u size=%u", route_table->present, 
  80.486 +	           route_table->shared, route_table->size);
  80.487 +	GT->DBGFN (GT, "fill ratio=%.4lf%%", fill_ratio);
  80.488 +
  80.489 +	/* 
  80.490 +	 * If the fill ratio is greater than an acceptable threshold,
  80.491 +	 * and we haven't reached the maximum table size allowed,
  80.492 +	 * rebuild a larger routing table.
  80.493 +	 */
  80.494 +	if (fill_ratio >= INC_FILL_RATIO && route_table->bits < MAX_TABLE_BITS)
  80.495 +	{
  80.496 +		struct qrp_route_table *new_table;
  80.497 +
  80.498 +		/*
  80.499 +		 * If we don't have enough memory to build the new table, fall
  80.500 +		 * through and compress the existing table. This would only happen
  80.501 +		 * if this node has a very small amount of memory.
  80.502 +		 */
  80.503 +		if ((new_table = qrp_route_table_new (route_table->bits + 1)))
  80.504 +		{
  80.505 +			qrp_route_table_free (route_table);
  80.506 +			route_table = new_table;
  80.507 +
  80.508 +			/* retry the build later, it's kinda expensive */
  80.509 +			stopwatch_free (sw);
  80.510 +			return TRUE;
  80.511 +		}
  80.512 +	}
  80.513 +
  80.514 +	stopwatch_start (sw);
  80.515 +
  80.516 +	/* compress a new table */
  80.517 +	new_table = compress_table (route_table->table, 
  80.518 +	                            route_table->size, 
  80.519 +	                            &new_size);
  80.520 +
  80.521 +	elapsed = stopwatch_free_elapsed (sw);
  80.522 +
  80.523 +	GT->DBGFN (GT, "%.4lfs elapsed compressing", elapsed);
  80.524 +	GT->DBGFN (GT, "compressed size=%lu", new_size);
  80.525 +
  80.526 +	if (!new_table)
  80.527 +		return TRUE;
  80.528 +
  80.529 +	assert (new_size > 0);
  80.530 +
  80.531 +	/*
  80.532 +	 * Replace the old compressed table
  80.533 +	 */
  80.534 +	free (compressed_table);
  80.535 +
  80.536 +	compressed_table = new_table;
  80.537 +	compressed_size  = new_size;
  80.538 +	compressed_slots = route_table->slots;
  80.539 +
  80.540 +	compressed_version++;
  80.541 +
  80.542 +	if (!compressed_version)
  80.543 +		compressed_version++;
  80.544 +
  80.545 +	/*
  80.546 +	 * An optimization to reduce memory usage: realloc the 
  80.547 +	 * compressed table to the smaller size.
  80.548 +	 */
  80.549 +	if ((new_table = realloc (new_table, new_size)))
  80.550 +		compressed_table = new_table;
  80.551 +
  80.552 +#if 0
  80.553 +	/* update nodes with this table */
  80.554 +	gt_conn_foreach (GT_CONN_FOREACH(update_nodes), NULL, 
  80.555 +	                 GT_NODE_ULTRA, GT_NODE_CONNECTED, 0);
  80.556 +#endif
  80.557 +
  80.558 +	/*
  80.559 +	 * Temporary optimization: we can free the uncompressed
  80.560 +	 * route table now, as it is unused. This is a dubious optimization
  80.561 +	 * though because the table will probably hang around in 
  80.562 +	 * the future when incremental updating works.
  80.563 +	 */
  80.564 +	qrp_route_table_free (route_table);
  80.565 +	route_table = NULL;
  80.566 +
  80.567 +	/* remove the timer, as the table is now up to date */
  80.568 +	build_timer = 0;
  80.569 +	return FALSE;
  80.570 +}
  80.571 +
  80.572 +static int start_build (void *udata)
  80.573 +{
  80.574 +	build_timer = timer_add (QRT_BUILD_INTERVAL, 
  80.575 +	                         (TimerCallback)build_qrp_table, NULL);
  80.576 +	return FALSE;
  80.577 +}
  80.578 +
  80.579 +static void start_build_timer (void)
  80.580 +{
  80.581 +	if (build_timer)
  80.582 +		return;
  80.583 +
  80.584 +	/*
  80.585 +	 * If we don't have a compressed table, we haven't built
  80.586 +	 * the table before, so build it soon. Otherwise,
  80.587 +	 * we won't submit it for a while anyway, so build it 
  80.588 +	 * at half the update interval.
  80.589 +	 */
  80.590 +	if (compressed_table)
  80.591 +	{
  80.592 +		build_timer = timer_add (QRT_UPDATE_INTERVAL / 2,
  80.593 +		                         (TimerCallback)start_build, NULL);
  80.594 +		return;
  80.595 +	}
  80.596 +
  80.597 +	start_build (NULL);
  80.598 +}
  80.599 +
  80.600 +/*****************************************************************************/
  80.601 +
  80.602 +/* TODO: this should be moved to GT_SELF */
  80.603 +uint8_t *gt_query_router_self (size_t *size, int *version)
  80.604 +{
  80.605 +	if (!compressed_table)
  80.606 +		return NULL;
  80.607 +
  80.608 +	assert (size != NULL && version != NULL);
  80.609 +
  80.610 +	*size    = compressed_size;
  80.611 +	*version = compressed_version;
  80.612 +
  80.613 +	return compressed_table;
  80.614 +}
  80.615 +
  80.616 +static int free_entries (ds_data_t *key, ds_data_t *value, void *udata)
  80.617 +{
  80.618 +	struct qrp_route_entry *entry = value->data;
  80.619 +
  80.620 +	free (entry);
  80.621 +
  80.622 +	return DS_CONTINUE | DS_REMOVE;
  80.623 +}
  80.624 +
  80.625 +void gt_query_router_self_destroy (void)
  80.626 +{
  80.627 +	timer_remove_zero (&build_timer);
  80.628 +
  80.629 +	qrp_route_table_free (route_table);
  80.630 +	route_table = NULL;
  80.631 +
  80.632 +	free (compressed_table);
  80.633 +	compressed_table   = NULL;
  80.634 +	compressed_slots   = 0;
  80.635 +	compressed_size    = 0;
  80.636 +	compressed_version = 0;
  80.637 +
  80.638 +	dataset_foreach_ex (indices, DS_FOREACH_EX(free_entries), NULL);
  80.639 +	dataset_clear (indices);
  80.640 +	indices = NULL;
  80.641 +}
  80.642 +
  80.643 +void gt_query_router_self_init (void)
  80.644 +{
  80.645 +	indices = dataset_new (DATASET_HASH);
  80.646 +}
  80.647 +
  80.648 +/*****************************************************************************/
  80.649 +
  80.650 +static uint32_t *append_token (uint32_t *tokens, size_t *len,
  80.651 +                               size_t pos, uint32_t tok)
  80.652 +{
  80.653 +	if (pos >= *len)
  80.654 +	{
  80.655 +		uint32_t *new_tokens;
  80.656 +
  80.657 +		*(len) += 8;
  80.658 +		new_tokens = realloc (tokens, *len * sizeof (uint32_t));
  80.659 +
  80.660 +		assert (new_tokens != NULL);
  80.661 +		tokens = new_tokens;
  80.662 +	}
  80.663 +
  80.664 +	tokens[pos] = tok;
  80.665 +	return tokens;
  80.666 +}
  80.667 +
  80.668 +static uint32_t *tokenize (char *hpath, size_t *r_len)
  80.669 +{
  80.670 +	uint32_t *tokens;
  80.671 +	int        count;
  80.672 +	size_t     len;
  80.673 +	char      *str, *str0;
  80.674 +	char      *next;
  80.675 +
  80.676 +	if (!(str0 = str = STRDUP (hpath)))
  80.677 +		return NULL;
  80.678 +
  80.679 +	tokens = NULL;
  80.680 +	len    = 0;
  80.681 +	count  = 0;
  80.682 +
  80.683 +	while ((next = string_sep_set (&str, QRP_DELIMITERS)) != NULL)
  80.684 +	{
  80.685 +		uint32_t tok;
  80.686 +
  80.687 +		if (string_isempty (next))
  80.688 +			continue;
  80.689 +
  80.690 +		/* don't add keywords that are too small */
  80.691 +		if (strlen (next) < QRP_MIN_LENGTH)
  80.692 +			continue;
  80.693 +
  80.694 +		tok = gt_query_router_hash_str (next, 32);
  80.695 +		tokens = append_token (tokens, &len, count++, tok);
  80.696 +	}
  80.697 +
  80.698 +	*r_len = count;
  80.699 +
  80.700 +	free (str0);
  80.701 +
  80.702 +	return tokens;
  80.703 +}
  80.704 +
  80.705 +void gt_query_router_self_add (FileShare *file)
  80.706 +{
  80.707 +	uint32_t               *tokens, *tokens0;
  80.708 +	uint32_t                tok;
  80.709 +	size_t                  len;
  80.710 +	int                     i;
  80.711 +	struct qrp_route_entry *entry;
  80.712 +
  80.713 +	tokens0 = tokens = tokenize (share_get_hpath (file), &len);
  80.714 +
  80.715 +	assert (tokens != NULL);
  80.716 +	assert (len > 0);
  80.717 +
  80.718 +	for (i = 0; i < len; i++)
  80.719 +	{
  80.720 +		tok = tokens[i];
  80.721 +
  80.722 +		if ((entry = dataset_lookup (indices, &tok, sizeof (tok))))
  80.723 +		{
  80.724 +			entry->ref++;
  80.725 +			continue;
  80.726 +		}
  80.727 +
  80.728 +		/*
  80.729 +		 * Create a new index and add it to the table.
  80.730 +		 */
  80.731 +		if (!(entry = malloc (sizeof (struct qrp_route_entry))))
  80.732 +			continue;
  80.733 +
  80.734 +		entry->ref   = 1;
  80.735 +		entry->index = tok;
  80.736 +
  80.737 +		dataset_insert (&indices, &tok, sizeof (tok), entry, 0);
  80.738 +
  80.739 +		table_changed = TRUE;
  80.740 +	}
  80.741 +
  80.742 +	free (tokens0);
  80.743 +}
  80.744 +
  80.745 +void gt_query_router_self_remove (FileShare *file)
  80.746 +{
  80.747 +	uint32_t               *tokens, *tokens0;
  80.748 +	uint32_t                tok;
  80.749 +	size_t                  len;
  80.750 +	int                     i;
  80.751 +	struct qrp_route_entry *entry;
  80.752 +
  80.753 +	tokens0 = tokens = tokenize (share_get_hpath (file), &len);
  80.754 +
  80.755 +	assert (tokens != NULL);
  80.756 +	assert (len > 0);
  80.757 +
  80.758 +	for (i = 0; i < len; i++)
  80.759 +	{
  80.760 +		tok = tokens[i];
  80.761 +
  80.762 +		entry = dataset_lookup (indices, &tok, sizeof (tok));
  80.763 +		assert (entry != NULL);
  80.764 +
  80.765 +		if (--entry->ref > 0)
  80.766 +			continue;
  80.767 +
  80.768 +		dataset_remove (indices, &tok, sizeof (tok));
  80.769 +
  80.770 +		table_changed = TRUE;
  80.771 +	}
  80.772 +
  80.773 +	free (tokens0);
  80.774 +}
  80.775 +
  80.776 +void gt_query_router_self_sync (BOOL begin)
  80.777 +{
  80.778 +	if (!begin && table_changed)
  80.779 +	{
  80.780 +		start_build_timer();
  80.781 +		table_changed = FALSE;
  80.782 +	}
  80.783 +}
  80.784 +
  80.785 +/*****************************************************************************/
  80.786 +
  80.787 +int query_patch_open (GtQueryRouter *router, int seq_size, int compressed,
  80.788 +                      size_t max_size)
  80.789 +{
  80.790 +	GtQueryPatch *new_patch;
  80.791 +
  80.792 +	if (!(new_patch = malloc (sizeof (GtQueryPatch))))
  80.793 +		return FALSE;
  80.794 +
  80.795 +	memset (new_patch, 0, sizeof (GtQueryPatch));
  80.796 +
  80.797 +	if (!(new_patch->stream = zlib_stream_open (max_size)))
  80.798 +	{
  80.799 +		free (new_patch);
  80.800 +		return FALSE;
  80.801 +	}
  80.802 +
  80.803 +	new_patch->seq_size   = seq_size;
  80.804 +	new_patch->compressed = compressed;
  80.805 +
  80.806 +	/* NOTE: sequence is 1-based, not 0-based */
  80.807 +	new_patch->seq_num = 1;
  80.808 +
  80.809 +	router->patch = new_patch;
  80.810 +
  80.811 +	return TRUE;
  80.812 +}
  80.813 +
  80.814 +void query_patch_close (GtQueryRouter *router)
  80.815 +{
  80.816 +	GtQueryPatch *patch;
  80.817 +
  80.818 +	GT->DBGFN (GT, "entered");
  80.819 +
  80.820 +	if (!router)
  80.821 +		return;
  80.822 +
  80.823 +	patch = router->patch;
  80.824 +
  80.825 +	if (!patch)
  80.826 +		return;
  80.827 +
  80.828 +	zlib_stream_close (patch->stream);
  80.829 +
  80.830 +	router->patch = NULL;
  80.831 +	free (patch);
  80.832 +}
  80.833 +
  80.834 +/* TODO: compact router tables to bit-level */
  80.835 +static void query_patch_apply (GtQueryRouter *router, int bits, char *data,
  80.836 +                               size_t data_size)
  80.837 +{
  80.838 +	GtQueryPatch   *patch;
  80.839 +	char           *table;          /* NOTE: this must be signed */
  80.840 +	int             i;
  80.841 +
  80.842 +	patch = router->patch;
  80.843 +	assert (patch != NULL);
  80.844 +
  80.845 +	/* check for overflow: this may look wrong but its not */
  80.846 +	if (patch->table_pos + (data_size - 1) >= router->size)
  80.847 +	{
  80.848 +		GT->DBGFN (GT, "patch overflow: %u (max of %u)",
  80.849 +		           patch->table_pos+data_size, router->size);
  80.850 +		query_patch_close (router);
  80.851 +		return;
  80.852 +	}
  80.853 +
  80.854 +	table = router->table;
  80.855 +
  80.856 +	/* hrm */
  80.857 +	if (bits == 4)
  80.858 +	{
  80.859 +		int j;
  80.860 +
  80.861 +		for (i = 0; i < data_size; i++)
  80.862 +		{
  80.863 +			int pos;
  80.864 +			char change;
  80.865 +
  80.866 +			pos = i + patch->table_pos;
  80.867 +
  80.868 +			/* avoid % */
  80.869 +			j = (i+1) & 0x1;
  80.870 +
  80.871 +			/* grab the correct half of the byte and sign-extend it
  80.872 +			 * NOTE: this starts off with the most significant bits! */
  80.873 +			change = data[i] & (0x0f << (4 * j));
  80.874 +
  80.875 +			/* move to least significant bits
  80.876 +			 * TODO: does this do sign-extension correctly? */
  80.877 +			change >>= 4;
  80.878 +
  80.879 +			table[pos] += change;
  80.880 +		}
  80.881 +	}
  80.882 +	else if (bits == 8)
  80.883 +	{
  80.884 +		/* untested */
  80.885 +		for (i = 0; i < data_size; i++)
  80.886 +		{
  80.887 +			table[i + patch->table_pos] += data[i];
  80.888 +		}
  80.889 +	}
  80.890 +	else
  80.891 +	{
  80.892 +		GT->DBGFN (GT, "undefined bits value in query patch: %u", bits);
  80.893 +		query_patch_close (router);
  80.894 +		return;
  80.895 +	}
  80.896 +
  80.897 +	/* store the table position for the next patch */
  80.898 +	patch->table_pos += i;
  80.899 +
  80.900 +	/* cleanup the data if the patch is done */
  80.901 +	patch->seq_num++;
  80.902 +
  80.903 +	if (patch->seq_num > patch->seq_size)
  80.904 +		query_patch_close (router);
  80.905 +}
  80.906 +
  80.907 +/*****************************************************************************/
  80.908 +
  80.909 +/* TODO: compact router tables to bit-level */
  80.910 +GtQueryRouter *gt_query_router_new (size_t size, int infinity)
  80.911 +{
  80.912 +	GtQueryRouter *router;
  80.913 +
  80.914 +	if (size > MAX_TABLE_SIZE)
  80.915 +		return NULL;
  80.916 +
  80.917 +	if (!(router = malloc (sizeof (GtQueryRouter))))
  80.918 +		return NULL;
  80.919 +
  80.920 +	memset (router, 0, sizeof (GtQueryRouter));
  80.921 +
  80.922 +	if (!(router->table = malloc (size)))
  80.923 +	{
  80.924 +		free (router->table);
  80.925 +		return NULL;
  80.926 +	}
  80.927 +
  80.928 +	memset (router->table, infinity, size);
  80.929 +
  80.930 +	router->size = size;
  80.931 +
  80.932 +	return router;
  80.933 +}
  80.934 +
  80.935 +void gt_query_router_free (GtQueryRouter *router)
  80.936 +{
  80.937 +	if (!router)
  80.938 +		return;
  80.939 +
  80.940 +	query_patch_close (router);
  80.941 +
  80.942 +	free (router->table);
  80.943 +	free (router);
  80.944 +}
  80.945 +
  80.946 +/*****************************************************************************/
  80.947 +
  80.948 +static void print_hex (unsigned char *data, size_t size)
  80.949 +{
  80.950 +	fprint_hex (stdout, data, size);
  80.951 +}
  80.952 +
  80.953 +void gt_query_router_update (GtQueryRouter *router, size_t seq_num,
  80.954 +                             size_t seq_size, int compressed, int bits,
  80.955 +                             unsigned char *zdata, size_t size)
  80.956 +{
  80.957 +	GtQueryPatch *patch;
  80.958 +	char         *data;
  80.959 +
  80.960 +	if (!router)
  80.961 +	{
  80.962 +		GT->DBGFN (GT, "null router");
  80.963 +		return;
  80.964 +	}
  80.965 +
  80.966 +	if (!router->patch)
  80.967 +	{
  80.968 +		if (!query_patch_open (router, seq_size, compressed, router->size))
  80.969 +			return;
  80.970 +	}
  80.971 +
  80.972 +	patch = router->patch;
  80.973 +
  80.974 +	/* check for an invalid sequence number or size */
  80.975 +	if (patch->seq_size != seq_size || patch->seq_num != seq_num)
  80.976 +	{
  80.977 +		GT->DBGFN (GT, "bad patch: seq_size %u vs %u, seq_num %u vs %u",
  80.978 +		           patch->seq_size, seq_size, patch->seq_num, seq_num);
  80.979 +		query_patch_close (router);
  80.980 +		return;
  80.981 +	}
  80.982 +
  80.983 +	if (compressed != patch->compressed)
  80.984 +	{
  80.985 +		GT->DBGFN (GT, "tried to change encodings in patch");
  80.986 +		query_patch_close (router);
  80.987 +		return;
  80.988 +	}
  80.989 +
  80.990 +	switch (compressed)
  80.991 +	{
  80.992 +	 case 0x00: /* no compression */
  80.993 +		if (!zlib_stream_write (patch->stream, zdata, size))
  80.994 +		{
  80.995 +			GT->DBGFN (GT, "error copying data");
  80.996 +			query_patch_close (router);
  80.997 +			return;
  80.998 +		}
  80.999 +
 80.1000 +		break;
 80.1001 +
 80.1002 +	 case 0x01: /* deflate */
 80.1003 +		printf ("zlib compressed data:\n");
 80.1004 +		print_hex (zdata, size);
 80.1005 +
 80.1006 +		if (!zlib_stream_inflate (patch->stream, zdata, size))
 80.1007 +		{
 80.1008 +			GT->DBGFN (GT, "error inflating data");
 80.1009 +			query_patch_close (router);
 80.1010 +			return;
 80.1011 +		}
 80.1012 +
 80.1013 +		break;
 80.1014 +
 80.1015 +	 default:
 80.1016 +		GT->DBGFN (GT, "unknown compression algorithm in query route patch");
 80.1017 +		return;
 80.1018 +	}
 80.1019 +
 80.1020 +	/* read the data in the stream */
 80.1021 +	if (!(size = zlib_stream_read (patch->stream, &data)))
 80.1022 +	{
 80.1023 +		GT->DBGFN (GT, "error calling zlib_stream_read");
 80.1024 +		query_patch_close (router);
 80.1025 +		return;
 80.1026 +	}
 80.1027 +
 80.1028 +	printf ("after uncompressing:\n");
 80.1029 +	print_hex (data, size);
 80.1030 +
 80.1031 +	/* apply the patch -- this will cleanup any data if necessary */
 80.1032 +	query_patch_apply (router, bits, data, size);
 80.1033 +
 80.1034 +	print_hex (router->table, router->size);
 80.1035 +}
 80.1036 +
 80.1037 +/*****************************************************************************/
 80.1038 +
 80.1039 +static void submit_empty_table (TCPC *c)
 80.1040 +{
 80.1041 +	static char table[8] = { 0 };
 80.1042 +	int         len;
 80.1043 +
 80.1044 +#if 0
 80.1045 +	size_t      size;
 80.1046 +#endif
 80.1047 +
 80.1048 +	GT->DBGFN (GT, "reseting route table for %s", net_ip_str (GT_NODE(c)->ip));
 80.1049 +
 80.1050 +	/* all slots in the table should be initialized to infinity, so it
 80.1051 +	 * should be "empty" on the remote node */
 80.1052 +	memset (table, 0, sizeof (table));
 80.1053 +
 80.1054 +
 80.1055 +#if 0
 80.1056 +	/* TEST: set part of the table to -infinity to get queries */
 80.1057 +	size = sizeof (table);
 80.1058 +	memset (table + (size + 1) / 2 - 1, -infinity, (size + 1) / 4);
 80.1059 +#endif
 80.1060 +
 80.1061 +	/* format: <query-route-msg-type> <length of table> <infinity> */
 80.1062 +	if (gt_packet_send_fmt (c, GT_MSG_QUERY_ROUTE, NULL, 1, 0,
 80.1063 +	                        "%c%lu%c", 0, (unsigned long) sizeof (table),
 80.1064 +	                        INFINITY) < 0)
 80.1065 +	{
 80.1066 +		GT->DBGFN (GT, "error reseting table");
 80.1067 +		return;
 80.1068 +	}
 80.1069 +
 80.1070 +	len = sizeof (table);
 80.1071 +
 80.1072 +	if (gt_packet_send_fmt (c, GT_MSG_QUERY_ROUTE, NULL, 1, 0,
 80.1073 +	                        "%c%c%c%c%c%*p",
 80.1074 +	                        1, 1, 1, 0, 8, len, table) < 0)
 80.1075 +	{
 80.1076 +		GT->DBGFN (GT, "error sending empty patch");
 80.1077 +		return;
 80.1078 +	}
 80.1079 +}
 80.1080 +
 80.1081 +static void submit_table (TCPC *c, uint8_t *table, size_t size, size_t slots)
 80.1082 +{
 80.1083 +	int       infinity   = INFINITY;
 80.1084 +	int       seq_size;
 80.1085 +	int       compressed;
 80.1086 +	int       seq_num;
 80.1087 +	uint8_t  *p;
 80.1088 +	size_t    send_size;
 80.1089 +
 80.1090 +	/* XXX make table size settable at runtime */
 80.1091 +
 80.1092 +	/* send a reset table first */
 80.1093 +	if (gt_packet_send_fmt (c, GT_MSG_QUERY_ROUTE, NULL, 1, 0,
 80.1094 +	                        "%c%lu%c", 0, (long)slots, infinity) < 0)
 80.1095 +	{
 80.1096 +		GT->DBGFN (GT, "error reseting table");
 80.1097 +		return;
 80.1098 +	}
 80.1099 +
 80.1100 +	/* Break the table into PATCH_FRAGSIZE-sized chunks,
 80.1101 +	 * and include any leftover portions. */
 80.1102 +	seq_size = size / PATCH_FRAGSIZE +
 80.1103 +	           (size % PATCH_FRAGSIZE == 0 ? 0 : 1);
 80.1104 +
 80.1105 +	assert (seq_size < 256);
 80.1106 +#if 0
 80.1107 +	GT->dbg (GT, "sequence size: %u", seq_size);
 80.1108 +#endif
 80.1109 +
 80.1110 +	p = table;
 80.1111 +	compressed = TRUE;
 80.1112 +
 80.1113 +	/* NOTE: patch sequence numbers start at 1 */
 80.1114 +	for (seq_num = 1; seq_num <= seq_size; seq_num++)
 80.1115 +	{
 80.1116 +		send_size = MIN (PATCH_FRAGSIZE, size);
 80.1117 +
 80.1118 +		if (gt_packet_send_fmt (c, GT_MSG_QUERY_ROUTE, NULL, 1, 0,
 80.1119 +		                        "%c%c%c%c%c%*p",
 80.1120 +		                        /* QRP PATCH */ 1,
 80.1121 +		                        seq_num, seq_size, compressed,
 80.1122 +		                        /* bits */ PATCH_BITS,
 80.1123 +		                        send_size, p) < 0)
 80.1124 +		{
 80.1125 +			GT->DBGFN (GT, "error sending QRT patch");
 80.1126 +			return;
 80.1127 +		}
 80.1128 +
 80.1129 +		size -= send_size;
 80.1130 +		p += send_size;
 80.1131 +	}
 80.1132 +}
 80.1133 +
 80.1134 +static BOOL update_qr_table (TCPC *c)
 80.1135 +{
 80.1136 +	size_t     size;
 80.1137 +	int        version;
 80.1138 +	uint8_t   *table;
 80.1139 +	GtNode    *node       = GT_NODE(c);
 80.1140 +
 80.1141 +	assert (node->state & GT_NODE_CONNECTED);
 80.1142 +
 80.1143 +	table = gt_query_router_self (&size, &version);
 80.1144 +
 80.1145 +	/* we may not have finished building a table yet */
 80.1146 +	if (!table)
 80.1147 +		return TRUE;
 80.1148 +
 80.1149 +	/* dont submit a table if this node is already up to date */
 80.1150 +	if (node->query_router_counter == version)
 80.1151 +		return TRUE;
 80.1152 +
 80.1153 +	/* HACK: this shouldn't be using compressed_slots */
 80.1154 +	submit_table (c, table, size, compressed_slots);
 80.1155 +
 80.1156 +	/* store the version number of this table so
 80.1157 +	 * we dont resubmit unecessarily */
 80.1158 +	node->query_router_counter = version;
 80.1159 +
 80.1160 +	return TRUE;
 80.1161 +}
 80.1162 +
 80.1163 +static BOOL submit_first_table (TCPC *c)
 80.1164 +{
 80.1165 +	GtNode *node = GT_NODE(c);
 80.1166 +
 80.1167 +	assert (node->state & GT_NODE_CONNECTED);
 80.1168 +
 80.1169 +	update_qr_table (c);
 80.1170 +
 80.1171 +	/* remove the first timer */
 80.1172 +	timer_remove (node->query_route_timer);
 80.1173 +
 80.1174 +	/* set the timer for updating the table repeatedly */
 80.1175 +	node->query_route_timer = timer_add (QRT_UPDATE_INTERVAL, 
 80.1176 +	                                     (TimerCallback)update_qr_table, c);
 80.1177 +
 80.1178 +	/* we removed the timer, and must return FALSE */
 80.1179 +	return FALSE;
 80.1180 +}
 80.1181 +
 80.1182 +/*
 80.1183 + * Submit the query routing table for this node to another.
 80.1184 + * 
 80.1185 + * This delays sending the table for while. This helps preserve our precious
 80.1186 + * upstream when we're looking for nodes to connect to, as this often
 80.1187 + * happens when we're in the middle of looking for more nodes.
 80.1188 + */
 80.1189 +void query_route_table_submit (TCPC *c)
 80.1190 +{
 80.1191 +	GtNode *node = GT_NODE(c);
 80.1192 +
 80.1193 +	assert (node->query_route_timer == 0);
 80.1194 +
 80.1195 +	/* save bandwidth with an empty table */
 80.1196 +	submit_empty_table (c);
 80.1197 +
 80.1198 +	/* submit a real table later */
 80.1199 +	node->query_route_timer = timer_add (QRT_SUBMIT_DELAY,
 80.1200 +	                                     (TimerCallback)submit_first_table, c);
 80.1201 +}
 80.1202 +
 80.1203 +/*****************************************************************************/
 80.1204 +/* TESTING */
 80.1205 +
 80.1206 +#if 0
 80.1207 +#define CHECK(x) do { \
 80.1208 +	if (!(x)) printf("FAILED: %s\n", #x); \
 80.1209 +	else printf("OK: %s\n", #x); \
 80.1210 +} while (0)
 80.1211 +
 80.1212 +#define HASH(str, bits) \
 80.1213 +	printf ("hash " str ": %u\n", gt_query_router_hash_str (str, bits))
 80.1214 +
 80.1215 +int main (int argc, char **argv)
 80.1216 +{
 80.1217 +#define hash gt_query_router_hash_str
 80.1218 +
 80.1219 +	CHECK(hash("", 13)==0);
 80.1220 +	CHECK(hash("eb", 13)==6791);
 80.1221 +	CHECK(hash("ebc", 13)==7082);
 80.1222 +	CHECK(hash("ebck", 13)==6698);
 80.1223 +	CHECK(hash("ebckl", 13)==3179);
 80.1224 +	CHECK(hash("ebcklm", 13)==3235);
 80.1225 +	CHECK(hash("ebcklme", 13)==6438);
 80.1226 +	CHECK(hash("ebcklmen", 13)==1062);
 80.1227 +	CHECK(hash("ebcklmenq", 13)==3527);
 80.1228 +	CHECK(hash("", 16)==0);
 80.1229 +	CHECK(hash("n", 16)==65003);
 80.1230 +	CHECK(hash("nd", 16)==54193);
 80.1231 +	CHECK(hash("ndf", 16)==4953);
 80.1232 +	CHECK(hash("ndfl", 16)==58201);
 80.1233 +	CHECK(hash("ndfla", 16)==34830);
 80.1234 +	CHECK(hash("ndflal", 16)==36910);
 80.1235 +	CHECK(hash("ndflale", 16)==34586);
 80.1236 +	CHECK(hash("ndflalem", 16)==37658);
 80.1237 +	CHECK(hash("FAIL", 16)==37458);	// WILL FAIL
 80.1238 +	CHECK(hash("ndflaleme", 16)==45559);
 80.1239 +	CHECK(hash("ol2j34lj", 10)==318);
 80.1240 +	CHECK(hash("asdfas23", 10)==503);
 80.1241 +	CHECK(hash("9um3o34fd", 10)==758);
 80.1242 +	CHECK(hash("a234d", 10)==281);
 80.1243 +	CHECK(hash("a3f", 10)==767);
 80.1244 +	CHECK(hash("3nja9", 10)==581);
 80.1245 +	CHECK(hash("2459345938032343", 10)==146);
 80.1246 +	CHECK(hash("7777a88a8a8a8", 10)==342);
 80.1247 +	CHECK(hash("asdfjklkj3k", 10)==861);
 80.1248 +	CHECK(hash("adfk32l", 10)==1011);
 80.1249 +	CHECK(hash("zzzzzzzzzzz", 10)==944);
 80.1250 +
 80.1251 +	CHECK(hash("3nja9", 10)==581);
 80.1252 +	CHECK(hash("3NJA9", 10)==581);
 80.1253 +	CHECK(hash("3nJa9", 10)==581);
 80.1254 +
 80.1255 +	printf ("hash(FAIL, 16) = %u\n", hash("FAIL", 16));
 80.1256 +	return 0;
 80.1257 +}
 80.1258 +#endif
    81.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    81.2 +++ b/src/gt_query_route.h	Sat Feb 20 21:18:28 2010 -0800
    81.3 @@ -0,0 +1,87 @@
    81.4 +/*
    81.5 + * $Id: gt_query_route.h,v 1.12 2003/09/22 21:11:10 hipnod Exp $
    81.6 + *
    81.7 + * Copyright (C) 2001-2003 giFT project (gift.sourceforge.net)
    81.8 + *
    81.9 + * This program is free software; you can redistribute it and/or modify it
   81.10 + * under the terms of the GNU General Public License as published by the
   81.11 + * Free Software Foundation; either version 2, or (at your option) any
   81.12 + * later version.
   81.13 + *
   81.14 + * This program is distributed in the hope that it will be useful, but
   81.15 + * WITHOUT ANY WARRANTY; without even the implied warranty of
   81.16 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
   81.17 + * General Public License for more details.
   81.18 + */
   81.19 +
   81.20 +#ifndef __GT_QUERY_ROUTE_H__
   81.21 +#define __GT_QUERY_ROUTE_H__
   81.22 +
   81.23 +/*****************************************************************************/
   81.24 +
   81.25 +/*
   81.26 + * Delimiters for words in the query-router protocol hash function.
   81.27 + * This is what LimeWire uses.
   81.28 + */
   81.29 +#define QRP_DELIMITERS       " -._+/*()\\/"
   81.30 +
   81.31 +/*****************************************************************************/
   81.32 +
   81.33 +struct gt_packet;
   81.34 +struct gt_zlib_stream;
   81.35 +
   81.36 +typedef struct gt_query_router GtQueryRouter;
   81.37 +typedef struct gt_query_patch  GtQueryPatch;
   81.38 +
   81.39 +struct gt_query_patch
   81.40 +{
   81.41 +	int       seq_size;
   81.42 +	int       seq_num;
   81.43 +	int       compressed;
   81.44 +
   81.45 +	/* where the last patch left off in the table */
   81.46 +	int       table_pos;
   81.47 +
   81.48 +	struct gt_zlib_stream  *stream;
   81.49 +};
   81.50 +
   81.51 +struct gt_query_router
   81.52 +{
   81.53 +	char          *table;
   81.54 +	size_t         size;
   81.55 +
   81.56 +	GtQueryPatch  *patch;
   81.57 +};
   81.58 +
   81.59 +/*****************************************************************************/
   81.60 +
   81.61 +uint32_t          gt_query_router_hash_str (char *words, size_t bits);
   81.62 +
   81.63 +/*****************************************************************************/
   81.64 +
   81.65 +void              gt_query_router_self_init    (void);
   81.66 +void              gt_query_router_self_destroy (void);
   81.67 +uint8_t          *gt_query_router_self         (size_t *size, int *version);
   81.68 +void              gt_query_router_self_add     (Share *share);
   81.69 +void              gt_query_router_self_remove  (Share *share);
   81.70 +void              gt_query_router_self_sync    (BOOL begin);
   81.71 +
   81.72 +/*****************************************************************************/
   81.73 +
   81.74 +GtQueryRouter *gt_query_router_new    (size_t size, int infinity);
   81.75 +void           gt_query_router_free   (GtQueryRouter *router);
   81.76 +
   81.77 +void           gt_query_router_update (GtQueryRouter *router, 
   81.78 +                                       size_t seq_num, size_t seq_size, 
   81.79 +                                       int compressed, int bits, 
   81.80 +                                       unsigned char *zdata, size_t size);
   81.81 +
   81.82 +
   81.83 +/*****************************************************************************/
   81.84 +
   81.85 +void    query_route_table_submit   (TCPC *c);
   81.86 +void    query_route_table_reset    (TCPC *c);
   81.87 +
   81.88 +/*****************************************************************************/
   81.89 +
   81.90 +#endif /* __GT_QUERY_ROUTE_H__ */
    82.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    82.2 +++ b/src/gt_search.c	Sat Feb 20 21:18:28 2010 -0800
    82.3 @@ -0,0 +1,732 @@
    82.4 +/*
    82.5 + * $Id: gt_search.c,v 1.60 2004/11/29 12:32:12 mkern Exp $
    82.6 + *
    82.7 + * Copyright (C) 2001-2003 giFT project (gift.sourceforge.net)
    82.8 + *
    82.9 + * This program is free software; you can redistribute it and/or modify it
   82.10 + * under the terms of the GNU General Public License as published by the
   82.11 + * Free Software Foundation; either version 2, or (at your option) any
   82.12 + * later version.
   82.13 + *
   82.14 + * This program is distributed in the hope that it will be useful, but
   82.15 + * WITHOUT ANY WARRANTY; without even the implied warranty of
   82.16 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
   82.17 + * General Public License for more details.
   82.18 + */
   82.19 +
   82.20 +#include "gt_gnutella.h"
   82.21 +
   82.22 +#include "gt_node.h"
   82.23 +#include "gt_node_list.h"
   82.24 +#include "gt_share.h"
   82.25 +#include "gt_share_file.h"
   82.26 +#include "gt_packet.h"
   82.27 +#include "gt_search.h"
   82.28 +#include "gt_xfer.h"
   82.29 +
   82.30 +#include "sha1.h"
   82.31 +
   82.32 +#include "encoding/url.h"           /* gt_url_decode */
   82.33 +
   82.34 +#include "transfer/download.h"
   82.35 +#include "transfer/source.h"
   82.36 +
   82.37 +#include <libgift/mime.h>
   82.38 +
   82.39 +/******************************************************************************/
   82.40 +
   82.41 +/* how often we check if the search has timed out */
   82.42 +#define   TIMEOUT_CHECK_INTERVAL (20 * SECONDS)
   82.43 +
   82.44 +/* after this many results, no more search submissions will occur */
   82.45 +#define   RESULTS_BACKOFF        (200)
   82.46 +
   82.47 +/*
   82.48 + * Gnutella searches don't notify when they are done. So, we close the
   82.49 + * search after the following critieria are met:
   82.50 + *
   82.51 + *   - we have submitted the search to at least 3 Ultrapeers
   82.52 + *     [MIN_NODES]
   82.53 + *   - at least 3 minutes have passed since we last submitted to an ultrapeer
   82.54 + *     [MIN_SUBMIT_WAIT]
   82.55 + *   - no results have been seen in the last minute
   82.56 + *     [MIN_RESULT_WAIT]
   82.57 + *
   82.58 + * This means the fastest we'll time out a search is 3 minutes if
   82.59 + * we submit to 3 ultrapeers immediately and get no results within
   82.60 + * 1 minute of the 3 minute time limit.
   82.61 + *
   82.62 + * For hash searches, we wait for 2 * MIN_SUBMIT_WAIT, because the other
   82.63 + * factors won't come into play.
   82.64 + *
   82.65 + * There is also a large timeout for searches that receive no results
   82.66 + * [ANCIENT_TIME].  Searches that exceed this age and haven't received
   82.67 + * any results in the same time will automatically be cancelled, regardless of
   82.68 + * other critieria.
   82.69 + */
   82.70 +#define MIN_NODES             (3)             /* ultrapeers */
   82.71 +#define MIN_SUBMIT_WAIT       (3 * EMINUTES)
   82.72 +#define MIN_RESULT_WAIT       (1 * EMINUTES)
   82.73 +#define ANCIENT_TIME          (10 * EMINUTES)
   82.74 +
   82.75 +/******************************************************************************/
   82.76 +
   82.77 +/* active keyword and hash searches from this node */
   82.78 +static List   *active_searches;
   82.79 +
   82.80 +/* probability of the next hash search not being dropped */
   82.81 +static double  locate_pass_prob;
   82.82 +
   82.83 +/******************************************************************************/
   82.84 +
   82.85 +static BOOL finish_search (GtSearch *search)
   82.86 +{
   82.87 +	GT->DBGFN (GT, "search query for \"%s\" timed out", search->query);
   82.88 +	gt_search_free (search);
   82.89 +	return FALSE;
   82.90 +}
   82.91 +
   82.92 +static BOOL search_is_ancient (GtSearch *search, time_t now)
   82.93 +{
   82.94 +	if (difftime (now, search->start) < ANCIENT_TIME)
   82.95 +		return FALSE;
   82.96 +
   82.97 +	/*
   82.98 +	 * If the search is greater than ANCIENT_TIME and hasn't received
   82.99 +	 * a result in the same time, consider it ancient.
  82.100 +	 */
  82.101 +	if (search->last_result == 0)
  82.102 +		return TRUE;
  82.103 +
  82.104 +	if (difftime (now, search->last_result) >= ANCIENT_TIME)
  82.105 +		return TRUE;
  82.106 +
  82.107 +	return FALSE;
  82.108 +}
  82.109 +
  82.110 +/*
  82.111 + * search_timeout: check if the search needs to be closed.
  82.112 + *
  82.113 + * Its impossible to guarantee this will not close the search too early.
  82.114 + * It is more likely to miss results if bandwidth is being dedicated to
  82.115 + * other purposes besides reading Gnutella messages, or if the TTL and
  82.116 + * consequently the latency of the search is high.
  82.117 + *
  82.118 + * TODO: this should take into account that we may have disconnected
  82.119 + *       from the nodes we submitted the search to. Perhaps, have
  82.120 + *       a list of the submitted nodes, and make sure the list len >=
  82.121 + *       MIN_NODES (but this may run into trouble with not submitting
  82.122 + *       searches with results >= RESULTS_BACKOFF...)
  82.123 + */
  82.124 +static BOOL search_timeout (GtSearch *search)
  82.125 +{
  82.126 +	time_t now;
  82.127 +	double submit_wait;
  82.128 +	double result_wait;
  82.129 +
  82.130 +	time (&now);
  82.131 +
  82.132 +	/* check if this search is really old and should be expired */
  82.133 +	if (search_is_ancient (search, now))
  82.134 +		return finish_search (search);
  82.135 +
  82.136 +	if (search->submitted < MIN_NODES)
  82.137 +		return TRUE;
  82.138 +
  82.139 +	submit_wait = MIN_SUBMIT_WAIT;
  82.140 +	result_wait = MIN_RESULT_WAIT;
  82.141 +
  82.142 +	/* hash searches get very few results, so give them a longer base time */
  82.143 +	if (search->type == GT_SEARCH_HASH)
  82.144 +		submit_wait *= 2;
  82.145 +
  82.146 +	/*
  82.147 +	 * If the search has lots of results, don't wait as long.
  82.148 +	 *
  82.149 +	 * RESULTS_BACKOFF is a conservative value for not submitting to other
  82.150 +	 * nodes when we already have plenty of results, and we want to be a
  82.151 +	 * little less conservative here, so multiply RESULTS_BACKOFF by 2.
  82.152 +	 */
  82.153 +	if (search->results >= 2 * RESULTS_BACKOFF)
  82.154 +	{
  82.155 +		submit_wait /= 2;
  82.156 +		result_wait /= 2;
  82.157 +	}
  82.158 +
  82.159 +	if (difftime (now, search->last_submit) < submit_wait)
  82.160 +		return TRUE;
  82.161 +
  82.162 +	if (difftime (now, search->last_result) < result_wait)
  82.163 +		return TRUE;
  82.164 +
  82.165 +	/* the search has timed out */
  82.166 +	return finish_search (search);
  82.167 +}
  82.168 +
  82.169 +/*****************************************************************************/
  82.170 +
  82.171 +GtSearch *gt_search_new (IFEvent *event, char *query, gt_search_type_t type)
  82.172 +{
  82.173 +	GtSearch *search;
  82.174 +
  82.175 +	if (!(search = malloc (sizeof (GtSearch))))
  82.176 +		return NULL;
  82.177 +
  82.178 +	memset (search, 0, sizeof (GtSearch));
  82.179 +
  82.180 +	search->event   = event;
  82.181 +	search->type    = type;
  82.182 +	search->guid    = gt_guid_new ();
  82.183 +	search->query   = STRDUP (query);
  82.184 +	search->results = 0;
  82.185 +	search->start   = time (NULL);
  82.186 +
  82.187 +	search->timeout_timer = timer_add (TIMEOUT_CHECK_INTERVAL,
  82.188 +	                                   (TimerCallback)search_timeout,
  82.189 +	                                   search);
  82.190 +
  82.191 +	GT->DBGFN (GT, "new search \"%s\"", query);
  82.192 +
  82.193 +	active_searches = list_prepend (active_searches, search);
  82.194 +
  82.195 +	return search;
  82.196 +}
  82.197 +
  82.198 +void gt_search_free (GtSearch *search)
  82.199 +{
  82.200 +	if (!search)
  82.201 +		return;
  82.202 +
  82.203 +	if (!list_find (active_searches, search))
  82.204 +	{
  82.205 +		GIFT_ERROR (("couldn't find search %p (query:'%s')",
  82.206 +		              search, search->query));
  82.207 +		return;
  82.208 +	}
  82.209 +
  82.210 +	if (search->timeout_timer)
  82.211 +		timer_remove (search->timeout_timer);
  82.212 +
  82.213 +	if (search->event)
  82.214 +		GT->search_complete (GT, search->event);
  82.215 +
  82.216 +	/* NOTE: search_complete may have removed the search by calling
  82.217 +	 * gt_search_disable */
  82.218 +	active_searches = list_remove (active_searches, search);
  82.219 +
  82.220 +	free (search->hash);
  82.221 +	free (search->realm);
  82.222 +	free (search->guid);
  82.223 +	free (search->query);
  82.224 +	free (search);
  82.225 +}
  82.226 +
  82.227 +static int find_by_event (GtSearch *search, IFEvent *event)
  82.228 +{
  82.229 +	if (search->event == event)
  82.230 +		return 0;
  82.231 +
  82.232 +	return -1;
  82.233 +}
  82.234 +
  82.235 +void gt_search_disable (IFEvent *event)
  82.236 +{
  82.237 +	List      *ls;
  82.238 +	GtSearch  *search;
  82.239 +
  82.240 +	ls = list_find_custom (active_searches, event,
  82.241 +	                       (CompareFunc) find_by_event);
  82.242 +
  82.243 +	if (!ls)
  82.244 +	{
  82.245 +		GT->DBGFN (GT, "didnt find search id %p", (long) event);
  82.246 +		return;
  82.247 +	}
  82.248 +
  82.249 +	search = ls->data;
  82.250 +
  82.251 +	GT->DBGFN (GT, "disabled search event %p (query '%s')", event, search->query);
  82.252 +	search->event = NULL;
  82.253 +}
  82.254 +
  82.255 +/******************************************************************************/
  82.256 +
  82.257 +static int find_by_guid (GtSearch *a, GtSearch *b)
  82.258 +{
  82.259 +	return gt_guid_cmp (a->guid, b->guid);
  82.260 +}
  82.261 +
  82.262 +GtSearch *gt_search_find (gt_guid_t *guid)
  82.263 +{
  82.264 +	GtSearch  key;
  82.265 +	List     *l;
  82.266 +
  82.267 +	key.guid = guid;
  82.268 +
  82.269 +	l = list_find_custom (active_searches, &key, (CompareFunc) find_by_guid);
  82.270 +
  82.271 +	if (!l)
  82.272 +		return NULL;
  82.273 +
  82.274 +	return l->data;
  82.275 +}
  82.276 +
  82.277 +static BOOL search_matches_realm (GtSearch *search, GtShare *share)
  82.278 +{
  82.279 +	char *mime;
  82.280 +
  82.281 +	if (!search->realm)
  82.282 +		return TRUE;
  82.283 +
  82.284 +	if (!(mime = mime_type (share->filename)))
  82.285 +		return FALSE;
  82.286 +
  82.287 +	if (strstr (mime, search->realm))
  82.288 +		return TRUE;
  82.289 +
  82.290 +	if (!STRCMP (search->realm, "text"))
  82.291 +	{
  82.292 +		/* HACK: special case application/pdf */
  82.293 +		if (strstr (mime, "pdf"))
  82.294 +			return TRUE;
  82.295 +
  82.296 +		/* HACK: special case application/msword */
  82.297 +		if (strstr (mime, "doc"))
  82.298 +			return TRUE;
  82.299 +	}
  82.300 +
  82.301 +	return FALSE;
  82.302 +}
  82.303 +
  82.304 +static BOOL search_matches_hash (GtSearch *search, Share *file)
  82.305 +{
  82.306 +	Hash *hash;
  82.307 +	char *str;
  82.308 +	int   ret;
  82.309 +
  82.310 +	if (search->type != GT_SEARCH_HASH)
  82.311 +		return TRUE;
  82.312 +
  82.313 +	if (!(hash = share_get_hash (file, "SHA1")))
  82.314 +	{
  82.315 +		GT->DBGFN (GT, "bad result for hash query");
  82.316 +		return FALSE;
  82.317 +	}
  82.318 +
  82.319 +	if (!(str = hash_dsp (hash)))
  82.320 +		return FALSE;
  82.321 +
  82.322 +	ret = strcmp (search->hash, hashstr_data (str));
  82.323 +
  82.324 +	free (str);
  82.325 +
  82.326 +	return (ret == 0);
  82.327 +}
  82.328 +
  82.329 +/*
  82.330 + * We have to filter out backslashes from the name to workaround a bug
  82.331 + * in lib/file.c.
  82.332 + */
  82.333 +static void set_display_name (Share *share, const char *path)
  82.334 +{
  82.335 +	char *p;
  82.336 +	char *disp_name;
  82.337 +
  82.338 +	if (!(p = disp_name = STRDUP (path)))
  82.339 +		return;
  82.340 +
  82.341 +	while (*p)
  82.342 +	{
  82.343 +		if (*p == '\\')
  82.344 +			*p = '_';
  82.345 +		p++;
  82.346 +	}
  82.347 +
  82.348 +	/* NOTE: this makes the GtShare->filename invalid because it shares memory
  82.349 +	 * with the Share */
  82.350 +	share_set_path (share, disp_name);
  82.351 +	free (disp_name);
  82.352 +}
  82.353 +
  82.354 +void gt_search_reply (GtSearch *search, TCPC *c, in_addr_t host,
  82.355 +                      in_port_t gt_port, gt_guid_t *client_guid,
  82.356 +                      int availability, BOOL firewalled,
  82.357 +                      FileShare *file)
  82.358 +{
  82.359 +	char       server[128];
  82.360 +	char      *url;
  82.361 +	char      *host_str;
  82.362 +	char      *path;
  82.363 +	GtShare   *share;
  82.364 +	GtNode    *node;
  82.365 +	BOOL       is_local;
  82.366 +
  82.367 +	node = GT_NODE(c);
  82.368 +
  82.369 +	if (!search->event)
  82.370 +		return;
  82.371 +
  82.372 +	if (gt_is_local_ip (host, node->ip))
  82.373 +		is_local = TRUE;
  82.374 +	else
  82.375 +		is_local = FALSE;
  82.376 +
  82.377 +	/* derive firewalled status if the address is local */
  82.378 +	if (is_local)
  82.379 +		firewalled = TRUE;
  82.380 +
  82.381 +	/* if they are firewalled and so are we, don't bother.
  82.382 +	 * NOTE: if we have a download proxy, we shouldnt do this */
  82.383 +	if (firewalled && GT_SELF->firewalled)
  82.384 +		return;
  82.385 +
  82.386 +	if (!(share = share_get_udata (file, GT->name)))
  82.387 +		return;
  82.388 +
  82.389 +	/* check if the mimetype for the result matches the query (i.e. this does
  82.390 +	 * client-side filtering) */
  82.391 +	if (!search_matches_realm (search, share))
  82.392 +		return;
  82.393 +
  82.394 +	/* match against the hash if this is a hash search */
  82.395 +	if (!search_matches_hash (search, file))
  82.396 +		return;
  82.397 +
  82.398 +	/* get the whole path (result may have '/' separators) */
  82.399 +	path = file->path;
  82.400 +	assert (path != NULL);
  82.401 +
  82.402 +	url = gt_source_url_new (path, share->index, host, gt_port,
  82.403 +	                         node->ip, node->gt_port,
  82.404 +	                         firewalled, client_guid);
  82.405 +
  82.406 +	if (!url)
  82.407 +		return;
  82.408 +
  82.409 +	/* workaround bug in lib/file.c */
  82.410 +	set_display_name (file, path);
  82.411 +
  82.412 +	/* print out the server data so we know which connection to
  82.413 +	 * talk to when sending a push request */
  82.414 +	snprintf (server, sizeof (server) - 1, "%s:%hu",
  82.415 +	          net_ip_str (node->ip), node->gt_port);
  82.416 +
  82.417 +	if (is_local)
  82.418 +	{
  82.419 +		/* use the Client GUID for the user if the remote connection is
  82.420 +		 * on the Internet and the host is 0 or local */
  82.421 +		host_str = stringf_dup ("%s@%s", net_ip_str (host),
  82.422 +		                        gt_guid_str (client_guid));
  82.423 +	}
  82.424 +	else
  82.425 +	{
  82.426 +		/* Just use a plain host for cleanliness */
  82.427 +		host_str = stringf_dup ("%s", net_ip_str (host));
  82.428 +	}
  82.429 +
  82.430 +	GT->search_result (GT, search->event, host_str, server,
  82.431 +	                   url, availability, file);
  82.432 +
  82.433 +	/* update statistics */
  82.434 +	search->results++;
  82.435 +	time (&search->last_result);
  82.436 +
  82.437 +	free (host_str);
  82.438 +	free (url);
  82.439 +}
  82.440 +
  82.441 +/******************************************************************************/
  82.442 +
  82.443 +static uint8_t get_search_ttl (GtNode *node, gt_search_type_t type)
  82.444 +{
  82.445 +	char     *max_ttl;
  82.446 +	uint8_t   ttl     = 0;
  82.447 +
  82.448 +	if ((max_ttl = dataset_lookupstr (node->hdr, "x-max-ttl")))
  82.449 +		ttl = ATOI (max_ttl);
  82.450 +
  82.451 +	if (ttl > GT_SEARCH_TTL || ttl == 0)
  82.452 +		ttl = GT_SEARCH_TTL;
  82.453 +
  82.454 +	/* ok because locates are rate-limited */
  82.455 +#if 0
  82.456 +	if (type == GT_SEARCH_HASH)
  82.457 +		ttl = 1;
  82.458 +#endif
  82.459 +
  82.460 +	return ttl;
  82.461 +}
  82.462 +
  82.463 +static TCPC *broadcast_search (TCPC *c, GtNode *node, GtSearch *search)
  82.464 +{
  82.465 +	gt_query_flags_t flags;
  82.466 +	uint8_t          ttl;
  82.467 +	char            *hash = NULL;
  82.468 +	GtPacket        *pkt;
  82.469 +
  82.470 +	/* set this query as having flags to be interpolated */
  82.471 +	flags = QF_HAS_FLAGS;
  82.472 +
  82.473 +	/* request that only non-firewalled nodes respond if we are firewalled
  82.474 +	 * NOTE: if we ever support a download proxy, need to unset this */
  82.475 +	if (GT_SELF->firewalled)
  82.476 +		flags |= QF_ONLY_NON_FW;
  82.477 +
  82.478 +#ifdef USE_LIBXML2
  82.479 +	flags |= QF_WANTS_XML;
  82.480 +#endif /* USE_LIBXML2 */
  82.481 +
  82.482 +	ttl = get_search_ttl (node, search->type);
  82.483 +
  82.484 +	if (search->type == GT_SEARCH_HASH && !search->hash)
  82.485 +	{
  82.486 +		GT->DBGFN (GT, "trying to search for \"%s\" without a hash?!?",
  82.487 +		           search->query);
  82.488 +		return NULL;
  82.489 +	}
  82.490 +
  82.491 +	if (!(pkt = gt_packet_new (GT_MSG_QUERY, ttl, search->guid)))
  82.492 +		return NULL;
  82.493 +
  82.494 +	gt_packet_put_uint16 (pkt, flags);
  82.495 +	gt_packet_put_str    (pkt, search->query);
  82.496 +
  82.497 +	if (search->hash)
  82.498 +		hash = stringf_dup ("urn:sha1:%s", search->hash);
  82.499 +
  82.500 +	if (hash)
  82.501 +		gt_packet_put_str (pkt, hash);
  82.502 +
  82.503 +	gt_packet_send (c, pkt);
  82.504 +	gt_packet_free (pkt);
  82.505 +
  82.506 +	free (hash);
  82.507 +
  82.508 +	/* TODO: check error return from gt_packet_send_fmt! */
  82.509 +	search->submitted++;
  82.510 +	time (&search->last_submit);
  82.511 +
  82.512 +	return NULL;
  82.513 +}
  82.514 +
  82.515 +static BOOL submit_search (GtSearch *search, TCPC *c)
  82.516 +{
  82.517 +	if (search->results >= RESULTS_BACKOFF)
  82.518 +	{
  82.519 +		/* still count the search as submitted to this node */
  82.520 +		search->submitted++;
  82.521 +		return FALSE;
  82.522 +	}
  82.523 +
  82.524 +	broadcast_search (c, GT_NODE(c), search);
  82.525 +	return FALSE;
  82.526 +}
  82.527 +
  82.528 +static BOOL submit_searches (TCPC *c)
  82.529 +{
  82.530 +	list_foreach (active_searches, (ListForeachFunc)submit_search, c);
  82.531 +	GT_NODE(c)->search_timer = 0;
  82.532 +	return FALSE;
  82.533 +}
  82.534 +
  82.535 +static BOOL reset_submit (GtSearch *search, time_t *now)
  82.536 +{
  82.537 +	if (search->results >= RESULTS_BACKOFF)
  82.538 +		return FALSE;
  82.539 +
  82.540 +	search->last_submit = *now;
  82.541 +	return FALSE;
  82.542 +}
  82.543 +
  82.544 +void gt_searches_submit (TCPC *c, time_t delay_ms)
  82.545 +{
  82.546 +	time_t now;
  82.547 +
  82.548 +	/* reset each search timeout because we will submit each search soon */
  82.549 +	time (&now);
  82.550 +	list_foreach (active_searches, (ListForeachFunc)reset_submit, &now);
  82.551 +
  82.552 +	/* submit the searches once after a delay */
  82.553 +	if (!GT_NODE(c)->search_timer)
  82.554 +	{
  82.555 +		GT_NODE(c)->search_timer = timer_add (delay_ms,
  82.556 +		                                   (TimerCallback)submit_searches, c);
  82.557 +	}
  82.558 +}
  82.559 +
  82.560 +BOOL gnutella_search (Protocol *p, IFEvent *event, char *query, char *exclude,
  82.561 +                      char *realm, Dataset *meta)
  82.562 +{
  82.563 +	GtSearch *search;
  82.564 +
  82.565 +	search = gt_search_new (event, query, GT_SEARCH_KEYWORD);
  82.566 +	search->realm = STRDUP (realm);
  82.567 +
  82.568 +	gt_conn_foreach (GT_CONN_FOREACH(broadcast_search), search,
  82.569 +	                 GT_NODE_NONE, GT_NODE_CONNECTED, 0);
  82.570 +
  82.571 +	return TRUE;
  82.572 +}
  82.573 +
  82.574 +/*****************************************************************************/
  82.575 +
  82.576 +/*
  82.577 + * Using the hash, grab words to stuff in the query section by looking at the
  82.578 + * download list.
  82.579 + */
  82.580 +char *get_query_words (char *htype, char *hash)
  82.581 +{
  82.582 +	Source   *src;
  82.583 +	GtSource *gt_src;
  82.584 +	char     *dup;
  82.585 +
  82.586 +	if (htype && strcmp (htype, "SHA1") != 0)
  82.587 +	{
  82.588 +		GT->DBGFN (GT, "htype != \"SHA1\"!?: %s", htype);
  82.589 +		return NULL;
  82.590 +	}
  82.591 +
  82.592 +	/* HACK: need gift's prefix */
  82.593 +	if (!(dup = stringf_dup ("SHA1:%s", hash)))
  82.594 +		return NULL;
  82.595 +
  82.596 +	src = gt_download_lookup (dup);
  82.597 +	free (dup);
  82.598 +
  82.599 +	if (!src)
  82.600 +		return NULL;
  82.601 +
  82.602 +	if (!(gt_src = src->udata))
  82.603 +	{
  82.604 +		GT->DBGFN (GT, "gt_src == NULL?!?!");
  82.605 +		return NULL;
  82.606 +	}
  82.607 +
  82.608 +	return gt_url_decode (gt_src->filename);
  82.609 +}
  82.610 +
  82.611 +/*
  82.612 + * Returns TRUE if the current locate is ok to send and FALSE if it should be
  82.613 + * dropped to rate-limit locates.  To determine that, we assign the locate a
  82.614 + * "probability of passage".  Then we roll dice and if it's less than the
  82.615 + * probability, accept.
  82.616 + *
  82.617 + * For each locate attempt the probability of success for the next locate is
  82.618 + * halved, down to a minimum of 0.01%.  For each minute that passes since the
  82.619 + * last locate, the probability of the locate succeeding increases by 1%.
  82.620 + */
  82.621 +static BOOL should_send_locate (void)
  82.622 +{
  82.623 +	static time_t last_locate = 0;
  82.624 +	time_t        now;
  82.625 +	double        n;
  82.626 +	BOOL          passed;
  82.627 +
  82.628 +	time (&now);
  82.629 +
  82.630 +	if (last_locate == 0)
  82.631 +		locate_pass_prob = 100.0;
  82.632 +	else
  82.633 +		locate_pass_prob += difftime (now, last_locate) / (1.0 * EMINUTES);
  82.634 +
  82.635 +	last_locate = now;
  82.636 +
  82.637 +	if (locate_pass_prob > 100.0)
  82.638 +		locate_pass_prob = 100.0;
  82.639 +
  82.640 +	/* hmm, should this be removed? */
  82.641 +	if (locate_pass_prob < 0.01)
  82.642 +		locate_pass_prob = 0.01;
  82.643 +
  82.644 +	n = 100.0 * rand() / (RAND_MAX + 1.0);
  82.645 +
  82.646 +	GT->DBGFN (GT, "locate_pass_prob=%f n=%f", locate_pass_prob, n);
  82.647 +	passed = BOOL_EXPR (n < locate_pass_prob);
  82.648 +
  82.649 +	/* drop next chance of succeeding */
  82.650 +	locate_pass_prob /= 2;
  82.651 +
  82.652 +	return passed;
  82.653 +}
  82.654 +
  82.655 +BOOL gnutella_locate (Protocol *p, IFEvent *event, char *htype, char *hash)
  82.656 +{
  82.657 +	GtSearch      *search;
  82.658 +	unsigned char *bin;
  82.659 +	char          *fname;
  82.660 +
  82.661 +	/* Only locate hashes which are valid on Gnutella. */
  82.662 +	if (STRCMP (htype, "SHA1"))
  82.663 +		return FALSE;
  82.664 +
  82.665 +	GT->DBGFN (GT, "new hash search: %s", hash);
  82.666 +
  82.667 +	/* sha1_bin() needs a string of at least 32 characters */
  82.668 +	if (STRLEN (hash) < 32)
  82.669 +		return FALSE;
  82.670 +
  82.671 +	/* skip the hash if it's not parseable in base32 */
  82.672 +	if (!(bin = sha1_bin (hash)))
  82.673 +		return FALSE;
  82.674 +
  82.675 +	free (bin);
  82.676 +
  82.677 +	/* rate-limit locate searches to save bandwidth */
  82.678 +	if (should_send_locate () == FALSE)
  82.679 +	{
  82.680 +		GT->DBGFN (GT, "dropping locate for %s "
  82.681 +		           "(too many searches in short period)", hash);
  82.682 +		return FALSE;
  82.683 +	}
  82.684 +
  82.685 +	/* make sure the hash is uppercase (canonical form on Gnet) */
  82.686 +	string_upper (hash);
  82.687 +
  82.688 +	/*
  82.689 +	 * Look for a download with this hash, to put those words in the query to
  82.690 +	 * reduce the bandwidth consumed through QRP.
  82.691 +	 */
  82.692 +	if (!(fname = get_query_words (htype, hash)))
  82.693 +		fname = STRDUP ("");
  82.694 +
  82.695 +	if (!(search = gt_search_new (event, fname, GT_SEARCH_HASH)))
  82.696 +	{
  82.697 +		free (fname);
  82.698 +		return FALSE;
  82.699 +	}
  82.700 +
  82.701 +	free (fname);
  82.702 +
  82.703 +	search->hash = STRDUP (hash);
  82.704 +
  82.705 +	gt_conn_foreach (GT_CONN_FOREACH(broadcast_search), search, GT_NODE_NONE,
  82.706 +	                 GT_NODE_CONNECTED, 0);
  82.707 +
  82.708 +	return TRUE;
  82.709 +}
  82.710 +
  82.711 +void gnutella_search_cancel (Protocol *p, IFEvent *event)
  82.712 +{
  82.713 +	gt_search_disable (event);
  82.714 +}
  82.715 +
  82.716 +/*****************************************************************************/
  82.717 +
  82.718 +void gt_search_init (void)
  82.719 +{
  82.720 +	/* nothing */
  82.721 +}
  82.722 +
  82.723 +BOOL rm_search (GtSearch *search, void *udata)
  82.724 +{
  82.725 +	gt_search_free (search);
  82.726 +
  82.727 +	/* return FALSE here because gt_search_free() removes search from list */
  82.728 +	return FALSE;
  82.729 +}
  82.730 +
  82.731 +void gt_search_cleanup (void)
  82.732 +{
  82.733 +	list_foreach_remove (active_searches, (ListForeachFunc)rm_search, NULL);
  82.734 +	assert (active_searches == NULL);
  82.735 +}
    83.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    83.2 +++ b/src/gt_search.h	Sat Feb 20 21:18:28 2010 -0800
    83.3 @@ -0,0 +1,120 @@
    83.4 +/*
    83.5 + * $Id: gt_search.h,v 1.19 2004/01/18 05:43:13 hipnod Exp $
    83.6 + *
    83.7 + * Copyright (C) 2001-2003 giFT project (gift.sourceforge.net)
    83.8 + *
    83.9 + * This program is free software; you can redistribute it and/or modify it
   83.10 + * under the terms of the GNU General Public License as published by the
   83.11 + * Free Software Foundation; either version 2, or (at your option) any
   83.12 + * later version.
   83.13 + *
   83.14 + * This program is distributed in the hope that it will be useful, but
   83.15 + * WITHOUT ANY WARRANTY; without even the implied warranty of
   83.16 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
   83.17 + * General Public License for more details.
   83.18 + */
   83.19 +
   83.20 +#ifndef GIFT_GT_SEARCH_H_
   83.21 +#define GIFT_GT_SEARCH_H_
   83.22 +
   83.23 +/******************************************************************************/
   83.24 +
   83.25 +struct tcp_conn;
   83.26 +struct file_share;
   83.27 +
   83.28 +typedef enum
   83.29 +{
   83.30 +	GT_SEARCH_HASH,
   83.31 +	GT_SEARCH_KEYWORD,
   83.32 +} gt_search_type_t;
   83.33 +
   83.34 +/*
   83.35 + * These flags exist in what used to be the MinSpeed field of
   83.36 + * queries. The documentation for this field is arranged as two
   83.37 + * bytes in big-endian order, but this uses it in little-endian
   83.38 + * order so as to be consistent with the rest of the protocol.
   83.39 + */
   83.40 +typedef enum gt_query_flags
   83.41 +{
   83.42 +	QF_WANTS_XML     = 0x0020,    /* servent wants XML metadata */
   83.43 +	QF_ONLY_NON_FW   = 0x0040,    /* source desires non-firewalled hits only */
   83.44 +	QF_HAS_FLAGS     = 0x0080,    /* this query has this interpretation */
   83.45 +} gt_query_flags_t;
   83.46 +
   83.47 +typedef struct gt_search
   83.48 +{
   83.49 +	/* giFT event */
   83.50 +	IFEvent        *event;
   83.51 +
   83.52 +	/* what kind of search this is */
   83.53 +	gt_search_type_t type;
   83.54 +
   83.55 +	/* the guid used to identify the search */
   83.56 +	char           *guid;
   83.57 +
   83.58 +	/* the query used for the search */
   83.59 +	char           *query;
   83.60 +
   83.61 +	/* the hash to look for this search if a URN query XXX should use gt_urn_t
   83.62 +	 * here, but the interface is just too borked */
   83.63 +	char           *hash;
   83.64 +
   83.65 +	/* the realm used for this query, if any */
   83.66 +	char           *realm;
   83.67 +
   83.68 +	/* expires the search according to critieria: see 
   83.69 +	 * gt_search.c:search_timeout */
   83.70 +	timer_id        timeout_timer;
   83.71 +
   83.72 +	/* when the search was started */
   83.73 +	time_t          start;
   83.74 +
   83.75 +	/* how many nodes this search has been submitted to */
   83.76 +	size_t          submitted;
   83.77 +
   83.78 +	/* the last time we submitted to a node */
   83.79 +	time_t          last_submit;
   83.80 +
   83.81 +	/* time the last result for this search was seen */
   83.82 +	time_t          last_result;
   83.83 +
   83.84 +	/* results count */
   83.85 +	size_t          results;
   83.86 +} GtSearch;
   83.87 +
   83.88 +/* the default ttl for searches */
   83.89 +#define GT_SEARCH_TTL          (5)
   83.90 +
   83.91 +/******************************************************************************/
   83.92 +
   83.93 +GtSearch    *gt_search_new     (IFEvent *event, char *query,
   83.94 +                                gt_search_type_t type);
   83.95 +void         gt_search_free    (GtSearch *search);
   83.96 +void         gt_search_disable (IFEvent *event);
   83.97 +void         gt_search_reply   (GtSearch *search, struct tcp_conn *c,
   83.98 +                                in_addr_t ip, in_port_t gt_port,
   83.99 +                                gt_guid_t *client_guid, int availability,
  83.100 +                                BOOL firewalled, struct file_share *file);
  83.101 +GtSearch    *gt_search_find    (gt_guid_t *guid);
  83.102 +
  83.103 +/* submit active searches to a node after a timeout */
  83.104 +void  gt_searches_submit (struct tcp_conn *c, time_t delay);
  83.105 +
  83.106 +/******************************************************************************/
  83.107 +
  83.108 +BOOL gnutella_search        (Protocol *p, IFEvent *event, char *query,
  83.109 +                             char *exclude, char *realm, Dataset *meta);
  83.110 +
  83.111 +BOOL gnutella_locate        (Protocol *p, IFEvent *event, char *htype,
  83.112 +                             char *hash);
  83.113 +
  83.114 +void gnutella_search_cancel (Protocol *p, IFEvent *event);
  83.115 +
  83.116 +/******************************************************************************/
  83.117 +
  83.118 +void gt_search_init         (void);
  83.119 +void gt_search_cleanup      (void);
  83.120 +
  83.121 +/******************************************************************************/
  83.122 +
  83.123 +#endif /* GIFT_GT_SEARCH_H_ */
    84.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    84.2 +++ b/src/gt_search_exec.c	Sat Feb 20 21:18:28 2010 -0800
    84.3 @@ -0,0 +1,366 @@
    84.4 +/*
    84.5 + * $Id: gt_search_exec.c,v 1.23 2004/01/04 05:15:28 hipnod Exp $
    84.6 + *
    84.7 + * Copyright (C) 2001-2003 giFT project (gift.sourceforge.net)
    84.8 + *
    84.9 + * This program is free software; you can redistribute it and/or modify it
   84.10 + * under the terms of the GNU General Public License as published by the
   84.11 + * Free Software Foundation; either version 2, or (at your option) any
   84.12 + * later version.
   84.13 + *
   84.14 + * This program is distributed in the hope that it will be useful, but
   84.15 + * WITHOUT ANY WARRANTY; without even the implied warranty of
   84.16 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
   84.17 + * General Public License for more details.
   84.18 + */
   84.19 +
   84.20 +#include "gt_gnutella.h"
   84.21 +
   84.22 +#include "gt_search.h"
   84.23 +#include "gt_search_exec.h"
   84.24 +
   84.25 +#include "gt_query_route.h" /* QRP_DELIMITERS */
   84.26 +#include "gt_share.h"       /* gt_share_local_lookup_by_urn */
   84.27 +#include "gt_share_file.h"
   84.28 +
   84.29 +#include "sha1.h"           /* sha1_string */
   84.30 +#include "trie.h"
   84.31 +
   84.32 +#include <libgift/stopwatch.h>
   84.33 +
   84.34 +/******************************************************************************/
   84.35 +
   84.36 +#define MAX_RESULTS       200
   84.37 +
   84.38 +/******************************************************************************/
   84.39 +
   84.40 +static Trie      *gt_search_trie;
   84.41 +
   84.42 +static StopWatch *search_sw;
   84.43 +
   84.44 +/******************************************************************************/
   84.45 +
   84.46 +GtTokenSet *gt_token_set_new ()
   84.47 +{
   84.48 +	GtTokenSet *ts;
   84.49 +
   84.50 +	if (!(ts = MALLOC (sizeof (GtTokenSet))))
   84.51 +		return NULL;
   84.52 +
   84.53 +	return ts;
   84.54 +}
   84.55 +
   84.56 +void gt_token_set_free (GtTokenSet *ts)
   84.57 +{
   84.58 +	if (!ts)
   84.59 +		return;
   84.60 +
   84.61 +	free (ts->data);
   84.62 +	free (ts);
   84.63 +}
   84.64 +
   84.65 +void gt_token_set_append (GtTokenSet *ts, uint32_t token)
   84.66 +{
   84.67 +	if (ts->len >= ts->data_len)
   84.68 +	{
   84.69 +		uint32_t *new_tokens;
   84.70 +
   84.71 +		ts->data_len += 8;
   84.72 +		new_tokens = realloc (ts->data, ts->data_len * sizeof (uint32_t));
   84.73 +
   84.74 +		assert (new_tokens != NULL);
   84.75 +		ts->data = new_tokens;
   84.76 +	}
   84.77 +
   84.78 +	ts->data[ts->len++] = token;
   84.79 +}
   84.80 +
   84.81 +/******************************************************************************/
   84.82 +
   84.83 +static List *by_hash (unsigned char *hash, size_t *n)
   84.84 +{
   84.85 +	FileShare *file;
   84.86 +	char      *str;
   84.87 +	char      *urn;
   84.88 +
   84.89 +	*n = 0;
   84.90 +
   84.91 +	/* ugly that this is so sha1 specific:need a urn abstraction desperately */
   84.92 +	if (!(str = sha1_string (hash)))
   84.93 +		return NULL;
   84.94 +
   84.95 +	urn = stringf_dup ("urn:sha1:%s", str);
   84.96 +	free (str);
   84.97 +
   84.98 +	if (!(file = gt_share_local_lookup_by_urn (urn)))
   84.99 +	{
  84.100 +		free (urn);
  84.101 +		return NULL;
  84.102 +	}
  84.103 +
  84.104 +	if (LOG_RESULTS)
  84.105 +	{
  84.106 +		GT->DBGFN (GT, "Wuh-HOO! Answered a query-by-hash (%s) for (%s)",
  84.107 +		           urn, share_get_hpath (file));
  84.108 +	}
  84.109 +	
  84.110 +	*n = 1;
  84.111 +	free (urn);
  84.112 +
  84.113 +	return list_append (NULL, file);
  84.114 +}
  84.115 +
  84.116 +/******************************************************************************/
  84.117 +
  84.118 +/* some defines for list_find_custom that work like DS_BREAK, etc. */
  84.119 +#define LIST_BREAK     0
  84.120 +#define LIST_CONTINUE  1
  84.121 +
  84.122 +static int search_slowly (Share *file, void **cmp)
  84.123 +{
  84.124 +	GtTokenSet *tokens       = cmp[0];
  84.125 +	List      **results      = cmp[1];
  84.126 +	int        *max_results  = cmp[2];
  84.127 +	int        *count        = cmp[3];
  84.128 +	GtShare    *share;
  84.129 +	int         i, j;
  84.130 +	int         matched;
  84.131 +	GtTokenSet *cmp_tokens;
  84.132 +
  84.133 +	if (*count >= *max_results)
  84.134 +		return LIST_BREAK;
  84.135 +
  84.136 +	if (!(share = share_get_udata (file, GT->name)))
  84.137 +		return LIST_CONTINUE;
  84.138 +
  84.139 +	cmp_tokens = share->tokens;
  84.140 +	matched    = 0;
  84.141 +
  84.142 +	for (i = 0; i < tokens->len; i++)
  84.143 +	{
  84.144 +		int old_matched = matched;
  84.145 +
  84.146 +		for (j = 0; j < cmp_tokens->len; j++)
  84.147 +		{
  84.148 +			if (tokens->data[i] == cmp_tokens->data[j])
  84.149 +			{
  84.150 +				matched++;
  84.151 +				break;
  84.152 +			}
  84.153 +		}
  84.154 +
  84.155 +		if (matched == old_matched)
  84.156 +			break;
  84.157 +	}
  84.158 +
  84.159 +	if (matched >= tokens->len)
  84.160 +	{
  84.161 +		*results = list_prepend (*results, file);
  84.162 +		(*count)++;
  84.163 +	}
  84.164 +
  84.165 +	return LIST_CONTINUE;
  84.166 +}
  84.167 +
  84.168 +/*
  84.169 + * Find the smallest list corresponding to a word in the query
  84.170 + * that is in the trie of shares.
  84.171 + */
  84.172 +static List *find_smallest (char *query)
  84.173 +{
  84.174 +	char    *str;
  84.175 +	char    *str0;
  84.176 +	List    *smallest      = NULL;
  84.177 +	size_t   smallest_size = 0;
  84.178 +	char    *tok;
  84.179 +	size_t   size;
  84.180 +
  84.181 +	if (!(str = str0 = STRDUP (query)))
  84.182 +		return NULL;
  84.183 +
  84.184 +	string_lower (str);
  84.185 +
  84.186 +	while ((tok = string_sep_set (&str, QRP_DELIMITERS)))
  84.187 +	{
  84.188 +		List *list;
  84.189 +
  84.190 +		if (string_isempty (tok))
  84.191 +			continue;
  84.192 +
  84.193 +		if (!(list = trie_lookup (gt_search_trie, tok)))
  84.194 +		{
  84.195 +			/* no shares have this token: therefore no match */
  84.196 +			smallest      = NULL;
  84.197 +			smallest_size = 0;
  84.198 +			break;
  84.199 +		}
  84.200 +
  84.201 +		if ((size = list_length (list)) < smallest_size || smallest_size == 0)
  84.202 +		{
  84.203 +			/* keep this one */
  84.204 +			smallest_size = size;
  84.205 +			smallest      = list;
  84.206 +		}
  84.207 +	}
  84.208 +
  84.209 +	free (str0);
  84.210 +
  84.211 +	if (LOG_RESULTS)
  84.212 +		GT->DBGFN (GT, "scanning list of %d size", smallest_size);
  84.213 +
  84.214 +	return smallest;
  84.215 +}
  84.216 +
  84.217 +/*
  84.218 + * Look up the list of all shares for each word in the query in the 
  84.219 + * Trie of all local shares. Find the keyword with the smallest
  84.220 + * list, then iterate the list looking for shares.
  84.221 + */
  84.222 +static List *by_keyword (char *query, size_t max_results, size_t *n)
  84.223 +{
  84.224 +	GtTokenSet *tokens;
  84.225 +	List       *results  = NULL;
  84.226 +	List       *smallest;
  84.227 +	void       *cmp[4];
  84.228 +
  84.229 +	if (!query || string_isempty (query))
  84.230 +		return NULL;
  84.231 +
  84.232 +	if (!(tokens = gt_share_tokenize (query)))
  84.233 +		return NULL;
  84.234 +
  84.235 +	cmp[0] = tokens;
  84.236 +	cmp[1] = &results;
  84.237 +	cmp[2] = &max_results;
  84.238 +	cmp[3] = n;
  84.239 +
  84.240 +	smallest = find_smallest (query);
  84.241 +	list_find_custom (smallest, cmp, (ListForeachFunc)search_slowly);
  84.242 +
  84.243 +	gt_token_set_free (tokens);
  84.244 +	return results;
  84.245 +}
  84.246 +
  84.247 +List *gt_search_exec (char *query, gt_search_type_t type, void *extended,
  84.248 +                      uint8_t ttl, uint8_t hops)
  84.249 +{
  84.250 +	List          *results;
  84.251 +	int            max_res     = MAX_RESULTS;
  84.252 +	double         elapsed;
  84.253 +	unsigned char *hash;
  84.254 +	size_t         n           = 0;
  84.255 +
  84.256 +	stopwatch_start (search_sw);
  84.257 +
  84.258 +	hash = extended;
  84.259 +
  84.260 +	switch (type)
  84.261 +	{
  84.262 +	 case GT_SEARCH_KEYWORD: results = by_keyword (query, max_res, &n);  break;
  84.263 +	 case GT_SEARCH_HASH:    results = by_hash    (hash, &n);            break;
  84.264 +	 default: abort ();
  84.265 +	}
  84.266 +
  84.267 +	stopwatch_stop (search_sw);
  84.268 +	elapsed = stopwatch_elapsed (search_sw, NULL);
  84.269 +
  84.270 +	if (LOG_RESULTS)
  84.271 +	{
  84.272 +		GT->dbg (GT, "results: [%03d] [%d|%d] %.06fs (%s)", n,
  84.273 +		         ttl, hops, elapsed, query);
  84.274 +	}
  84.275 +
  84.276 +	return results;
  84.277 +}
  84.278 +
  84.279 +/******************************************************************************/
  84.280 +
  84.281 +static void add_share (Trie *trie, char *tok, Share *share)
  84.282 +{
  84.283 +	List *list;
  84.284 +
  84.285 +	list = trie_lookup (trie, tok);
  84.286 +
  84.287 +	/* the share may already be in the list if the filename has
  84.288 +	 * two words that are the same */
  84.289 +	if (list_find (list, share))
  84.290 +		return;
  84.291 +
  84.292 +	list = list_prepend (list, share);
  84.293 +
  84.294 +	trie_remove (trie, tok);
  84.295 +	trie_insert (trie, tok, list);
  84.296 +}
  84.297 +
  84.298 +static void del_share (Trie *trie, char *tok, Share *share)
  84.299 +{
  84.300 +	List *list;
  84.301 +
  84.302 +	list = trie_lookup (trie, tok);
  84.303 +	list = list_remove (list, share);
  84.304 +
  84.305 +	trie_remove (trie, tok);
  84.306 +
  84.307 +	if (!list)
  84.308 +		return;
  84.309 +
  84.310 +	trie_insert (trie, tok, list);
  84.311 +}
  84.312 +
  84.313 +static void search_trie_change (Trie *trie, Share *share, BOOL add)
  84.314 +{
  84.315 +	char *tok;
  84.316 +	char *str0, *str;
  84.317 +
  84.318 +	if (!(str0 = str = STRDUP (share_get_hpath (share))))
  84.319 +		return;
  84.320 +
  84.321 +	string_lower (str);
  84.322 +
  84.323 +	while ((tok = string_sep_set (&str, QRP_DELIMITERS)))
  84.324 +	{
  84.325 +		if (string_isempty (tok))
  84.326 +			continue;
  84.327 +
  84.328 +		if (add)
  84.329 +			add_share (trie, tok, share);
  84.330 +		else
  84.331 +			del_share (trie, tok, share);
  84.332 +	}
  84.333 +
  84.334 +	free (str0);
  84.335 +}
  84.336 +
  84.337 +void gt_search_exec_add (Share *share)
  84.338 +{
  84.339 +	search_trie_change (gt_search_trie, share, TRUE);
  84.340 +}
  84.341 +
  84.342 +void gt_search_exec_remove (Share *share)
  84.343 +{
  84.344 +	search_trie_change (gt_search_trie, share, FALSE);
  84.345 +}
  84.346 +
  84.347 +void gt_search_exec_sync (void)
  84.348 +{
  84.349 +#if 0
  84.350 +	printf ("SHARE TRIE:\n");
  84.351 +	trie_print (gt_search_trie);
  84.352 +#endif
  84.353 +}
  84.354 +
  84.355 +void gt_search_exec_init (void)
  84.356 +{
  84.357 +	gt_search_trie = trie_new ();
  84.358 +
  84.359 +	search_sw = stopwatch_new (FALSE);
  84.360 +}
  84.361 +
  84.362 +void gt_search_exec_cleanup (void)
  84.363 +{
  84.364 +	trie_free (gt_search_trie);
  84.365 +	gt_search_trie = NULL;
  84.366 +
  84.367 +	stopwatch_free (search_sw);
  84.368 +	search_sw = NULL;
  84.369 +}
    85.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    85.2 +++ b/src/gt_search_exec.h	Sat Feb 20 21:18:28 2010 -0800
    85.3 @@ -0,0 +1,55 @@
    85.4 +/*
    85.5 + * $Id: gt_search_exec.h,v 1.9 2004/01/04 05:15:28 hipnod Exp $
    85.6 + *
    85.7 + * Copyright (C) 2001-2003 giFT project (gift.sourceforge.net)
    85.8 + *
    85.9 + * This program is free software; you can redistribute it and/or modify it
   85.10 + * under the terms of the GNU General Public License as published by the
   85.11 + * Free Software Foundation; either version 2, or (at your option) any
   85.12 + * later version.
   85.13 + *
   85.14 + * This program is distributed in the hope that it will be useful, but
   85.15 + * WITHOUT ANY WARRANTY; without even the implied warranty of
   85.16 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
   85.17 + * General Public License for more details.
   85.18 + */
   85.19 +
   85.20 +#ifndef __GT_SEARCH_EXEC_H__
   85.21 +#define __GT_SEARCH_EXEC_H__
   85.22 +
   85.23 +/******************************************************************************/
   85.24 +
   85.25 +#define LOG_RESULTS      gt_config_get_int("search/log_results=0")
   85.26 +
   85.27 +/******************************************************************************/
   85.28 +
   85.29 +typedef struct gt_token_set
   85.30 +{
   85.31 +	uint32_t    *data;
   85.32 +	size_t       data_len;
   85.33 +	size_t       len;
   85.34 +} GtTokenSet;
   85.35 +
   85.36 +/******************************************************************************/
   85.37 +
   85.38 +GtTokenSet     *gt_token_set_new     (void);
   85.39 +void            gt_token_set_free    (GtTokenSet *ts);
   85.40 +void            gt_token_set_append  (GtTokenSet *ts, uint32_t token);
   85.41 +
   85.42 +/******************************************************************************/
   85.43 +
   85.44 +void            gt_search_exec_add     (Share *share);
   85.45 +void            gt_search_exec_remove  (Share *share);
   85.46 +void            gt_search_exec_sync    (void);
   85.47 +
   85.48 +void            gt_search_exec_init    (void);
   85.49 +void            gt_search_exec_cleanup (void);
   85.50 +
   85.51 +/******************************************************************************/
   85.52 +
   85.53 +List *gt_search_exec (char *query, gt_search_type_t type, void *extended,
   85.54 +                      uint8_t ttl, uint8_t hops);
   85.55 +
   85.56 +/******************************************************************************/
   85.57 +
   85.58 +#endif /* __GT_SEARCH_EXEC_H__ */
    86.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    86.2 +++ b/src/gt_share.c	Sat Feb 20 21:18:28 2010 -0800
    86.3 @@ -0,0 +1,384 @@
    86.4 +/*
    86.5 + * $Id: gt_share.c,v 1.35 2004/03/26 11:53:18 hipnod Exp $
    86.6 + *
    86.7 + * Copyright (C) 2001-2003 giFT project (gift.sourceforge.net)
    86.8 + *
    86.9 + * This program is free software; you can redistribute it and/or modify it
   86.10 + * under the terms of the GNU General Public License as published by the
   86.11 + * Free Software Foundation; either version 2, or (at your option) any
   86.12 + * later version.
   86.13 + *
   86.14 + * This program is distributed in the hope that it will be useful, but
   86.15 + * WITHOUT ANY WARRANTY; without even the implied warranty of
   86.16 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
   86.17 + * General Public License for more details.
   86.18 + */
   86.19 +
   86.20 +#include "gt_gnutella.h"
   86.21 +#include "sha1.h"
   86.22 +
   86.23 +#include "gt_share.h"
   86.24 +#include "gt_share_file.h"
   86.25 +#include "gt_query_route.h"
   86.26 +#include "gt_search.h"
   86.27 +#include "gt_search_exec.h"
   86.28 +
   86.29 +#include "encoding/url.h"
   86.30 +
   86.31 +/******************************************************************************/
   86.32 +
   86.33 +#define  SHARE_DEBUG          gt_config_get_int("share/debug=0")
   86.34 +
   86.35 +/*****************************************************************************/
   86.36 +
   86.37 +/* each share is assigned an index here */
   86.38 +static Dataset *indices;
   86.39 +
   86.40 +/* maps binary sha1 hashes -> FileShares */
   86.41 +static Dataset *sha1_hashes;
   86.42 +
   86.43 +/* stored index of the last index assigned */
   86.44 +static uint32_t index_counter;
   86.45 +
   86.46 +/* whether shares have been completely synchronized yet */
   86.47 +static BOOL     sync_begun;
   86.48 +
   86.49 +/* if shares are currently being synced */
   86.50 +static BOOL     sync_done;
   86.51 +
   86.52 +/******************************************************************************/
   86.53 +
   86.54 +static void add_hash    (FileShare *file);
   86.55 +static void remove_hash (FileShare *file);
   86.56 +
   86.57 +/******************************************************************************/
   86.58 +
   86.59 +/*
   86.60 + * Find the old index, using the SHA1 hash as a key.
   86.61 + */
   86.62 +static uint32_t get_old_index (Hash *hash)
   86.63 +{
   86.64 +	Share   *old_share;
   86.65 +	uint32_t index     = 0;
   86.66 +
   86.67 +	old_share = dataset_lookup (sha1_hashes, hash->data, SHA1_BINSIZE);
   86.68 +	if (old_share != NULL)
   86.69 +	{
   86.70 +		GtShare *gt_share = share_get_udata (old_share, GT->name);
   86.71 +
   86.72 +		if (gt_share)
   86.73 +			index = gt_share->index;
   86.74 +	}
   86.75 +
   86.76 +	return index;
   86.77 +}
   86.78 +
   86.79 +/*
   86.80 + * Find an unused index, but reuse the existing index if possible.
   86.81 + */
   86.82 +static uint32_t get_share_index (Share *share)
   86.83 +{
   86.84 +	Hash     *hash;
   86.85 +	uint32_t  index;
   86.86 +
   86.87 +	if ((hash = share_get_hash (share, "SHA1")) != NULL)
   86.88 +	{
   86.89 +		uint32_t hash_tmp;
   86.90 +
   86.91 +		/* if a Share with the same hash has another index, re-use that one */
   86.92 +		if ((index = get_old_index (hash)) != 0)
   86.93 +			return index;
   86.94 +
   86.95 +		memcpy (&hash_tmp, hash->data, 4);
   86.96 +
   86.97 +		/* use the first 24 bits of the SHA1 hash to seed the file index */
   86.98 +		index_counter = hash_tmp & 0xfffffff;
   86.99 +	}
  86.100 +
  86.101 +	if (!(index = dataset_uniq32 (indices, &index_counter)))
  86.102 +		return 0;
  86.103 +
  86.104 +	return index;
  86.105 +}
  86.106 +
  86.107 +static void add_index (Share *share, GtShare *gt_share)
  86.108 +{
  86.109 +	uint32_t index;
  86.110 +
  86.111 +	if (SHARE_DEBUG)
  86.112 +		GT->dbg (GT, "++[%d]->%s", gt_share->index, gt_share->filename);
  86.113 +
  86.114 +	index = get_share_index (share);
  86.115 +	dataset_insert (&indices, &index, sizeof(index), share, 0);
  86.116 +}
  86.117 +
  86.118 +static void remove_index (Share *share, GtShare *gt_share)
  86.119 +{
  86.120 +	uint32_t index = gt_share->index;
  86.121 +
  86.122 +	assert (index > 0);
  86.123 +
  86.124 +	/*
  86.125 +	 * Check if the index is pointing at a different share.  This case happens
  86.126 +	 * for every Share that is not removed on a resync, due to the weird way
  86.127 +	 * giftd 0.11.x use the new/add/remove/free interface.
  86.128 +	 */
  86.129 +	if (dataset_lookup (indices, &index, sizeof(index)) != share)
  86.130 +		return;
  86.131 +
  86.132 +	if (SHARE_DEBUG)
  86.133 +		GT->dbg (GT, "--[%d]->%s", gt_share->index, gt_share->filename);
  86.134 +
  86.135 +	index = gt_share->index;
  86.136 +	dataset_remove (indices, &index, sizeof(index));
  86.137 +
  86.138 +	if (dataset_length (indices) == 0)
  86.139 +	{
  86.140 +		dataset_clear (indices);
  86.141 +		indices = NULL;
  86.142 +	}
  86.143 +}
  86.144 +
  86.145 +/******************************************************************************/
  86.146 +
  86.147 +/* TODO: This duplicates memory thats already stored on the FileShare.
  86.148 + *       Prevent this by maintaining a per-hash algorithm map of FileShares */
  86.149 +static void add_hash (FileShare *file)
  86.150 +{
  86.151 +	Hash       *hash;
  86.152 +	ds_data_t   key;
  86.153 +	ds_data_t   value;
  86.154 +
  86.155 +	if (!(hash = share_get_hash (file, "SHA1")))
  86.156 +		return;
  86.157 +
  86.158 +	/* This shares the hash memory with the FileShare and also
  86.159 +	 * points directly at it. */
  86.160 +	ds_data_init (&key, hash->data, hash->len, DS_NOCOPY);
  86.161 +	ds_data_init (&value, file, 0, DS_NOCOPY);
  86.162 +
  86.163 +	/* We share the key with the FileShare, so remove the old key first
  86.164 +	 * so we don't end up sharing an old FileShare's hash. */
  86.165 +	dataset_remove_ex (sha1_hashes, &key);
  86.166 +	dataset_insert_ex (&sha1_hashes, &key, &value);
  86.167 +}
  86.168 +
  86.169 +static void remove_hash (FileShare *file)
  86.170 +{
  86.171 +	Hash       *hash;
  86.172 +
  86.173 +	if (!(hash = share_get_hash (file, "SHA1")))
  86.174 +		return;
  86.175 +
  86.176 +	/*
  86.177 +	 * If a FileShare is already present at this hash, and it isn't
  86.178 +	 * this FileShare, then don't remove it. This _will_ happen
  86.179 +	 * due to the way FileShares get added and removed on resyncs.
  86.180 +	 */
  86.181 +	if (dataset_lookup (sha1_hashes, hash->data, hash->len) != file)
  86.182 +		return;
  86.183 +
  86.184 +	dataset_remove (sha1_hashes, hash->data, hash->len);
  86.185 +
  86.186 +	if (dataset_length (sha1_hashes) == 0)
  86.187 +	{
  86.188 +		dataset_clear (sha1_hashes);
  86.189 +		sha1_hashes = NULL;
  86.190 +	}
  86.191 +}
  86.192 +
  86.193 +/******************************************************************************/
  86.194 +
  86.195 +static GtShare *gt_share_local_add (FileShare *file)
  86.196 +{
  86.197 +	GtShare *share;
  86.198 +	uint32_t index;
  86.199 +
  86.200 +	if (share_get_udata (file, GT->name))
  86.201 +		return NULL;
  86.202 +
  86.203 +	index = get_share_index (file);
  86.204 +
  86.205 +	if (!(share = gt_share_new_data (file, index)))
  86.206 +		return NULL;
  86.207 +
  86.208 +	add_hash (file);
  86.209 +	add_index (file, share);
  86.210 +
  86.211 +	return share;
  86.212 +}
  86.213 +
  86.214 +static void gt_share_local_remove (FileShare *file, GtShare *share)
  86.215 +{
  86.216 +	remove_index (file, share);
  86.217 +	remove_hash (file);
  86.218 +
  86.219 +	gt_share_free_data (file, share);
  86.220 +}
  86.221 +
  86.222 +static int find_by_index (ds_data_t *key, ds_data_t *value, void **args)
  86.223 +{
  86.224 +	uint32_t    *index    = args[0];
  86.225 +	char        *filename = args[1];
  86.226 +	FileShare  **ret      = args[2];
  86.227 +	FileShare   *file     = value->data;
  86.228 +	GtShare     *share;
  86.229 +
  86.230 +	if (!file || !(share = share_get_udata (file, GT->name)))
  86.231 +		return DS_CONTINUE;
  86.232 +
  86.233 +	if (share->index == *index &&
  86.234 +	    (!filename || !strcmp (filename, share->filename)))
  86.235 +	{
  86.236 +		*ret = file;
  86.237 +		return DS_BREAK;
  86.238 +	}
  86.239 +
  86.240 +	return DS_CONTINUE;
  86.241 +}
  86.242 +
  86.243 +FileShare *gt_share_local_lookup_by_index (uint32_t index, char *filename)
  86.244 +{
  86.245 +	FileShare *ret    = NULL;
  86.246 +	void      *args[] = { &index, filename, &ret };
  86.247 +
  86.248 +	share_foreach (DS_FOREACH_EX(find_by_index), args);
  86.249 +
  86.250 +	return ret;
  86.251 +}
  86.252 +
  86.253 +static FileShare *lookup_sha1 (char *urn)
  86.254 +{
  86.255 +	char           *str, *str0;
  86.256 +	char           *prefix;
  86.257 +	unsigned char  *bin;
  86.258 +	FileShare      *file;
  86.259 +
  86.260 +	if (!(str0 = str = STRDUP (urn)))
  86.261 +		return NULL;
  86.262 +
  86.263 +	/* TODO: consolidate with gt_protocol.c:parse_extended_data */
  86.264 +	string_upper (str0);
  86.265 +	string_sep (&str, "URN:");
  86.266 +
  86.267 +	prefix = string_sep (&str, ":");
  86.268 +
  86.269 +	/* Only support urn:sha1 or urn:sha-1 urns now */
  86.270 +	if (STRCMP (prefix, "SHA1") != 0 && STRCMP (prefix, "SHA-1") != 0)
  86.271 +	{
  86.272 +		free (str0);
  86.273 +		return NULL;
  86.274 +	}
  86.275 +
  86.276 +	string_trim (str);
  86.277 +
  86.278 +	if (strlen (str) != 32)
  86.279 +	{
  86.280 +		free (str0);
  86.281 +		return NULL;
  86.282 +	}
  86.283 +
  86.284 +	if (!(bin = sha1_bin (str)))
  86.285 +	{
  86.286 +		free (str0);
  86.287 +		return NULL;
  86.288 +	}
  86.289 +
  86.290 +	file = dataset_lookup (sha1_hashes, bin, SHA1_BINSIZE);
  86.291 +
  86.292 +	free (str0);
  86.293 +	free (bin);
  86.294 +
  86.295 +	return file;
  86.296 +}
  86.297 +
  86.298 +FileShare *gt_share_local_lookup_by_urn (char *urn)
  86.299 +{
  86.300 +	return lookup_sha1 (urn);
  86.301 +}
  86.302 +
  86.303 +static char *get_sha1 (FileShare *file)
  86.304 +{
  86.305 +	Hash *hash;
  86.306 +	char *urn;
  86.307 +	char *str;
  86.308 +
  86.309 +	if (!(hash = share_get_hash (file, "SHA1")))
  86.310 +		return NULL;
  86.311 +
  86.312 +	assert (hash->len == SHA1_BINSIZE);
  86.313 +
  86.314 +	if (!(str = sha1_string (hash->data)))
  86.315 +		return NULL;
  86.316 +
  86.317 +	urn = stringf_dup ("urn:sha1:%s", str);
  86.318 +	free (str);
  86.319 +
  86.320 +	return urn;
  86.321 +}
  86.322 +
  86.323 +char *gt_share_local_get_urns (FileShare *file)
  86.324 +{
  86.325 +	char *urn;
  86.326 +
  86.327 +	urn = get_sha1 (file);
  86.328 +
  86.329 +	return urn;
  86.330 +}
  86.331 +
  86.332 +int gt_share_local_sync_is_done (void)
  86.333 +{
  86.334 +	return sync_done;
  86.335 +}
  86.336 +
  86.337 +/******************************************************************************/
  86.338 +
  86.339 +void *gnutella_share_new (Protocol *p, FileShare *file)
  86.340 +{
  86.341 +	/* add this share to the data structures for searching */
  86.342 +	gt_search_exec_add (file);
  86.343 +
  86.344 +	return gt_share_local_add (file);
  86.345 +}
  86.346 +
  86.347 +void gnutella_share_free (Protocol *p, FileShare *file, void *data)
  86.348 +{
  86.349 +	/* remove data structures for searching */
  86.350 +	gt_search_exec_remove (file);
  86.351 +
  86.352 +	gt_share_local_remove (file, data);
  86.353 +}
  86.354 +
  86.355 +int gnutella_share_add (Protocol *p, FileShare *file, void *data)
  86.356 +{
  86.357 +	/* add to query routing tables */
  86.358 +	gt_query_router_self_add (file);
  86.359 +
  86.360 +	return TRUE;
  86.361 +}
  86.362 +
  86.363 +int gnutella_share_remove (Protocol *p, FileShare *file, void *data)
  86.364 +{
  86.365 +	/* remove from query routing tables */
  86.366 +	gt_query_router_self_remove (file);
  86.367 +
  86.368 +	return TRUE;
  86.369 +}
  86.370 +
  86.371 +void gnutella_share_sync (Protocol *p, int begin)
  86.372 +{
  86.373 +	gt_query_router_self_sync (begin);
  86.374 +
  86.375 +	if (begin)
  86.376 +	{
  86.377 +		sync_begun = TRUE;
  86.378 +	}
  86.379 +	else if (sync_begun)
  86.380 +	{
  86.381 +		sync_begun = FALSE;
  86.382 +		sync_done = TRUE;
  86.383 +
  86.384 +		/* synchronize the search structures (possibly, to disk) */
  86.385 +		gt_search_exec_sync ();
  86.386 +	}
  86.387 +}
    87.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    87.2 +++ b/src/gt_share.h	Sat Feb 20 21:18:28 2010 -0800
    87.3 @@ -0,0 +1,55 @@
    87.4 +/*
    87.5 + * $Id: gt_share.h,v 1.9 2004/03/24 06:36:54 hipnod Exp $
    87.6 + *
    87.7 + * Copyright (C) 2001-2003 giFT project (gift.sourceforge.net)
    87.8 + *
    87.9 + * This program is free software; you can redistribute it and/or modify it
   87.10 + * under the terms of the GNU General Public License as published by the
   87.11 + * Free Software Foundation; either version 2, or (at your option) any
   87.12 + * later version.
   87.13 + *
   87.14 + * This program is distributed in the hope that it will be useful, but
   87.15 + * WITHOUT ANY WARRANTY; without even the implied warranty of
   87.16 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
   87.17 + * General Public License for more details.
   87.18 + */
   87.19 +
   87.20 +#ifndef __GT_SHARE_H__
   87.21 +#define __GT_SHARE_H__
   87.22 +
   87.23 +/******************************************************************************/
   87.24 +
   87.25 +struct gt_share;
   87.26 +struct file_share;
   87.27 +
   87.28 +/******************************************************************************/
   87.29 +
   87.30 +FileShare *gt_share_local_lookup_by_index (uint32_t index, char *file);
   87.31 +FileShare *gt_share_local_lookup_by_urn   (char *urn);
   87.32 +int        gt_share_local_sync_is_done    (void);
   87.33 +char      *gt_share_local_get_urns        (FileShare *file);
   87.34 +
   87.35 +/******************************************************************************/
   87.36 +
   87.37 +void *gnutella_share_new    (Protocol *p, FileShare *file);
   87.38 +void  gnutella_share_free   (Protocol *p, FileShare *file, void *data);
   87.39 +
   87.40 +int   gnutella_share_add    (Protocol *p, FileShare *file, void *data);
   87.41 +int   gnutella_share_remove (Protocol *p, FileShare *file, void *data);
   87.42 +
   87.43 +void  gnutella_share_sync   (Protocol *p, int begin);
   87.44 +
   87.45 +/*****************************************************************************/
   87.46 +
   87.47 +void  gnutella_share_hide   (Protocol *p);
   87.48 +void  gnutella_share_show   (Protocol *p);
   87.49 +
   87.50 +/******************************************************************************/
   87.51 +
   87.52 +/* need these definitions but giFT doesn't provide them to plugins */
   87.53 +extern Dataset *share_index   (unsigned long *files, double *size);
   87.54 +extern void     share_foreach (DatasetForeachExFn foreach_fn, void *data);
   87.55 +
   87.56 +/******************************************************************************/
   87.57 +
   87.58 +#endif /* __GT_SHARE_H__ */
    88.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    88.2 +++ b/src/gt_share_file.c	Sat Feb 20 21:18:28 2010 -0800
    88.3 @@ -0,0 +1,184 @@
    88.4 +/*
    88.5 + * $Id: gt_share_file.c,v 1.17 2003/07/23 18:43:32 hipnod Exp $
    88.6 + *
    88.7 + * Copyright (C) 2001-2003 giFT project (gift.sourceforge.net)
    88.8 + *
    88.9 + * This program is free software; you can redistribute it and/or modify it
   88.10 + * under the terms of the GNU General Public License as published by the
   88.11 + * Free Software Foundation; either version 2, or (at your option) any
   88.12 + * later version.
   88.13 + *
   88.14 + * This program is distributed in the hope that it will be useful, but
   88.15 + * WITHOUT ANY WARRANTY; without even the implied warranty of
   88.16 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
   88.17 + * General Public License for more details.
   88.18 + */
   88.19 +
   88.20 +#include "gt_gnutella.h"
   88.21 +
   88.22 +#include "sha1.h"
   88.23 +#if 0
   88.24 +#include "src/mime.h"
   88.25 +#endif
   88.26 +
   88.27 +#include "gt_share_file.h"
   88.28 +#include "gt_query_route.h"
   88.29 +
   88.30 +#include "gt_search.h"
   88.31 +#include "gt_search_exec.h"
   88.32 +
   88.33 +/******************************************************************************/
   88.34 +
   88.35 +unsigned int gt_share_unref (Share *file)
   88.36 +{
   88.37 +	GtShare *share;
   88.38 +
   88.39 +	if ((share = share_get_udata (file, GT->name)))
   88.40 +	{
   88.41 +		if (file->ref <= 1)
   88.42 +		{
   88.43 +			gt_share_free_data (file, share);
   88.44 +			share_set_udata (file, GT->name, NULL);
   88.45 +		}
   88.46 +	}
   88.47 +
   88.48 +	return share_unref (file);
   88.49 +}
   88.50 +
   88.51 +unsigned int gt_share_ref (Share *file)
   88.52 +{
   88.53 +	return share_ref (file);
   88.54 +}
   88.55 +
   88.56 +/******************************************************************************/
   88.57 +
   88.58 +/* this is duplicated with tokenize in gt_query_route.c for the time being */
   88.59 +GtTokenSet *gt_share_tokenize (char *hpath)
   88.60 +{
   88.61 +	GtTokenSet *token_set;
   88.62 +	char       *str;
   88.63 +	char       *str0;
   88.64 +	char       *next;
   88.65 +
   88.66 +	if (!(str0 = str = STRDUP (hpath)))
   88.67 +		return NULL;
   88.68 +
   88.69 +	if (!(token_set = gt_token_set_new ()))
   88.70 +	{
   88.71 +		free (str0);
   88.72 +		return NULL;
   88.73 +	}
   88.74 +
   88.75 +	while ((next = string_sep_set (&str, QRP_DELIMITERS)) != NULL)
   88.76 +	{
   88.77 +		uint32_t tok;
   88.78 +
   88.79 +		if (string_isempty (next))
   88.80 +			continue;
   88.81 +
   88.82 +		tok = gt_query_router_hash_str (next, 32);
   88.83 +		gt_token_set_append (token_set, tok);
   88.84 +	}
   88.85 +
   88.86 +	free (str0);
   88.87 +	return token_set;
   88.88 +}
   88.89 +
   88.90 +/******************************************************************************/
   88.91 +
   88.92 +GtShare *gt_share_new_data (Share *file, uint32_t index)
   88.93 +{
   88.94 +	GtShare  *share;
   88.95 +	char     *basename;
   88.96 +
   88.97 +	if (!file)
   88.98 +		return NULL;
   88.99 +
  88.100 +	if (!(share = malloc (sizeof (GtShare))))
  88.101 +		return NULL;
  88.102 +
  88.103 +	assert (SHARE_DATA(file) != NULL);
  88.104 +
  88.105 +	if (!(basename = file_basename (SHARE_DATA(file)->path)))
  88.106 +	{
  88.107 +		GT->DBGFN (GT, "bad basename for %s", SHARE_DATA(file)->path);
  88.108 +		free (share);
  88.109 +		return NULL;
  88.110 +	}
  88.111 +
  88.112 +	share->index    = index;
  88.113 +	share->filename = basename;            /* share mem with Share */
  88.114 +	share->tokens   = gt_share_tokenize (share_get_hpath (file));
  88.115 +
  88.116 +	return share;
  88.117 +}
  88.118 +
  88.119 +void gt_share_free_data (Share *file, GtShare *share)
  88.120 +{
  88.121 +	if (!file)
  88.122 +	{
  88.123 +		assert (share != NULL);
  88.124 +		return;
  88.125 +	}
  88.126 +
  88.127 +	if (!share)
  88.128 +		return;
  88.129 +
  88.130 +	gt_token_set_free (share->tokens);
  88.131 +
  88.132 +	/* don't free share->filename */
  88.133 +
  88.134 +	free (share);
  88.135 +}
  88.136 +
  88.137 +Share *gt_share_new (char *filename, uint32_t index, off_t size,
  88.138 +                     unsigned char *sha1)
  88.139 +{
  88.140 +	Share *file;
  88.141 +	GtShare   *share;
  88.142 +#if 0
  88.143 +	char      *mime;
  88.144 +
  88.145 +	/* choose mime type based on extension */
  88.146 +	mime = mime_type (filename);
  88.147 +#endif
  88.148 +
  88.149 +	/* TODO: parse path out of filename. Nodes don't put paths in the
  88.150 +	 *       search result string yet but may in the future */
  88.151 +	if (!(file = share_new (filename)))
  88.152 +		return NULL;
  88.153 +
  88.154 +#if 0
  88.155 +	share_set_mime (file, mime);
  88.156 +#endif
  88.157 +
  88.158 +	file->size = size;
  88.159 +
  88.160 +	/* 
  88.161 +	 * Set the hash if it was passed in, but also accept a null hash
  88.162 +	 * TODO: need a generic urn: type to stop hardcoding sha1 
  88.163 +	 */
  88.164 +	if (sha1 && !share_set_hash (file, "SHA1", sha1, SHA1_BINSIZE, TRUE))
  88.165 +	{
  88.166 +		gt_share_unref (file);
  88.167 +		return NULL;
  88.168 +	}
  88.169 +
  88.170 +	if (!(share = gt_share_new_data (file, index)))
  88.171 +	{
  88.172 +		gt_share_unref (file);
  88.173 +		return NULL;
  88.174 +	}
  88.175 +
  88.176 +	share_set_udata (file, GT->name, share);
  88.177 +
  88.178 +	return file;
  88.179 +}
  88.180 +
  88.181 +void gt_share_free (Share *file)
  88.182 +{
  88.183 +	gt_share_free_data (file, share_get_udata (file, GT->name));
  88.184 +	share_set_udata (file, GT->name, NULL);
  88.185 +
  88.186 +	share_free (file);
  88.187 +}
    89.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    89.2 +++ b/src/gt_share_file.h	Sat Feb 20 21:18:28 2010 -0800
    89.3 @@ -0,0 +1,61 @@
    89.4 +/*
    89.5 + * $Id: gt_share_file.h,v 1.7 2003/06/01 09:20:35 hipnod Exp $
    89.6 + *
    89.7 + * Copyright (C) 2001-2003 giFT project (gift.sourceforge.net)
    89.8 + *
    89.9 + * This program is free software; you can redistribute it and/or modify it
   89.10 + * under the terms of the GNU General Public License as published by the
   89.11 + * Free Software Foundation; either version 2, or (at your option) any
   89.12 + * later version.
   89.13 + *
   89.14 + * This program is distributed in the hope that it will be useful, but
   89.15 + * WITHOUT ANY WARRANTY; without even the implied warranty of
   89.16 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
   89.17 + * General Public License for more details.
   89.18 + */
   89.19 +
   89.20 +#ifndef __GT_SHARE_FILE_H__
   89.21 +#define __GT_SHARE_FILE_H__
   89.22 +
   89.23 +/******************************************************************************/
   89.24 +
   89.25 +struct file_share;
   89.26 +
   89.27 +struct gt_token_set;
   89.28 +
   89.29 +struct gt_share
   89.30 +{
   89.31 +	uint32_t               index;
   89.32 +	char                  *filename;
   89.33 +	struct gt_token_set   *tokens;
   89.34 +};
   89.35 +
   89.36 +typedef struct gt_share GtShare;
   89.37 +
   89.38 +/******************************************************************************/
   89.39 +
   89.40 +struct file_share   *gt_share_new   (char *filename, uint32_t index,
   89.41 +                                     off_t size, unsigned char *sha1);
   89.42 +void                 gt_share_free  (struct file_share *file);
   89.43 +
   89.44 +/******************************************************************************/
   89.45 +
   89.46 +struct gt_token_set *gt_share_tokenize (char *words);
   89.47 +
   89.48 +/******************************************************************************/
   89.49 +
   89.50 +unsigned int    gt_share_ref     (struct file_share *file);
   89.51 +unsigned int    gt_share_unref   (struct file_share *file);
   89.52 +
   89.53 +/******************************************************************************/
   89.54 +
   89.55 +GtShare    *gt_share_new_data  (struct file_share *file, uint32_t index);
   89.56 +void        gt_share_free_data (struct file_share *file, GtShare *share);
   89.57 +
   89.58 +/******************************************************************************/
   89.59 +
   89.60 +FileShare *gt_share_local_lookup_by_hash (unsigned char *sha1);
   89.61 +
   89.62 +/******************************************************************************/
   89.63 +
   89.64 +#endif /* __GT_SHARE_FILE_H__ */
    90.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    90.2 +++ b/src/gt_share_state.c	Sat Feb 20 21:18:28 2010 -0800
    90.3 @@ -0,0 +1,190 @@
    90.4 +/*
    90.5 + * $Id: gt_share_state.c,v 1.2 2004/03/31 08:58:24 hipnod Exp $
    90.6 + *
    90.7 + * Copyright (C) 2004 giFT project (gift.sourceforge.net)
    90.8 + *
    90.9 + * This program is free software; you can redistribute it and/or modify it
   90.10 + * under the terms of the GNU General Public License as published by the
   90.11 + * Free Software Foundation; either version 2, or (at your option) any
   90.12 + * later version.
   90.13 + *
   90.14 + * This program is distributed in the hope that it will be useful, but
   90.15 + * WITHOUT ANY WARRANTY; without even the implied warranty of
   90.16 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
   90.17 + * General Public License for more details.
   90.18 + */
   90.19 +
   90.20 +#include "gt_gnutella.h"
   90.21 +#include "gt_node.h"
   90.22 +#include "gt_node_list.h"
   90.23 +#include "gt_packet.h"
   90.24 +#include "gt_share_state.h"
   90.25 +
   90.26 +/*****************************************************************************/
   90.27 +
   90.28 +/* whether giftd has disabled shares */
   90.29 +static BOOL giftd_hidden             = FALSE;
   90.30 +
   90.31 +/*****************************************************************************/
   90.32 +
   90.33 +struct gt_share_state *gt_share_state_new (void)
   90.34 +{
   90.35 +	struct gt_share_state *state;
   90.36 +
   90.37 +	if (!(state = malloc (sizeof(struct gt_share_state))))
   90.38 +		return NULL;
   90.39 +
   90.40 +	/*
   90.41 +	 * Sharing may be disabled now globally, but it isn't for this
   90.42 +	 * gt_share_state until gt_share_state_update() is called.
   90.43 +	 */
   90.44 +	state->hidden        = FALSE;
   90.45 +	state->plugin_hidden = FALSE;
   90.46 +
   90.47 +	return state;
   90.48 +}
   90.49 +
   90.50 +void gt_share_state_free (struct gt_share_state *state)
   90.51 +{
   90.52 +	free (state);
   90.53 +}
   90.54 +
   90.55 +static GtPacket *hops_flow_message (uint8_t ttl)
   90.56 +{
   90.57 +	GtPacket *pkt;
   90.58 +
   90.59 +	if (!(pkt = gt_packet_vendor (GT_VMSG_HOPS_FLOW)))
   90.60 +		return NULL;
   90.61 +
   90.62 +	gt_packet_put_uint8 (pkt, ttl);
   90.63 +
   90.64 +	if (gt_packet_error (pkt))
   90.65 +	{
   90.66 +		gt_packet_free (pkt);
   90.67 +		return NULL;
   90.68 +	}
   90.69 +
   90.70 +	return pkt;
   90.71 +}
   90.72 +
   90.73 +static void toggle_sharing (GtNode *node, struct gt_share_state *state,
   90.74 +                            BOOL hidden)
   90.75 +{
   90.76 +	GtPacket *hops_disable;
   90.77 +	uint8_t   max_hops;
   90.78 +
   90.79 +	/* regardless of whether the node receives our HospFlow, record whether
   90.80 +	 * sharing _should_ be disabled */
   90.81 +	state->hidden = hidden;
   90.82 +
   90.83 +	if (hidden)
   90.84 +		max_hops = 0;
   90.85 +	else
   90.86 +		max_hops = 8;
   90.87 +
   90.88 +	if (!(hops_disable = hops_flow_message (max_hops)))
   90.89 +		return;
   90.90 +
   90.91 +	if (!dataset_lookupstr (node->hdr, "vendor-message"))
   90.92 +	{
   90.93 +		gt_packet_free (hops_disable);
   90.94 +		return;
   90.95 +	}
   90.96 +
   90.97 +	GT->DBGSOCK (GT, GT_CONN(node), "sending HopsFlow(%d)", max_hops);
   90.98 +
   90.99 +	gt_node_send (node, hops_disable);
  90.100 +	gt_packet_free (hops_disable);
  90.101 +}
  90.102 +
  90.103 +void gt_share_state_update (GtNode *node)
  90.104 +{
  90.105 +	struct gt_share_state *state;
  90.106 +
  90.107 +	assert (node->state == GT_NODE_CONNECTED);
  90.108 +	state  = node->share_state;
  90.109 +
  90.110 +	if (state->hidden)
  90.111 +	{
  90.112 +		/* sharing disable, reenable it */
  90.113 +		if (!giftd_hidden && !state->plugin_hidden)
  90.114 +			toggle_sharing (node, state, FALSE);
  90.115 +	}
  90.116 +	else
  90.117 +	{
  90.118 +		/* sharing enabled, disable it */
  90.119 +		if (giftd_hidden || state->plugin_hidden)
  90.120 +			toggle_sharing (node, state, TRUE);
  90.121 +	}
  90.122 +}
  90.123 +
  90.124 +/*****************************************************************************/
  90.125 +
  90.126 +/*
  90.127 + * gt_share_state_update() must have been called before calling either of
  90.128 + * these.
  90.129 + */
  90.130 +
  90.131 +void gt_share_state_hide (GtNode *node)
  90.132 +{
  90.133 +	node->share_state->plugin_hidden = TRUE;
  90.134 +	gt_share_state_update (node);
  90.135 +}
  90.136 +
  90.137 +void gt_share_state_show (GtNode *node)
  90.138 +{
  90.139 +	node->share_state->plugin_hidden = FALSE;
  90.140 +	gt_share_state_update (node);
  90.141 +}
  90.142 +
  90.143 +/*****************************************************************************/
  90.144 +
  90.145 +static GtNode *foreach_state (TCPC *c, GtNode *node, void *udata)
  90.146 +{
  90.147 +	gt_share_state_update (node);
  90.148 +	return NULL;
  90.149 +}
  90.150 +
  90.151 +static void update_share_state (BOOL hidden)
  90.152 +{
  90.153 +	giftd_hidden = hidden;
  90.154 +
  90.155 +	/*
  90.156 +	 * Ignore the command from giftd for ultrapeers. XXX: this isn't actually
  90.157 +	 * right, if we change status inbetween two of these message, we're
  90.158 +	 * screwed.
  90.159 +	 */
  90.160 +	if (GT_SELF->klass & GT_NODE_ULTRA)
  90.161 +		return;
  90.162 +
  90.163 +	gt_conn_foreach (foreach_state, NULL,
  90.164 +	                 GT_NODE_ULTRA, GT_NODE_CONNECTED, 0);
  90.165 +}
  90.166 +
  90.167 +void gnutella_share_hide (Protocol *p)
  90.168 +{
  90.169 +	if (giftd_hidden)
  90.170 +		return;
  90.171 +
  90.172 +	update_share_state (TRUE);
  90.173 +}
  90.174 +
  90.175 +void gnutella_share_show (Protocol *p)
  90.176 +{
  90.177 +	if (!giftd_hidden)
  90.178 +		return;
  90.179 +
  90.180 +	update_share_state (FALSE);
  90.181 +}
  90.182 +
  90.183 +/*****************************************************************************/
  90.184 +
  90.185 +void gt_share_state_local_init (void)
  90.186 +{
  90.187 +	giftd_hidden = FALSE;
  90.188 +}
  90.189 +
  90.190 +void gt_share_state_local_cleanup (void)
  90.191 +{
  90.192 +	giftd_hidden = FALSE;
  90.193 +}
    91.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    91.2 +++ b/src/gt_share_state.h	Sat Feb 20 21:18:28 2010 -0800
    91.3 @@ -0,0 +1,72 @@
    91.4 +/*
    91.5 + * $Id: gt_share_state.h,v 1.2 2004/03/31 08:58:24 hipnod Exp $
    91.6 + *
    91.7 + * Copyright (C) 2004 giFT project (gift.sourceforge.net)
    91.8 + *
    91.9 + * This program is free software; you can redistribute it and/or modify it
   91.10 + * under the terms of the GNU General Public License as published by the
   91.11 + * Free Software Foundation; either version 2, or (at your option) any
   91.12 + * later version.
   91.13 + *
   91.14 + * This program is distributed in the hope that it will be useful, but
   91.15 + * WITHOUT ANY WARRANTY; without even the implied warranty of
   91.16 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
   91.17 + * General Public License for more details.
   91.18 + */
   91.19 +
   91.20 +#ifndef GIFT_GT_SHARE_STATE_H_
   91.21 +#define GIFT_GT_SHARE_STATE_H_
   91.22 +
   91.23 +/******************************************************************************/
   91.24 +
   91.25 +/*
   91.26 + * Keep track of the "hidden" share status on the remote node.  To
   91.27 + * disable sharing, the node is sent a HopsFlow message with a payload of 0,
   91.28 + * telling it not to send us any queries.  If the HopsFlow message isn't
   91.29 + * supported, the query handling code can simply drop the queries
   91.30 + * (alternatively, the QRT could be manipulated, but that's more complicated).
   91.31 + *
   91.32 + * There are two variables to deal with: giftd may have disabled sharing, and
   91.33 + * the plugin may have flow-controlled the remote node.  When either of these
   91.34 + * conditions becomes true, the node is sent the HopsFlow message to disable
   91.35 + * receipt of queries.  Only when both these conditions become false does the
   91.36 + * node receive another HopsFlow with a payload of 8, allowing the node to send
   91.37 + * us queries again.
   91.38 + *
   91.39 + * giftd's hidden state is tracked by gt_share_state.c.  Here, each node's
   91.40 + * hidden state is tracked:
   91.41 + */
   91.42 +struct gt_share_state
   91.43 +{
   91.44 +	BOOL  hidden;                  /* sharing is disabled for this node */
   91.45 +	BOOL  plugin_hidden;           /* plugin disabled it (flow control) */
   91.46 +};
   91.47 +
   91.48 +/*****************************************************************************/
   91.49 +
   91.50 +struct gt_share_state *gt_share_state_new    (void);
   91.51 +void                   gt_share_state_free   (struct gt_share_state *state);
   91.52 +
   91.53 +/*****************************************************************************/
   91.54 +
   91.55 +/* update the node about our sharing status, possibly by sending it a HopsFlow
   91.56 + * message */
   91.57 +void                   gt_share_state_update (struct gt_node *node);
   91.58 +
   91.59 +/* control share disabling on each individual node (as opposed to locally) */
   91.60 +void                   gt_share_state_hide   (struct gt_node *node);
   91.61 +void                   gt_share_state_show   (struct gt_node *node);
   91.62 +
   91.63 +/*****************************************************************************/
   91.64 +
   91.65 +void  gt_share_state_local_init    (void);
   91.66 +void  gt_share_state_local_cleanup (void);
   91.67 +
   91.68 +/*****************************************************************************/
   91.69 +
   91.70 +void  gnutella_share_hide (Protocol *p);
   91.71 +void  gnutella_share_show (Protocol *p);
   91.72 +
   91.73 +/******************************************************************************/
   91.74 +
   91.75 +#endif /* GIFT_GT_SHARE_STATE_H_ */
    92.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    92.2 +++ b/src/gt_stats.c	Sat Feb 20 21:18:28 2010 -0800
    92.3 @@ -0,0 +1,303 @@
    92.4 +/*
    92.5 + * $Id: gt_stats.c,v 1.21 2005/01/04 14:59:58 mkern Exp $
    92.6 + *
    92.7 + * Copyright (C) 2001-2003 giFT project (gift.sourceforge.net)
    92.8 + *
    92.9 + * This program is free software; you can redistribute it and/or modify it
   92.10 + * under the terms of the GNU General Public License as published by the
   92.11 + * Free Software Foundation; either version 2, or (at your option) any
   92.12 + * later version.
   92.13 + *
   92.14 + * This program is distributed in the hope that it will be useful, but
   92.15 + * WITHOUT ANY WARRANTY; without even the implied warranty of
   92.16 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
   92.17 + * General Public License for more details.
   92.18 + */
   92.19 +
   92.20 +#include "gt_gnutella.h"
   92.21 +
   92.22 +#include "gt_node.h"
   92.23 +#include "gt_node_list.h"
   92.24 +
   92.25 +#include "gt_search.h"
   92.26 +
   92.27 +/*****************************************************************************/
   92.28 +
   92.29 +struct gt_stats
   92.30 +{
   92.31 +	double          size_kb;
   92.32 +	unsigned long   files;
   92.33 +	size_t          users;
   92.34 +};
   92.35 +
   92.36 +/* number of stats samples to accumulate */
   92.37 +#define NR_SAMPLES         64
   92.38 +
   92.39 +/* number of samples to take surrounding the median */
   92.40 +#define NR_MEDIAN_SAMPLES  2
   92.41 +
   92.42 +/*****************************************************************************/
   92.43 +
   92.44 +/*
   92.45 + * This should be computed from our neighboring peers, but for now it
   92.46 + * hardcodes the max leaves for the most numerous nodes on the network,
   92.47 + * Limewire (32) and BearShare (10)
   92.48 + */
   92.49 +static int              avg_leaves     = (32 + 10) / 2;
   92.50 +
   92.51 +/* default ttl we use in searches */
   92.52 +static int              default_ttl    = GT_SEARCH_TTL;
   92.53 +
   92.54 +/* default outdegree for most nodes */
   92.55 +static int              default_degree = 6;
   92.56 +
   92.57 +/* keep track of the stats for the last NR_SAMPLES pongs */
   92.58 +static struct gt_stats  samples[NR_SAMPLES];
   92.59 +static size_t           samples_index;
   92.60 +static size_t           samples_count;
   92.61 +
   92.62 +/*****************************************************************************/
   92.63 +
   92.64 +void gt_stats_accumulate (in_addr_t ipv4, in_port_t port,
   92.65 +                          in_addr_t src_ip, uint32_t files,
   92.66 +                          uint32_t size_kb)
   92.67 +{
   92.68 +	samples[samples_index].files   = files;
   92.69 +	samples[samples_index].size_kb = size_kb;
   92.70 +
   92.71 +	samples_index = (samples_index + 1) % NR_SAMPLES;
   92.72 +	samples_count++;
   92.73 +
   92.74 +	if (samples_count > NR_SAMPLES)
   92.75 +		samples_count = NR_SAMPLES;
   92.76 +}
   92.77 +
   92.78 +static int stats_cmp (const void *a, const void *b)
   92.79 +{
   92.80 +	const struct gt_stats *a_s = a;
   92.81 +	const struct gt_stats *b_s = b;
   92.82 +
   92.83 +	return a_s->size_kb - b_s->size_kb;
   92.84 +}
   92.85 +
   92.86 +static void clear_stats (struct gt_stats *stats)
   92.87 +{
   92.88 +	stats->size_kb = 0.0;
   92.89 +	stats->files   = 0;
   92.90 +	stats->users   = 0;
   92.91 +}
   92.92 +
   92.93 +static void get_median_stats (struct gt_stats *pong_stats, size_t nr)
   92.94 +{
   92.95 +	int low, high;
   92.96 +	int mid;
   92.97 +	int i;
   92.98 +
   92.99 +	if (nr == 0)
  92.100 +		return;
  92.101 +
  92.102 +	mid  = nr / 2;
  92.103 +
  92.104 +	low  = mid - NR_MEDIAN_SAMPLES;
  92.105 +	high = mid + NR_MEDIAN_SAMPLES;
  92.106 +
  92.107 +	if (low < 0)
  92.108 +		low = 0;
  92.109 +
  92.110 +	if (high > nr - 1)
  92.111 +		high = nr - 1;
  92.112 +
  92.113 +	for (i = low; i <= high; i++)
  92.114 +	{
  92.115 +		pong_stats->size_kb += samples[i].size_kb;
  92.116 +		pong_stats->files   += samples[i].files;
  92.117 +		pong_stats->users++;
  92.118 +	}
  92.119 +}
  92.120 +
  92.121 +static void get_pong_stats (struct gt_stats *pong_stats)
  92.122 +{
  92.123 +	qsort (samples, samples_count, sizeof (struct gt_stats), stats_cmp);
  92.124 +
  92.125 +	clear_stats (pong_stats);
  92.126 +	get_median_stats (pong_stats, samples_count);
  92.127 +}
  92.128 +
  92.129 +/*****************************************************************************/
  92.130 +
  92.131 +static TCPC *count_stats (TCPC *c, GtNode *node, struct gt_stats *st)
  92.132 +{
  92.133 +	/* sanity check */
  92.134 +	if (node->size_kb == (uint32_t)-1 || node->files == (uint32_t)-1)
  92.135 +		return NULL;
  92.136 +
  92.137 +	st->size_kb += node->size_kb;
  92.138 +	st->files   += node->files;
  92.139 +
  92.140 +	if (node->vitality > 0)
  92.141 +		st->users++;
  92.142 +
  92.143 +	return NULL;
  92.144 +}
  92.145 +
  92.146 +static void get_conn_stats (struct gt_stats *conn_stats)
  92.147 +{
  92.148 +	clear_stats (conn_stats);
  92.149 +
  92.150 +	/* grab statistics from the nodes structures */
  92.151 +	gt_conn_foreach (GT_CONN_FOREACH(count_stats), conn_stats,
  92.152 +	                 GT_NODE_NONE, GT_NODE_ANY, 0);
  92.153 +}
  92.154 +
  92.155 +/*****************************************************************************/
  92.156 +
  92.157 +/* no need to pull in math.h for this simple thing: exponent is small */
  92.158 +static unsigned long int_pow (int base, int exponent)
  92.159 +{
  92.160 +	unsigned long total = 1;
  92.161 +
  92.162 +	while (exponent-- > 0)
  92.163 +		total *= base;
  92.164 +
  92.165 +	return total;
  92.166 +}
  92.167 +
  92.168 +static unsigned long sum_network (int degree, int ttl)
  92.169 +{
  92.170 +	int            i;
  92.171 +	unsigned long  sum;
  92.172 +
  92.173 +	if (ttl <= 0)
  92.174 +		return 0;
  92.175 +
  92.176 +	sum = degree;
  92.177 +
  92.178 +	for (i = 2; i <= ttl; i++)
  92.179 +		sum += int_pow (degree-1, i-1) * degree;
  92.180 +
  92.181 +	return sum;
  92.182 +}
  92.183 +
  92.184 +/*
  92.185 + * For each node we're connected to, check the 'X-Degree' and 'X-Max-TTL'
  92.186 + * handshake headers to use for degree and ttl in the calculations.
  92.187 + */
  92.188 +static GtNode *count_edges (TCPC *c, GtNode *node, void *udata)
  92.189 +{
  92.190 +	unsigned long *count         = udata;
  92.191 +	unsigned long  degree        = 0;
  92.192 +	unsigned long  ttl           = 0;
  92.193 +	char          *max_ttl_str;
  92.194 +	char          *x_degree_str;
  92.195 +
  92.196 +	if ((max_ttl_str = dataset_lookupstr (node->hdr, "x-max-ttl")) != NULL)
  92.197 +		ttl = ATOUL (max_ttl_str);
  92.198 +
  92.199 +	if ((x_degree_str = dataset_lookupstr (node->hdr, "x-degree")) != NULL)
  92.200 +		degree = ATOUL (x_degree_str);
  92.201 +
  92.202 +	if (degree == 0 || degree > 200)
  92.203 +		degree = default_degree;
  92.204 +
  92.205 +	if (ttl == 0 || ttl > 30)
  92.206 +		ttl = default_ttl;
  92.207 +
  92.208 +	/* workaround limewire misfeature where it appears X-Max-TTL is set
  92.209 +	 * too high */
  92.210 +	if (degree > 30 && ttl > 5)
  92.211 +		ttl = default_ttl;
  92.212 +
  92.213 +	*count += sum_network (degree, ttl);
  92.214 +	return NULL;
  92.215 +}
  92.216 +
  92.217 +/*
  92.218 + * Of course this is totally inaccurate, and not even dynamic. It
  92.219 + * approximates the maximum number of users in a network of
  92.220 + * Gnutella's structure in a given outdegree and TTL range
  92.221 + * (default_degree, default_ttl). This doesn't represent the whole
  92.222 + * network, and since the network has a significant amount of
  92.223 + * cycles this calculation is likely way too much.
  92.224 + *
  92.225 + * To compensate, we divide by 3. We could make a better guess
  92.226 + * about the number of nodes if we could find the number of cycles
  92.227 + * some way, but this information is not readily available.
  92.228 + */
  92.229 +static unsigned long guess_users (void)
  92.230 +{
  92.231 +	unsigned long users = 0;
  92.232 +
  92.233 +	gt_conn_foreach (count_edges, &users,
  92.234 +	                 GT_NODE_ULTRA, GT_NODE_CONNECTED, 0);
  92.235 +
  92.236 +	/* multiply by the number of leaves */
  92.237 +	users *= avg_leaves;
  92.238 +
  92.239 +	/* divide by average redundancy level. TODO: calculate this dynamically */
  92.240 +	users /= ((3 + 1) / 2);
  92.241 +
  92.242 +	/* divide by 3 to account for cycles */
  92.243 +	users /= 3;
  92.244 +
  92.245 +	/* multiply by 2 because, well...this whole thing is misleading anyway,
  92.246 +	 * and the total number of users is greater than the horizon */
  92.247 +	users *= 2;
  92.248 +
  92.249 +	return users;
  92.250 +}
  92.251 +
  92.252 +/*****************************************************************************/
  92.253 +
  92.254 +/*
  92.255 + * TODO: accumulate statistics on average leaves/cycles on our immediate
  92.256 + *       peers.
  92.257 + */
  92.258 +int gnutella_stats (Protocol *p, unsigned long *users, unsigned long *files,
  92.259 +                    double *size, Dataset **extra)
  92.260 +{
  92.261 +	struct gt_stats pong_stats;
  92.262 +	struct gt_stats conn_stats;
  92.263 +	struct gt_stats avg_stats;
  92.264 +	size_t          connected;
  92.265 +
  92.266 +	*files = *users = *size = 0;
  92.267 +
  92.268 +	connected = gt_conn_length (GT_NODE_ULTRA, GT_NODE_CONNECTED);
  92.269 +
  92.270 +	if (connected == 0)
  92.271 +		return 0;
  92.272 +
  92.273 +	get_pong_stats (&pong_stats);
  92.274 +	get_conn_stats (&conn_stats);
  92.275 +
  92.276 +	if (conn_stats.users == 0)
  92.277 +		conn_stats.users = 1;
  92.278 +
  92.279 +	if (pong_stats.users == 0)
  92.280 +		pong_stats.users = 1;
  92.281 +
  92.282 +	/* divide the total files size by two since it is inflated by ultrapeers
  92.283 +	 * abusing it to communicate their ultrapeer-ness to other nodes */
  92.284 +	pong_stats.size_kb /= 2;
  92.285 +	conn_stats.size_kb /= 2;
  92.286 +
  92.287 +	/* find the average of the data for our two sources */
  92.288 +	pong_stats.size_kb /= pong_stats.users;
  92.289 +	pong_stats.files   /= pong_stats.users;
  92.290 +	conn_stats.size_kb /= conn_stats.users;
  92.291 +	conn_stats.files   /= conn_stats.users;
  92.292 +
  92.293 +	/* put the stats of previously connected nodes on equal footing with the
  92.294 +	 * stats collected from pongs -- they should be more reliable */
  92.295 +	avg_stats.files   = (pong_stats.files + conn_stats.files) / 2;
  92.296 +	avg_stats.size_kb = (pong_stats.size_kb + conn_stats.size_kb) / 2;
  92.297 +
  92.298 +	/* add conn_stats.users for a little variation (not much) */
  92.299 +	avg_stats.users = guess_users () + conn_stats.users;
  92.300 +
  92.301 +	*users = avg_stats.users;
  92.302 +	*files = avg_stats.files * avg_stats.users;
  92.303 +	*size  = avg_stats.size_kb * avg_stats.users / 1024 / 1024;
  92.304 +
  92.305 +	return connected;
  92.306 +}
    93.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    93.2 +++ b/src/gt_stats.h	Sat Feb 20 21:18:28 2010 -0800
    93.3 @@ -0,0 +1,27 @@
    93.4 +/*
    93.5 + * $Id: gt_stats.h,v 1.3 2003/07/21 16:48:07 hipnod Exp $
    93.6 + *
    93.7 + * Copyright (C) 2001-2003 giFT project (gift.sourceforge.net)
    93.8 + *
    93.9 + * This program is free software; you can redistribute it and/or modify it
   93.10 + * under the terms of the GNU General Public License as published by the
   93.11 + * Free Software Foundation; either version 2, or (at your option) any
   93.12 + * later version.
   93.13 + *
   93.14 + * This program is distributed in the hope that it will be useful, but
   93.15 + * WITHOUT ANY WARRANTY; without even the implied warranty of
   93.16 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
   93.17 + * General Public License for more details.
   93.18 + */
   93.19 +
   93.20 +#ifndef __GT_STATS_H__
   93.21 +#define __GT_STATS_H__
   93.22 +
   93.23 +void gt_stats_accumulate (in_addr_t ipv4, in_port_t port,
   93.24 +                          in_addr_t src_ip, uint32_t files,
   93.25 +                          uint32_t size_kb);
   93.26 +
   93.27 +int gnutella_stats (Protocol *p, unsigned long *users, unsigned long *files,
   93.28 +                    double *size, Dataset **extra);
   93.29 +
   93.30 +#endif /* __GT_STATS_H__ */
    94.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    94.2 +++ b/src/gt_urn.c	Sat Feb 20 21:18:28 2010 -0800
    94.3 @@ -0,0 +1,193 @@
    94.4 +/*
    94.5 + * $Id: gt_urn.c,v 1.4 2004/03/05 17:47:29 hipnod Exp $
    94.6 + *
    94.7 + * Copyright (C) 2003 giFT project (gift.sourceforge.net)
    94.8 + *
    94.9 + * This program is free software; you can redistribute it and/or modify it
   94.10 + * under the terms of the GNU General Public License as published by the
   94.11 + * Free Software Foundation; either version 2, or (at your option) any
   94.12 + * later version.
   94.13 + *
   94.14 + * This program is distributed in the hope that it will be useful, but
   94.15 + * WITHOUT ANY WARRANTY; without even the implied warranty of
   94.16 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
   94.17 + * General Public License for more details.
   94.18 + */
   94.19 +
   94.20 +#include "gt_gnutella.h"
   94.21 +#include "gt_urn.h"
   94.22 +#include "encoding/base32.h"
   94.23 +#include "sha1.h"
   94.24 +
   94.25 +/*****************************************************************************/
   94.26 +
   94.27 +#define URN_PREFIX_LEN        (sizeof("urn:")-1)
   94.28 +#define SHA1_PREFIX_LEN       (sizeof("sha1:")-1)
   94.29 +#define BITPRINT_PREFIX_LEN   (sizeof("bitprint:")-1)
   94.30 +
   94.31 +/*****************************************************************************/
   94.32 +
   94.33 +enum urn_types
   94.34 +{
   94.35 +	GT_URN_SHA1     = 0,
   94.36 +	GT_URN_BITPRINT = 1,   /* for now, collapse bitprint to sha1 */
   94.37 +};
   94.38 +
   94.39 +/*****************************************************************************/
   94.40 +
   94.41 +static long get_urn_type (gt_urn_t *urn)
   94.42 +{
   94.43 +	long tmp;
   94.44 +
   94.45 +	memcpy (&tmp, urn, sizeof(tmp));
   94.46 +	return tmp;
   94.47 +}
   94.48 +
   94.49 +static void set_urn_type (gt_urn_t *urn, enum urn_types t)
   94.50 +{
   94.51 +	long tmp = t;
   94.52 +
   94.53 +	memcpy (urn, &tmp, sizeof(tmp));
   94.54 +}
   94.55 +
   94.56 +static unsigned char *get_urn_data (const gt_urn_t *urn)
   94.57 +{
   94.58 +	return (unsigned char *)urn + sizeof(long);
   94.59 +}
   94.60 +
   94.61 +static void set_urn_data (gt_urn_t *urn, const unsigned char *data, size_t len)
   94.62 +{
   94.63 +	memcpy (get_urn_data (urn), data, len);
   94.64 +}
   94.65 +
   94.66 +/*****************************************************************************/
   94.67 +
   94.68 +static size_t bin_length (enum urn_types t)
   94.69 +{
   94.70 +	switch (t)
   94.71 +	{
   94.72 +	 case GT_URN_BITPRINT:
   94.73 +	 case GT_URN_SHA1: return SHA1_BINSIZE;
   94.74 +	 default:          return 0;
   94.75 +	}
   94.76 +}
   94.77 +
   94.78 +static gt_urn_t *sha1_urn_new (const unsigned char *data)
   94.79 +{
   94.80 +	gt_urn_t *new_urn;
   94.81 +
   94.82 +	if (!(new_urn = malloc (SHA1_BINSIZE + sizeof(long))))
   94.83 +		return NULL;
   94.84 +
   94.85 +	/* put the identifier at the beginning */
   94.86 +	set_urn_type (new_urn, GT_URN_SHA1);
   94.87 +
   94.88 +	/* copy the data */
   94.89 +	set_urn_data (new_urn, data, SHA1_BINSIZE);
   94.90 +
   94.91 +	return new_urn;
   94.92 +}
   94.93 +
   94.94 +gt_urn_t *gt_urn_new (const char *urn_type, const unsigned char *data)
   94.95 +{
   94.96 +	if (!strcasecmp (urn_type, "urn:sha1"))
   94.97 +		return sha1_urn_new (data);
   94.98 +
   94.99 +	return NULL;
  94.100 +}
  94.101 +
  94.102 +unsigned char *gt_urn_data (const gt_urn_t *urn)
  94.103 +{
  94.104 +	if (!urn)
  94.105 +		return NULL;
  94.106 +
  94.107 +	return get_urn_data (urn);
  94.108 +}
  94.109 +
  94.110 +char *gt_urn_string (const gt_urn_t *urn)
  94.111 +{
  94.112 +	unsigned char  *data;
  94.113 +	char           *urn_str;
  94.114 +	const size_t    prefix_len = URN_PREFIX_LEN + SHA1_PREFIX_LEN;
  94.115 +
  94.116 +	/*
  94.117 +	 * This is the same for bitprint and sha1 urns, because we convert
  94.118 +	 * to sha1 anyway.
  94.119 +	 */
  94.120 +
  94.121 +	if (!(data = gt_urn_data (urn)))
  94.122 +		return NULL;
  94.123 +
  94.124 +	if (!(urn_str = malloc (prefix_len + SHA1_STRLEN + 1)))
  94.125 +		return NULL;
  94.126 +
  94.127 +	memcpy (urn_str, "urn:sha1:", prefix_len);
  94.128 +	gt_base32_encode (data, SHA1_BINSIZE, urn_str + prefix_len, SHA1_STRLEN);
  94.129 +
  94.130 +	urn_str[prefix_len + SHA1_STRLEN] = 0;
  94.131 +
  94.132 +	return urn_str;
  94.133 +}
  94.134 +
  94.135 +/*****************************************************************************/
  94.136 +
  94.137 +static gt_urn_t *sha1_urn_parse (const char *base32)
  94.138 +{
  94.139 +	gt_urn_t *bin;
  94.140 +
  94.141 +	/* make sure the hash is the right length */
  94.142 +	if (!gt_base32_valid (base32, SHA1_STRLEN))
  94.143 +		return NULL;
  94.144 +
  94.145 +	if (!(bin = malloc (SHA1_BINSIZE + sizeof(long))))
  94.146 +		return NULL;
  94.147 +
  94.148 +	gt_base32_decode (base32, SHA1_STRLEN, bin + sizeof(long), SHA1_BINSIZE);
  94.149 +	set_urn_type (bin, GT_URN_SHA1);
  94.150 +
  94.151 +	return bin;
  94.152 +}
  94.153 +
  94.154 +/*
  94.155 + * Bitprint urns are the format:
  94.156 + *
  94.157 + *      urn:bitprint:[32-character SHA1].[39-character TigerTree]
  94.158 + *
  94.159 + * We use the sha1 parsing and truncate the tigertree for now.
  94.160 + */
  94.161 +static gt_urn_t *bitprint_urn_parse (const char *base32)
  94.162 +{
  94.163 +	return sha1_urn_parse (base32);
  94.164 +}
  94.165 +
  94.166 +gt_urn_t *gt_urn_parse (const char *str)
  94.167 +{
  94.168 +	if (strncasecmp ("urn:", str, URN_PREFIX_LEN) != 0)
  94.169 +		return NULL;
  94.170 +
  94.171 +	str += URN_PREFIX_LEN;
  94.172 +
  94.173 +	if (!strncasecmp (str, "sha1:", SHA1_PREFIX_LEN))
  94.174 +		return sha1_urn_parse (str + SHA1_PREFIX_LEN);
  94.175 +
  94.176 +	if (!strncasecmp (str, "bitprint:", BITPRINT_PREFIX_LEN))
  94.177 +		return bitprint_urn_parse (str + BITPRINT_PREFIX_LEN);
  94.178 +
  94.179 +	return NULL;
  94.180 +}
  94.181 +
  94.182 +/*****************************************************************************/
  94.183 +
  94.184 +int gt_urn_cmp (gt_urn_t *a, gt_urn_t *b)
  94.185 +{
  94.186 +	int ret;
  94.187 +
  94.188 +	if (!a || !b)
  94.189 +		return -1;
  94.190 +
  94.191 +	if ((ret = memcmp (a, b, 4)))
  94.192 +		return ret;
  94.193 +
  94.194 +	return memcmp (a + sizeof(long), b + sizeof(long),
  94.195 +	               bin_length (get_urn_type (a)));
  94.196 +}
    95.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    95.2 +++ b/src/gt_urn.h	Sat Feb 20 21:18:28 2010 -0800
    95.3 @@ -0,0 +1,36 @@
    95.4 +/*
    95.5 + * $Id: gt_urn.h,v 1.3 2004/03/05 17:47:29 hipnod Exp $
    95.6 + *
    95.7 + * Copyright (C) 2003 giFT project (gift.sourceforge.net)
    95.8 + *
    95.9 + * This program is free software; you can redistribute it and/or modify it
   95.10 + * under the terms of the GNU General Public License as published by the
   95.11 + * Free Software Foundation; either version 2, or (at your option) any
   95.12 + * later version.
   95.13 + *
   95.14 + * This program is distributed in the hope that it will be useful, but
   95.15 + * WITHOUT ANY WARRANTY; without even the implied warranty of
   95.16 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
   95.17 + * General Public License for more details.
   95.18 + */
   95.19 +
   95.20 +#ifndef GIFT_GT_URN_H_
   95.21 +#define GIFT_GT_URN_H_
   95.22 +
   95.23 +/*****************************************************************************/
   95.24 +
   95.25 +typedef unsigned char gt_urn_t;
   95.26 +
   95.27 +/*****************************************************************************/
   95.28 +
   95.29 +gt_urn_t      *gt_urn_new           (const char *algo,
   95.30 +                                     const unsigned char *data);
   95.31 +char          *gt_urn_string        (const gt_urn_t *urn);
   95.32 +gt_urn_t      *gt_urn_parse         (const char *string);
   95.33 +int            gt_urn_cmp           (gt_urn_t *a, gt_urn_t *b);
   95.34 +
   95.35 +unsigned char *gt_urn_data          (const gt_urn_t *urn);
   95.36 +
   95.37 +/*****************************************************************************/
   95.38 +
   95.39 +#endif /* GIFT_GT_URN_H_ */
    96.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    96.2 +++ b/src/gt_utils.c	Sat Feb 20 21:18:28 2010 -0800
    96.3 @@ -0,0 +1,352 @@
    96.4 +/*
    96.5 + * $Id: gt_utils.c,v 1.10 2004/04/17 06:05:54 hipnod Exp $
    96.6 + *
    96.7 + * Copyright (C) 2001-2003 giFT project (gift.sourceforge.net)
    96.8 + *
    96.9 + * This program is free software; you can redistribute it and/or modify it
   96.10 + * under the terms of the GNU General Public License as published by the
   96.11 + * Free Software Foundation; either version 2, or (at your option) any
   96.12 + * later version.
   96.13 + *
   96.14 + * This program is distributed in the hope that it will be useful, but
   96.15 + * WITHOUT ANY WARRANTY; without even the implied warranty of
   96.16 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
   96.17 + * General Public License for more details.
   96.18 + */
   96.19 +
   96.20 +#include "gt_gnutella.h"
   96.21 +
   96.22 +#include "gt_utils.h"
   96.23 +
   96.24 +#ifdef USE_ZLIB
   96.25 +#include <zlib.h>
   96.26 +#endif /* USE_ZLIB */
   96.27 +
   96.28 +/*****************************************************************************/
   96.29 +
   96.30 +int peer_addr (int fd, in_addr_t *r_ip, in_port_t *r_port)
   96.31 +{
   96.32 +	struct sockaddr_in sin;
   96.33 +	int                len = sizeof (struct sockaddr_in);
   96.34 +
   96.35 +	if (getpeername (fd, (struct sockaddr *) &sin, &len) < 0)
   96.36 +		return FALSE;
   96.37 +
   96.38 +	/* maybe port should be kept in network byte-order */
   96.39 +	if (r_port)
   96.40 +		*r_port = ntohs (sin.sin_port);
   96.41 +
   96.42 +	if (r_ip)
   96.43 +		*r_ip   = sin.sin_addr.s_addr;
   96.44 +
   96.45 +	return TRUE;
   96.46 +}
   96.47 +
   96.48 +char *make_str (char *array, int len)
   96.49 +{
   96.50 +	static int   data_len = 0;
   96.51 +	static char *data     = 0;
   96.52 +
   96.53 +	if (len <= 0)
   96.54 +		return "";
   96.55 +
   96.56 +	if (!data_len || data_len < len)
   96.57 +	{
   96.58 +		if (data)
   96.59 +			free (data);
   96.60 +
   96.61 +		if (!(data = malloc (len + 1)))
   96.62 +			return "(No memory for string)";
   96.63 +	}
   96.64 +
   96.65 +	memcpy (data, array, len);
   96.66 +
   96.67 +	data[len] = 0;
   96.68 +
   96.69 +	if (len > data_len)
   96.70 +		data_len = len;
   96.71 +
   96.72 +	return data;
   96.73 +}
   96.74 +
   96.75 +void fprint_hex (FILE *f, char *buf, int len)
   96.76 +{
   96.77 +	int i, j;
   96.78 +	unsigned char *line;
   96.79 +	unsigned char *end;
   96.80 +
   96.81 +	end = buf + len;
   96.82 +
   96.83 +	while ((line = buf) != end)
   96.84 +	{
   96.85 +		for (i = 0; i < 16; i++)
   96.86 +		{
   96.87 +			if (line + i == end)
   96.88 +				break;
   96.89 +
   96.90 +			fprintf (f, "%02x ", line[i]);
   96.91 +		}
   96.92 +
   96.93 +		for (j = i; j < 16; j++)
   96.94 +			fprintf (f, "   ");
   96.95 +
   96.96 +		fprintf (f, " ");
   96.97 +
   96.98 +		for (i = 0; i < 16; i++)
   96.99 +		{
  96.100 +			if (line + i == end)
  96.101 +				break;
  96.102 +
  96.103 +			fprintf (f, "%c", isprint (line[i]) ? line[i] : '.');
  96.104 +		}
  96.105 +
  96.106 +		buf += i;
  96.107 +		fprintf (f, "\n");
  96.108 +	}
  96.109 +}
  96.110 +
  96.111 +/*****************************************************************************/
  96.112 +/* HTTP HEADER STORAGE */
  96.113 +
  96.114 +#if 0
  96.115 +static unsigned long hash_lowercase (Dataset *d, void *key, size_t key_len)
  96.116 +{
  96.117 +	char *str;
  96.118 +	int i;
  96.119 +	unsigned long hash;
  96.120 +
  96.121 +	for (hash = 0, i = 0; i < key_len; i++)
  96.122 +		hash ^= tolower (str[i]);
  96.123 +
  96.124 +	return hash;
  96.125 +}
  96.126 +
  96.127 +static int cmp_caseless (Dataset *d, DatasetNode *node, void *key,
  96.128 +                          size_t key_len)
  96.129 +{
  96.130 +	return strncasecmp (node->key, key, MIN (node->key_len, key_len));
  96.131 +}
  96.132 +
  96.133 +/* Like a Dataset, but stores case-insensitive strings for keys to
  96.134 + * string fields. */
  96.135 +Headers *headers_new ()
  96.136 +{
  96.137 +	Dataset *dataset;
  96.138 +
  96.139 +	if (!(dataset = dataset_new (DATASET_DEFAULT)))
  96.140 +		return NULL;
  96.141 +
  96.142 +	dataset->hash_func = hash_lowercase;
  96.143 +
  96.144 +	return hdrs;
  96.145 +}
  96.146 +
  96.147 +char *header_lookup (Headers *hdrs, char *key)
  96.148 +{
  96.149 +	char *value;
  96.150 +
  96.151 +	if (!hdrs || !key)
  96.152 +		return NULL;
  96.153 +
  96.154 +	return dataset_lookupstr (dataset, key);
  96.155 +}
  96.156 +
  96.157 +void header_insert (Headers **hdrs, char *key, char *value)
  96.158 +{
  96.159 +	if (!d || !key)
  96.160 +		return;
  96.161 +
  96.162 +	if (!(*hdrs) && !(*hdrs = headers_new ()))
  96.163 +		return;
  96.164 +
  96.165 +	dataset_insertstr (hdrs->dataset, key, value);
  96.166 +}
  96.167 +
  96.168 +void header_remove (Headers *hdrs, char *key)
  96.169 +{
  96.170 +	if (!hdrs)
  96.171 +		return NULL;
  96.172 +
  96.173 +	dataset_remove (hdrs->dataset, key, size);
  96.174 +}
  96.175 +#endif
  96.176 +
  96.177 +/*****************************************************************************/
  96.178 +/* ZLIB WRAPPER ROUTINES */
  96.179 +
  96.180 +static char *zlib_strerror (int error)
  96.181 +{
  96.182 +#ifndef USE_ZLIB
  96.183 +	return NULL;
  96.184 +#else /* USE_ZLIB */
  96.185 +	switch (error)
  96.186 +	{
  96.187 +	 case Z_OK:             return "OK";
  96.188 +	 case Z_STREAM_END:     return "End of stream";
  96.189 +	 case Z_NEED_DICT:      return "Decompressing dictionary needed";
  96.190 +	 case Z_STREAM_ERROR:   return "Stream error";
  96.191 +	 case Z_ERRNO:          return "Generic zlib error";
  96.192 +	 case Z_DATA_ERROR:     return "Data error";
  96.193 +	 case Z_MEM_ERROR:      return "Memory error";
  96.194 +	 case Z_BUF_ERROR:      return "Buffer error";
  96.195 +	 case Z_VERSION_ERROR:  return "Incompatible runtime zlib library";
  96.196 +	 default:               break;
  96.197 +	}
  96.198 +
  96.199 +	return "Invalid zlib error code";
  96.200 +#endif /* USE_ZLIB */
  96.201 +}
  96.202 +
  96.203 +static void zstream_close (ZlibStream *stream)
  96.204 +{
  96.205 +#ifdef USE_ZLIB
  96.206 +	switch (stream->type)
  96.207 +	{
  96.208 +	 case ZSTREAM_INFLATE: inflateEnd (stream->streamptr);    break;
  96.209 +	 case ZSTREAM_DEFLATE: deflateEnd (stream->streamptr);    break;
  96.210 +	 default:                                                 break;
  96.211 +	}
  96.212 +
  96.213 +	if (stream->streamptr)
  96.214 +		free (stream->streamptr);
  96.215 +
  96.216 +	stream->type      = ZSTREAM_NONE;
  96.217 +	stream->streamptr = NULL;
  96.218 +#endif /* USE_ZLIB */
  96.219 +}
  96.220 +
  96.221 +ZlibStream *zlib_stream_open (size_t max_size)
  96.222 +{
  96.223 +	ZlibStream *stream;
  96.224 +	char       *data;
  96.225 +
  96.226 +	if (!(stream = malloc (sizeof (ZlibStream))))
  96.227 +		return NULL;
  96.228 +
  96.229 +	if (!(data = malloc (max_size)))
  96.230 +	{
  96.231 +		free (stream);
  96.232 +		return NULL;
  96.233 +	}
  96.234 +
  96.235 +	memset (stream, 0, sizeof (ZlibStream));
  96.236 +	memset (data, 0, max_size);
  96.237 +
  96.238 +	stream->start = data;
  96.239 +	stream->end   = data + max_size;
  96.240 +	stream->data  = data;
  96.241 +	stream->pos   = data;
  96.242 +	stream->type  = ZSTREAM_NONE;
  96.243 +
  96.244 +	return stream;
  96.245 +}
  96.246 +
  96.247 +void zlib_stream_close (ZlibStream *stream)
  96.248 +{
  96.249 +	if (!stream)
  96.250 +		return;
  96.251 +
  96.252 +	if (stream->type != ZSTREAM_NONE)
  96.253 +		zstream_close (stream);
  96.254 +
  96.255 +	if (stream->data)
  96.256 +		free (stream->data);
  96.257 +
  96.258 +	free (stream);
  96.259 +}
  96.260 +
  96.261 +int zlib_stream_write (ZlibStream *stream, char *data, size_t size)
  96.262 +{
  96.263 +	if (!stream)
  96.264 +		return 0;
  96.265 +
  96.266 +	/* check for overflow */
  96.267 +	if (stream->pos + (size-1) > stream->end)
  96.268 +		return 0;
  96.269 +
  96.270 +	memcpy (stream->pos, data, size);
  96.271 +
  96.272 +	stream->pos += size;
  96.273 +
  96.274 +	return size;
  96.275 +}
  96.276 +
  96.277 +int zlib_stream_read (ZlibStream *stream, char **r_data)
  96.278 +{
  96.279 +	size_t size;
  96.280 +
  96.281 +	if (stream->start == stream->pos)
  96.282 +		return 0;
  96.283 +
  96.284 +	*r_data = stream->start;
  96.285 +
  96.286 +	size = stream->pos - stream->start;
  96.287 +
  96.288 +	stream->start = stream->pos;
  96.289 +
  96.290 +	return size;
  96.291 +}
  96.292 +
  96.293 +int zlib_stream_inflate (ZlibStream *stream, char *zdata, size_t size)
  96.294 +{
  96.295 +#ifndef USE_ZLIB
  96.296 +	return FALSE;
  96.297 +#else /* USE_ZLIB */
  96.298 +	z_streamp inz;
  96.299 +	int ret;
  96.300 +	size_t free_size;
  96.301 +
  96.302 +	if (!stream)
  96.303 +		return FALSE;
  96.304 +
  96.305 +	if (!stream->streamptr)
  96.306 +	{
  96.307 +		assert (stream->type == ZSTREAM_NONE);
  96.308 +
  96.309 +		if (!(inz = malloc (sizeof (*inz))))
  96.310 +			return FALSE;
  96.311 +
  96.312 +		inz->zalloc = NULL;
  96.313 +		inz->zfree  = NULL;
  96.314 +		inz->opaque = NULL;
  96.315 +
  96.316 +		if ((ret = inflateInit (inz)) != Z_OK)
  96.317 +		{
  96.318 +			GT->DBGFN (GT, "inflateInit error %s", zlib_strerror (ret));
  96.319 +			free (inz);
  96.320 +			return FALSE;
  96.321 +		}
  96.322 +
  96.323 +		stream->type      = ZSTREAM_INFLATE;
  96.324 +		stream->streamptr = inz;
  96.325 +	}
  96.326 +
  96.327 +	inz = stream->streamptr;
  96.328 +
  96.329 +	/* Argh, I think this is right, but I'm not sure about the +1 */
  96.330 +	free_size = stream->end - stream->pos + 1;
  96.331 +
  96.332 +	inz->next_in   = zdata;
  96.333 +	inz->avail_in  = size;
  96.334 +	inz->next_out  = stream->pos;
  96.335 +	inz->avail_out = free_size;
  96.336 +
  96.337 +	GT->DBGFN (GT, "next_out: %p avail_out: %u", inz->next_out, inz->avail_out);
  96.338 +
  96.339 +	if ((ret = inflate (inz, Z_NO_FLUSH)) != Z_OK)
  96.340 +	{
  96.341 +		GT->DBGFN (GT, "decompression error: %s", zlib_strerror (ret));
  96.342 +		return FALSE;
  96.343 +	}
  96.344 +
  96.345 +	GT->DBGFN (GT, "inz->avail_in = %u, inz->avail_out = %u", inz->avail_in, 
  96.346 +	           inz->avail_out);
  96.347 +
  96.348 +	stream->pos += free_size - inz->avail_out;
  96.349 +
  96.350 +	if (ret == Z_STREAM_END)
  96.351 +		zstream_close (stream);
  96.352 +
  96.353 +	return TRUE;
  96.354 +#endif /* USE_ZLIB */
  96.355 +}
    97.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    97.2 +++ b/src/gt_utils.h	Sat Feb 20 21:18:28 2010 -0800
    97.3 @@ -0,0 +1,76 @@
    97.4 +/*
    97.5 + * $Id: gt_utils.h,v 1.8 2004/04/17 06:05:54 hipnod Exp $
    97.6 + *
    97.7 + * Copyright (C) 2001-2003 giFT project (gift.sourceforge.net)
    97.8 + *
    97.9 + * This program is free software; you can redistribute it and/or modify it
   97.10 + * under the terms of the GNU General Public License as published by the
   97.11 + * Free Software Foundation; either version 2, or (at your option) any
   97.12 + * later version.
   97.13 + *
   97.14 + * This program is distributed in the hope that it will be useful, but
   97.15 + * WITHOUT ANY WARRANTY; without even the implied warranty of
   97.16 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
   97.17 + * General Public License for more details.
   97.18 + */
   97.19 +
   97.20 +#ifndef GIFT_GT_UTILS_H_
   97.21 +#define GIFT_GT_UTILS_H_
   97.22 +
   97.23 +/*****************************************************************************/
   97.24 +
   97.25 +/* define to set data structures to a predefined value after freeing */
   97.26 +/* #define POISON_FREE	1 */
   97.27 +
   97.28 +/*****************************************************************************/
   97.29 +
   97.30 +typedef struct gt_zlib_stream
   97.31 +{
   97.32 +	void          *streamptr;
   97.33 +
   97.34 +	enum
   97.35 +	{
   97.36 +		ZSTREAM_NONE    = 0x00,
   97.37 +		ZSTREAM_INFLATE = 0x01,
   97.38 +		ZSTREAM_DEFLATE = 0x02,
   97.39 +	} type;
   97.40 +
   97.41 +	char *data;
   97.42 +	char *start, *end;
   97.43 +	char *pos;
   97.44 +} ZlibStream;
   97.45 +
   97.46 +/*****************************************************************************/
   97.47 +
   97.48 +char   *make_str   (char *pseudo_str, int len);
   97.49 +
   97.50 +int     peer_addr  (int fd, in_addr_t *r_ip, in_port_t *r_port);
   97.51 +
   97.52 +void    fprint_hex (FILE *f, char *buf, int len);
   97.53 +
   97.54 +/*****************************************************************************/
   97.55 +
   97.56 +ZlibStream *zlib_stream_open    (size_t max);
   97.57 +void        zlib_stream_close   (ZlibStream *stream);
   97.58 +int         zlib_stream_inflate (ZlibStream *stream, char *data, size_t size);
   97.59 +int         zlib_stream_write   (ZlibStream *stream, char *data, size_t size);
   97.60 +
   97.61 +/* returns the amount of data read */
   97.62 +int         zlib_stream_read    (ZlibStream *stream, char **r_data);
   97.63 +
   97.64 +/*****************************************************************************/
   97.65 +
   97.66 +#ifdef POISON_FREE
   97.67 +#define poisoned_free(ptr, chr) \
   97.68 +do { \
   97.69 +	memset ((ptr), (chr), sizeof (*(ptr))); \
   97.70 +	free ((ptr)); \
   97.71 +} while (0)
   97.72 +#else /* POISON_FREE */
   97.73 +#define poisoned_free(ptr, chr) \
   97.74 +	free ((ptr))
   97.75 +#endif /* POISON_FREE */
   97.76 +
   97.77 +/*****************************************************************************/
   97.78 +
   97.79 +#endif /* GIFT_GT_UTILS_H_ */
    98.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    98.2 +++ b/src/gt_version.c	Sat Feb 20 21:18:28 2010 -0800
    98.3 @@ -0,0 +1,26 @@
    98.4 +/*
    98.5 + * $Id: gt_version.c,v 1.2 2004/06/02 07:13:56 hipnod Exp $
    98.6 + *
    98.7 + * Copyright (C) 2003 giFT project (gift.sourceforge.net)
    98.8 + *
    98.9 + * This program is free software; you can redistribute it and/or modify it
   98.10 + * under the terms of the GNU General Public License as published by the
   98.11 + * Free Software Foundation; either version 2, or (at your option) any
   98.12 + * later version.
   98.13 + *
   98.14 + * This program is distributed in the hope that it will be useful, but
   98.15 + * WITHOUT ANY WARRANTY; without even the implied warranty of
   98.16 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
   98.17 + * General Public License for more details.
   98.18 + */
   98.19 +
   98.20 +#include "gt_gnutella.h"
   98.21 +
   98.22 +#include "gt_version.h"
   98.23 +
   98.24 +/*****************************************************************************/
   98.25 +
   98.26 +char *gt_version (void)
   98.27 +{
   98.28 +	return "giFT-Gnutella/" GT_VERSION;
   98.29 +}
    99.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    99.2 +++ b/src/gt_version.h	Sat Feb 20 21:18:28 2010 -0800
    99.3 @@ -0,0 +1,26 @@
    99.4 +/*
    99.5 + * $Id: gt_version.h,v 1.2 2004/06/02 07:13:56 hipnod Exp $
    99.6 + *
    99.7 + * Copyright (C) 2003 giFT project (gift.sourceforge.net)
    99.8 + *
    99.9 + * This program is free software; you can redistribute it and/or modify it
   99.10 + * under the terms of the GNU General Public License as published by the
   99.11 + * Free Software Foundation; either version 2, or (at your option) any
   99.12 + * later version.
   99.13 + *
   99.14 + * This program is distributed in the hope that it will be useful, but
   99.15 + * WITHOUT ANY WARRANTY; without even the implied warranty of
   99.16 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
   99.17 + * General Public License for more details.
   99.18 + */
   99.19 +
   99.20 +#ifndef GIFT_GT_VERSION_H_
   99.21 +#define GIFT_GT_VERSION_H_
   99.22 +
   99.23 +/*****************************************************************************/
   99.24 +
   99.25 +char   *gt_version                (void);
   99.26 +
   99.27 +/*****************************************************************************/
   99.28 +
   99.29 +#endif /* GIFT_GT_VERSION_H_ */
   100.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   100.2 +++ b/src/gt_web_cache.c	Sat Feb 20 21:18:28 2010 -0800
   100.3 @@ -0,0 +1,925 @@
   100.4 +/*
   100.5 + * $Id: gt_web_cache.c,v 1.65 2006/08/06 16:53:36 hexwab Exp $
   100.6 + *
   100.7 + * Copyright (C) 2001-2003 giFT project (gift.sourceforge.net)
   100.8 + *
   100.9 + * This program is free software; you can redistribute it and/or modify it
  100.10 + * under the terms of the GNU General Public License as published by the
  100.11 + * Free Software Foundation; either version 2, or (at your option) any
  100.12 + * later version.
  100.13 + *
  100.14 + * This program is distributed in the hope that it will be useful, but
  100.15 + * WITHOUT ANY WARRANTY; without even the implied warranty of
  100.16 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
  100.17 + * General Public License for more details.
  100.18 + */
  100.19 +
  100.20 +#include "gt_gnutella.h"
  100.21 +
  100.22 +#include "file_cache.h"
  100.23 +#include "http_request.h"
  100.24 +
  100.25 +#include "gt_connect.h"
  100.26 +#include "gt_node.h"
  100.27 +#include "gt_node_list.h"
  100.28 +#include "gt_netorg.h"
  100.29 +
  100.30 +#include "gt_web_cache.h"
  100.31 +#include "gt_conf.h"
  100.32 +
  100.33 +#include "dns.h"
  100.34 +
  100.35 +/*****************************************************************************/
  100.36 +
  100.37 +/* minimum time to wait before reconnecting to a webcache */
  100.38 +#define CACHE_RETRY_TIME             (8 * EHOURS)
  100.39 +
  100.40 +/*****************************************************************************/
  100.41 +
  100.42 +/* number of times we have hit some gwebcaches */
  100.43 +static int              cache_hits;
  100.44 +
  100.45 +/* the absolute next time we will allow ourselves to access a cache */
  100.46 +static time_t           next_atime;
  100.47 +
  100.48 +/* amount of time to layoff the caches once we've received some data */
  100.49 +static time_t           backoff_time    = 1 * EHOURS;
  100.50 +
  100.51 +/* holds all the caches */
  100.52 +static FileCache       *web_caches;
  100.53 +
  100.54 +/* proxy server to contact */
  100.55 +static char            *gt_proxy_server;
  100.56 +
  100.57 +/* webcaches that succeeded connecting, but returned errors or an
  100.58 + * unparseable response */
  100.59 +static FileCache       *bad_caches;
  100.60 +
  100.61 +/* whether we are in the process of checking the caches */
  100.62 +static BOOL             checking_caches;
  100.63 +
  100.64 +/*****************************************************************************/
  100.65 +
  100.66 +static void parse_hostfile_response (HttpRequest *http_req, char *hosts_file);
  100.67 +static void parse_urlfile_response  (HttpRequest *http_req, char *url_file);
  100.68 +
  100.69 +/*****************************************************************************/
  100.70 +
  100.71 +/* parse the extended data in the webcaches file, now its just mtime */
  100.72 +static BOOL parse_web_cache_value (char *value, time_t *r_atime)
  100.73 +{
  100.74 +	time_t atime;
  100.75 +
  100.76 +	if ((atime = ATOUL (value)) == (unsigned long) -1)
  100.77 +		atime = 0;
  100.78 +
  100.79 +	if (r_atime)
  100.80 +		*r_atime = atime;
  100.81 +
  100.82 +	return TRUE;
  100.83 +}
  100.84 +
  100.85 +/*****************************************************************************/
  100.86 +
  100.87 +static char *new_webcache_url (const char *host, const char *path)
  100.88 +{
  100.89 +	return stringf_dup ("http://%s/%s", host, STRING_NOTNULL(path));
  100.90 +}
  100.91 +
  100.92 +static void ban_webcache (HttpRequest *req, const char *why)
  100.93 +{
  100.94 +	char *url;
  100.95 +
  100.96 +	url = new_webcache_url (req->host, req->path);
  100.97 +	GT->dbg (GT, "banning webcache %s", url);
  100.98 +
  100.99 +	file_cache_insert (bad_caches, url, why);
 100.100 +	file_cache_sync (bad_caches);
 100.101 +
 100.102 +	free (url);
 100.103 +}
 100.104 +
 100.105 +static void insert_webcache (const char *host_name, const char *remote_path,
 100.106 +                             time_t atime)
 100.107 +{
 100.108 +	char *url;
 100.109 +	char *field;
 100.110 +
 100.111 +	url   = new_webcache_url (host_name, remote_path);
 100.112 +	field = stringf_dup ("%lu", atime);
 100.113 +
 100.114 +	file_cache_insert (web_caches, url, field);
 100.115 +
 100.116 +	free (url);
 100.117 +	free (field);
 100.118 +}
 100.119 +
 100.120 +/*****************************************************************************/
 100.121 +
 100.122 +static void handle_close_request (HttpRequest *req, int error_code)
 100.123 +{
 100.124 +	String *s;
 100.125 +
 100.126 +	if (error_code < 0 || error_code < 200 || error_code >= 300)
 100.127 +	{
 100.128 +		if (error_code == -1)
 100.129 +		{
 100.130 +			/* the error was our fault, out of mem, etc. dont do anything */
 100.131 +			GT->DBGFN (GT, "connect to server %s failed for some reason",
 100.132 +			           req->host);
 100.133 +		}
 100.134 +		else
 100.135 +		{
 100.136 +			char err[32];
 100.137 +
 100.138 +			snprintf (err, sizeof(err), "Received error %d", error_code);
 100.139 +
 100.140 +			/*
 100.141 +			 * Not found, internal server error, or too many redirects: ban
 100.142 +			 * the server's URL
 100.143 +			 */
 100.144 +			GT->DBGFN (GT, "server %s returned error %i", req->host,
 100.145 +			           error_code);
 100.146 +			ban_webcache (req, err);
 100.147 +		}
 100.148 +	}
 100.149 +
 100.150 +	/* TODO: this assumes this is the one hostfile request flying around,
 100.151 +	 * and not a urlfile request, which probably needs to be handled
 100.152 +	 * separately */
 100.153 +	checking_caches = FALSE;
 100.154 +
 100.155 +	if ((s = req->data))
 100.156 +		string_free (s);
 100.157 +}
 100.158 +
 100.159 +static void parse_hostfile_response (HttpRequest *http_req, char *host_file)
 100.160 +{
 100.161 +	int      hosts = 0;
 100.162 +	GtNode  *node;
 100.163 +	time_t   now;
 100.164 +
 100.165 +	if (!host_file)
 100.166 +	{
 100.167 +		GT->DBGFN (GT, "empty host file from %s", http_req->host);
 100.168 +		return;
 100.169 +	}
 100.170 +
 100.171 +	GT->DBGFN (GT, "hostfile from server = %s", host_file);
 100.172 +
 100.173 +	now = time (NULL);
 100.174 +
 100.175 +	/*
 100.176 +	 * If the response start with "ERROR: " (or pseudo-html '<' char), ban the
 100.177 +	 * webcache.
 100.178 +	 */
 100.179 +	if (!strncasecmp (host_file, "ERROR", sizeof ("ERROR") - 1) ||
 100.180 +	    host_file[0] == '<')
 100.181 +	{
 100.182 +		ban_webcache (http_req, "Malformed response content");
 100.183 +		return;
 100.184 +	}
 100.185 +
 100.186 +	while (host_file && *host_file)
 100.187 +	{
 100.188 +		char           *host;
 100.189 +		in_addr_t       ip;
 100.190 +		in_port_t       port;
 100.191 +
 100.192 +		host = string_sep_set (&host_file, "\r\n");
 100.193 +
 100.194 +		ip   = net_ip (string_sep (&host, ":"));
 100.195 +		port = ATOI   (host);
 100.196 +
 100.197 +		if (!port || !ip || ip == INADDR_NONE)
 100.198 +			continue;
 100.199 +
 100.200 +		GT->DBGFN (GT, "registering %s:%hu (from cache %s)", net_ip_str (ip),
 100.201 +		           port, http_req->host);
 100.202 +
 100.203 +		/* register the hosts as ultrapeers */
 100.204 +		node = gt_node_register (ip, port, GT_NODE_ULTRA);
 100.205 +		hosts++;
 100.206 +
 100.207 +		if (!node)
 100.208 +			continue;
 100.209 +
 100.210 +		/* set the vitality on this node to preserve it across restarts */
 100.211 +		node->vitality = now;
 100.212 +
 100.213 +		/* might be connected already */
 100.214 +		if (node->state != GT_NODE_DISCONNECTED)
 100.215 +			continue;
 100.216 +
 100.217 +		/* try to connect to the first 5 */
 100.218 +		if (hosts <= 5 && gt_conn_need_connections (GT_NODE_ULTRA))
 100.219 +			gt_connect (node);
 100.220 +
 100.221 +		/* don't allow the cache to register an infinite number of hosts */
 100.222 +		if (hosts >= 50)
 100.223 +			break;
 100.224 +	}
 100.225 +
 100.226 +	/* save the nodes we added to disk so we dont hit the caches again */
 100.227 +	gt_node_list_save ();
 100.228 +
 100.229 +	/*
 100.230 +	 * Do an exponential backoff from the caches. If we were online and
 100.231 +	 * able to receive data, we should be getting node information
 100.232 +	 * some other way now.
 100.233 +	 */
 100.234 +	if (hosts >= 5)
 100.235 +	{
 100.236 +		next_atime    = now + backoff_time;
 100.237 +		backoff_time *= 2;
 100.238 +	}
 100.239 +}
 100.240 +
 100.241 +static void parse_urlfile_response (HttpRequest *http_req, char *url_file)
 100.242 +{
 100.243 +	int caches = 0;
 100.244 +
 100.245 +	if (!url_file)
 100.246 +	{
 100.247 +		GT->DBGFN (GT, "empty url file from %s", http_req->host);
 100.248 +		return;
 100.249 +	}
 100.250 +
 100.251 +	GT->DBGFN (GT, "urlfile from server = %s", url_file);
 100.252 +
 100.253 +	while (url_file && *url_file)
 100.254 +	{
 100.255 +		char *url;
 100.256 +		char *host_name;
 100.257 +		char *remote_path;
 100.258 +
 100.259 +		url = string_sep_set (&url_file, "\r\n");
 100.260 +
 100.261 +		/* skip past http:// */
 100.262 +		string_sep (&url, "http://");
 100.263 +
 100.264 +		host_name   = string_sep (&url, "/");
 100.265 +		remote_path = url;
 100.266 +
 100.267 +		/* NOTE: remote_path is possibly empty */
 100.268 +		if (!host_name)
 100.269 +			continue;
 100.270 +
 100.271 +		url = stringf ("http://%s/%s", host_name, STRING_NOTNULL(remote_path));
 100.272 +
 100.273 +		/* if the webcache is already in our db, skip it */
 100.274 +		if (file_cache_lookup (web_caches, url))
 100.275 +			continue;
 100.276 +
 100.277 +		/*
 100.278 +		 * Only allow caches to register two more caches: this
 100.279 +		 * small number helps to avoid our list of caches getting
 100.280 +		 * polluted.
 100.281 +		 */
 100.282 +		if (++caches > 2)
 100.283 +			break;
 100.284 +
 100.285 +		/* format is: <url> <last time visited> */
 100.286 +		file_cache_insert (web_caches, url, "0");
 100.287 +	}
 100.288 +
 100.289 +	/* sync the pending web caches to disk */
 100.290 +	file_cache_sync (web_caches);
 100.291 +}
 100.292 +
 100.293 +static void end_request (HttpRequest *req, char *data)
 100.294 +{
 100.295 +	char *str = req->request;
 100.296 +
 100.297 +	if (str && !strncmp (str, "hostfile", strlen ("hostfile")))
 100.298 +		parse_hostfile_response (req, data);
 100.299 +	else if (str && !strncmp (str, "urlfile", strlen ("urlfile")))
 100.300 +		parse_urlfile_response (req, data);
 100.301 +	else
 100.302 +		abort ();
 100.303 +}
 100.304 +
 100.305 +/*****************************************************************************/
 100.306 +
 100.307 +/*
 100.308 + * Return TRUE if newname is in the same domain as oldname.  For example,
 100.309 + * "new.gwc.example.com", "example.com", and "cache.example.com" are all
 100.310 + * considered in the same domain as "www.example.com".
 100.311 + *
 100.312 + * This is called on redirects, to make sure the cache can't redirect to an
 100.313 + * innocent site as part of a DDoS attack.
 100.314 + */
 100.315 +static BOOL in_same_domain (const char *oldname, const char *newname)
 100.316 +{
 100.317 +	return FALSE;
 100.318 +#if 0
 100.319 +	const char *p;
 100.320 +	const char *largest = NULL;
 100.321 +	int         periods = 0;
 100.322 +
 100.323 +	p = newname;
 100.324 +
 100.325 +	/* get the largest common substring */
 100.326 +	while (p != NULL)
 100.327 +	{
 100.328 +		if ((largest = strstr (oldname, p)))
 100.329 +			break;
 100.330 +
 100.331 +		/* advance to next domain part */
 100.332 +		p = strchr (p + 1, '.');
 100.333 +	}
 100.334 +
 100.335 +	if (!largest)
 100.336 +		return FALSE;
 100.337 +
 100.338 +	/*
 100.339 +	 * Make sure the substring matches completely to the end.  This will
 100.340 +	 * actually fail when it shouldn't if one name includes the '.' toplevel
 100.341 +	 * domain and one doesn't.  Oh well.
 100.342 +	 */
 100.343 +	if (strcmp (largest, p) != 0)
 100.344 +		return FALSE;
 100.345 +
 100.346 +	/*
 100.347 +	 * Count the number of periods to find the number of subdomains in the
 100.348 +	 * largest common substring.
 100.349 +	 */
 100.350 +	for (p = largest; *p != 0; p++)
 100.351 +	{
 100.352 +		if (*p == '.')
 100.353 +			periods++;
 100.354 +	}
 100.355 +
 100.356 +	/*
 100.357 +	 * If the last character is the root '.', subtract one, since we are
 100.358 +	 * looking for the number of common subdomains, and the root is shared by
 100.359 +	 * all names.
 100.360 +	 */
 100.361 +	if (largest[strlen (largest) - 1] == '.')
 100.362 +		periods--;
 100.363 +
 100.364 +	/*
 100.365 +	 * If there are two periods, at least two toplevel domains match.
 100.366 +	 */
 100.367 +	if (periods >= 2)
 100.368 +		return TRUE;
 100.369 +
 100.370 +	/*
 100.371 +	 * If there is only one period shared, the names MAY be in the same
 100.372 +	 * domain: one of the names has to be completely contained within the
 100.373 +	 * other, such as the case of "foo.example.com" and "example.com".
 100.374 +	 */
 100.375 +	if (periods == 1 &&
 100.376 +	    (strcmp (largest, oldname) == 0 || strcmp (largest, newname) == 0))
 100.377 +	{
 100.378 +		return TRUE;
 100.379 +	}
 100.380 +
 100.381 +	/* not in same domain */
 100.382 +	return FALSE;
 100.383 +#endif
 100.384 +}
 100.385 +
 100.386 +/*
 100.387 + * Called to when the webcache sends a 300-level response with a provided
 100.388 + * Location: header.  Have to make sure the domain the cache directs us
 100.389 + * to is the same.
 100.390 + */
 100.391 +static BOOL handle_redirect (HttpRequest *req, const char *new_host,
 100.392 +                             const char *new_path)
 100.393 +{
 100.394 +	assert (new_host != NULL);
 100.395 +
 100.396 +	if (in_same_domain (req->host, new_host) == FALSE)
 100.397 +		return FALSE;
 100.398 +
 100.399 +	/* might want to do something else if the ban list later becomes per host
 100.400 +	 * rather than per URL */
 100.401 +	ban_webcache (req, "Redirected");
 100.402 +
 100.403 +	GT->DBGFN (GT, "Redirecting to new webcache %s/%s", new_host, new_path);
 100.404 +
 100.405 +	insert_webcache (new_host, new_path, time (NULL));
 100.406 +	file_cache_sync (web_caches);
 100.407 +
 100.408 +	return TRUE;
 100.409 +}
 100.410 +
 100.411 +/*****************************************************************************/
 100.412 +
 100.413 +static BOOL handle_recv (HttpRequest *req, char *data, size_t len)
 100.414 +{
 100.415 +	String *s;
 100.416 +
 100.417 +	/* EOF */
 100.418 +	if (!data)
 100.419 +	{
 100.420 +		char *str = NULL;
 100.421 +
 100.422 +		if ((s = req->data))
 100.423 +			str = s->str;
 100.424 +
 100.425 +		GT->DBGFN (GT, "read %s from server %s", str, req->host);
 100.426 +		end_request (req, str);
 100.427 +
 100.428 +		/* clear data link */
 100.429 +		req->data = NULL;
 100.430 +
 100.431 +		return TRUE;
 100.432 +	}
 100.433 +
 100.434 +	if (!len)
 100.435 +		return TRUE;
 100.436 +
 100.437 +	GT->DBGFN (GT, "server sent us: %s", data);
 100.438 +
 100.439 +	if (!(s = req->data) && !(s = req->data = string_new (NULL, 0, 0, TRUE)))
 100.440 +		return FALSE;
 100.441 +
 100.442 +	if (string_append (s, data) != len)
 100.443 +	{
 100.444 +		GT->DBGFN (GT, "string append failed");
 100.445 +		return FALSE;
 100.446 +	}
 100.447 +
 100.448 +	return TRUE;
 100.449 +}
 100.450 +
 100.451 +/*****************************************************************************/
 100.452 +
 100.453 +static BOOL handle_add_headers (HttpRequest *req, Dataset **headers)
 100.454 +{
 100.455 +	/* don't let intermediaries cache our request, I think */
 100.456 +	dataset_insertstr (headers, "Cache-Control", "no-cache");
 100.457 +
 100.458 +	return TRUE;
 100.459 +}
 100.460 +
 100.461 +/*****************************************************************************/
 100.462 +
 100.463 +static BOOL parse_host_and_port (char **r_host, in_port_t *r_port)
 100.464 +{
 100.465 +	char  *str;
 100.466 +	char  *host;
 100.467 +	long   port;
 100.468 +
 100.469 +	str = *r_host;
 100.470 +
 100.471 +	if (r_port)
 100.472 +		*r_port = 80;
 100.473 +
 100.474 +	/* skip leading 'http://' if found */
 100.475 +	if (strstr (str, "http://"))
 100.476 +		str += strlen ("http://");
 100.477 +
 100.478 +	host = string_sep (&str, ":");
 100.479 +
 100.480 +	if (!host)
 100.481 +		return FALSE;
 100.482 +
 100.483 +	*r_host = host;
 100.484 +
 100.485 +	if (str && !string_isempty (str))
 100.486 +	{
 100.487 +		port = gift_strtol (str);
 100.488 +
 100.489 +		/* make sure port is valid */
 100.490 +		if (port <= 0 || port >= 65536)
 100.491 +			return FALSE;
 100.492 +
 100.493 +		*r_port = port;
 100.494 +	}
 100.495 +
 100.496 +	return TRUE;
 100.497 +}
 100.498 +
 100.499 +static TCPC *open_http_connection (HttpRequest *req, const char *http_name)
 100.500 +{
 100.501 +	in_addr_t       ip;
 100.502 +	in_port_t       port;
 100.503 +	char           *str;
 100.504 +	char           *name;
 100.505 +	TCPC           *c;
 100.506 +	struct hostent *host;
 100.507 +
 100.508 +	if (!http_name)
 100.509 +		return NULL;
 100.510 +
 100.511 +	if (!(str = STRDUP (http_name)))
 100.512 +		return NULL;
 100.513 +
 100.514 +	name = str;
 100.515 +
 100.516 +	if (!parse_host_and_port (&name, &port))
 100.517 +	{
 100.518 +		GT->DBGFN (GT, "error parsing hostname \"%s\"", str);
 100.519 +		free (str);
 100.520 +		return NULL;
 100.521 +	}
 100.522 +
 100.523 +	if (!(host = gt_dns_lookup (name)))
 100.524 +	{
 100.525 +		free (str);
 100.526 +		return NULL;
 100.527 +	}
 100.528 +
 100.529 +	/* ip is in network-order already */
 100.530 +	memcpy (&ip, host->h_addr, MIN (host->h_length, sizeof (ip)));
 100.531 +
 100.532 +	if (net_match_host (ip, "LOCAL"))
 100.533 +	{
 100.534 +		free (str);
 100.535 +		ban_webcache (req, "Resolved to local IP");
 100.536 +		return NULL;
 100.537 +	}
 100.538 +
 100.539 +	c = tcp_open (ip, port, FALSE);
 100.540 +	if (!c)
 100.541 +	{
 100.542 +		GT->DBGFN (GT, "couldn't open connection to %s [%s]: %s",
 100.543 +		           http_name, net_ip_str (ip), GIFT_NETERROR());
 100.544 +	}
 100.545 +
 100.546 +	free (str);
 100.547 +	return c;
 100.548 +}
 100.549 +
 100.550 +/* return the name we have to lookup */
 100.551 +static char *get_http_name (char *name)
 100.552 +{
 100.553 +	char  *proxy;
 100.554 +	char  *host;
 100.555 +
 100.556 +	host  = name;
 100.557 +	proxy = HTTP_PROXY;
 100.558 +
 100.559 +	string_trim (proxy);
 100.560 +
 100.561 +	if (proxy && !string_isempty (proxy))
 100.562 +	{
 100.563 +		/* connect to the proxy instead */
 100.564 +		if (STRCMP (proxy, gt_proxy_server) != 0)
 100.565 +		{
 100.566 +			GT->DBGFN (GT, "using proxy server %s", proxy);
 100.567 +			free (gt_proxy_server);
 100.568 +			gt_proxy_server = STRDUP (proxy);
 100.569 +		}
 100.570 +
 100.571 +		host = proxy;
 100.572 +	}
 100.573 +
 100.574 +	return host;
 100.575 +}
 100.576 +
 100.577 +static void check_dns_error (const char *name, HttpRequest *req)
 100.578 +{
 100.579 +	int error;
 100.580 +
 100.581 +	error = gt_dns_get_errno ();
 100.582 +
 100.583 +	if (!error)
 100.584 +		return;
 100.585 +
 100.586 +	GT->DBGFN (GT, "lookup failed on \"%s\": %s", name, gt_dns_strerror(error));
 100.587 +
 100.588 +	/* ban the host, but only if not using a proxy server */
 100.589 +	if (error == HOST_NOT_FOUND && gt_proxy_server == NULL)
 100.590 +	{
 100.591 +		GT->DBGFN (GT, "webcache \"%s\" not in DNS. banning", name);
 100.592 +		ban_webcache (req, "Host not found in DNS");
 100.593 +		return;
 100.594 +	}
 100.595 +}
 100.596 +
 100.597 +static BOOL make_request (char *host_name, char *remote_path, char *request)
 100.598 +{
 100.599 +	HttpRequest    *req;
 100.600 +	TCPC           *c;
 100.601 +	char           *resolve_name;
 100.602 +	char           *url;
 100.603 +
 100.604 +	url = stringf_dup ("http://%s/%s", host_name, STRING_NOTNULL(remote_path));
 100.605 +
 100.606 +	if (!(req = gt_http_request_new (url, request)))
 100.607 +	{
 100.608 +		free (url);
 100.609 +		return FALSE;
 100.610 +	}
 100.611 +
 100.612 +	free (url);
 100.613 +
 100.614 +	resolve_name = get_http_name (host_name);
 100.615 +
 100.616 +	gt_dns_set_errno (0);
 100.617 +
 100.618 +	if (!(c = open_http_connection (req, resolve_name)))
 100.619 +	{
 100.620 +		check_dns_error (resolve_name, req);
 100.621 +		gt_http_request_close (req, -1);
 100.622 +		return FALSE;
 100.623 +	}
 100.624 +
 100.625 +	GT->DBGFN (GT, "opening connection to %s [%s]",
 100.626 +	           resolve_name, net_ip_str (c->host));
 100.627 +
 100.628 +	req->recv_func       = handle_recv;
 100.629 +	req->add_header_func = handle_add_headers;
 100.630 +	req->close_req_func  = handle_close_request;
 100.631 +	req->redirect_func   = handle_redirect;
 100.632 +
 100.633 +	gt_http_request_set_conn    (req, c);               /* setup references */
 100.634 +	gt_http_request_set_proxy   (req, gt_proxy_server); /* maybe use proxy */
 100.635 +	gt_http_request_set_timeout (req, 2 * MINUTES);     /* don't wait forever */
 100.636 +	gt_http_request_set_max_len (req, 65536);           /* don't read forever */
 100.637 +
 100.638 +	input_add (c->fd, c, INPUT_WRITE,
 100.639 +	           (InputCallback)gt_http_request_handle, TIMEOUT_DEF);
 100.640 +
 100.641 +	return TRUE;
 100.642 +}
 100.643 +
 100.644 +/*****************************************************************************/
 100.645 +
 100.646 +struct find_rand_args
 100.647 +{
 100.648 +	int    n;
 100.649 +	time_t now;
 100.650 +	char  *url;
 100.651 +	char  *field;
 100.652 +};
 100.653 +
 100.654 +/* get a random cache from the webcaches dataset */
 100.655 +static void foreach_rand_cache (ds_data_t *key, ds_data_t *value,
 100.656 +                                struct find_rand_args *args)
 100.657 +{
 100.658 +	time_t  atime;
 100.659 +	float   range = args->n;
 100.660 +	char   *str;
 100.661 +	char   *url   = key->data;
 100.662 +	char   *hostname, *path;
 100.663 +	int     ret;
 100.664 +
 100.665 +	if (!parse_web_cache_value (value->data, &atime))
 100.666 +		return;
 100.667 +
 100.668 +	/* skip the cache entirely if we've retried too soon */
 100.669 +	if (args->now - atime < CACHE_RETRY_TIME)
 100.670 +		return;
 100.671 +
 100.672 +	/*
 100.673 +	 * Make sure the cache has a parseable url
 100.674 +	 *
 100.675 +	 * TODO: This is ugly, it really should be parsed into a
 100.676 +	 * a data structure once instead.
 100.677 +	 */
 100.678 +	str = STRDUP (url);
 100.679 +	ret = gt_http_url_parse (str, &hostname, &path);
 100.680 +	free (str);
 100.681 +
 100.682 +	if (!ret)
 100.683 +	{
 100.684 +		GT->warn (GT, "bad webcache url \"%s\" from %s/gwebcaches",
 100.685 +		          key->data, gift_conf_path ("Gnutella"));
 100.686 +		return;
 100.687 +	}
 100.688 +
 100.689 +	/* decrease probability of selecting the next web cache */
 100.690 +	args->n++;
 100.691 +
 100.692 +	/*
 100.693 +	 * Select this webcache with probability 1/n.
 100.694 +	 *
 100.695 +	 * Also select this cache if we haven't chosen one yet, which may be the
 100.696 +	 * case on if the index of the cache is > 0 when there are banned caches.
 100.697 +	 */
 100.698 +	if (args->url == NULL ||
 100.699 +	    range * rand() / (RAND_MAX + 1.0) < 1.0)
 100.700 +	{
 100.701 +		char *keystr   = key->data;
 100.702 +		char *valuestr = value->data;
 100.703 +
 100.704 +		/* check if this is a bad gwebcache */
 100.705 +		if (file_cache_lookup (bad_caches, url))
 100.706 +		{
 100.707 +#if 1
 100.708 +			GT->warn (GT, "skipping webcache %s, in bad gwebcaches", url);
 100.709 +#endif
 100.710 +			/* pretend we didn't select this to ensure equal distribution */
 100.711 +			args->n--;
 100.712 +
 100.713 +			return;
 100.714 +		}
 100.715 +
 100.716 +		/* free the old values */
 100.717 +		free (args->url);
 100.718 +		free (args->field);
 100.719 +
 100.720 +		args->url   = STRDUP (keystr);
 100.721 +		args->field = STRDUP (valuestr);
 100.722 +	}
 100.723 +}
 100.724 +
 100.725 +static BOOL get_random_cache (time_t now, char **r_host_name,
 100.726 +                              char **r_remote_path)
 100.727 +{
 100.728 +	int                    ret;
 100.729 +	struct find_rand_args  args;
 100.730 +
 100.731 +	args.n     = 1;         /* initial probability */
 100.732 +	args.now   = now;       /* current time */
 100.733 +	args.url   = NULL;
 100.734 +	args.field = NULL;
 100.735 +
 100.736 +	dataset_foreach (web_caches->d, DS_FOREACH(foreach_rand_cache), &args);
 100.737 +
 100.738 +	if (!args.url)
 100.739 +	{
 100.740 +		GT->DBGFN (GT, "couldn't find random cache");
 100.741 +		return FALSE;
 100.742 +	}
 100.743 +
 100.744 +	ret = gt_http_url_parse (args.url, r_host_name, r_remote_path);
 100.745 +
 100.746 +	if (!*r_host_name || !*r_remote_path)
 100.747 +	{
 100.748 +		free (args.url);
 100.749 +		free (args.field);
 100.750 +		return FALSE;
 100.751 +	}
 100.752 +
 100.753 +	*r_host_name   = STRDUP (*r_host_name);
 100.754 +	*r_remote_path = STRDUP (*r_remote_path);
 100.755 +
 100.756 +	/* free the original buffer */
 100.757 +	free (args.url);
 100.758 +	free (args.field);
 100.759 +
 100.760 +	return ret;
 100.761 +}
 100.762 +
 100.763 +static void access_gwebcaches (void)
 100.764 +{
 100.765 +	int     len;
 100.766 +	char   *host_name;
 100.767 +	char   *remote_path;
 100.768 +	time_t  now;
 100.769 +	int     host_requests = 0;
 100.770 +#if 0
 100.771 +	int     url_requests  = 0;
 100.772 +#endif
 100.773 +	int     max_requests = 1;
 100.774 +	BOOL    ret;
 100.775 +	BOOL    need_sync;
 100.776 +
 100.777 +	/*
 100.778 +	 * We may get called while a check of the gwebcaches is already
 100.779 +	 * in progress.
 100.780 +	 */
 100.781 +	if (checking_caches)
 100.782 +	{
 100.783 +		GT->DBGFN (GT, "Access already in progress");
 100.784 +		return;
 100.785 +	}
 100.786 +
 100.787 +	now = time (NULL);
 100.788 +
 100.789 +	len = dataset_length (web_caches->d);
 100.790 +
 100.791 +	if (max_requests > len)
 100.792 +		max_requests = len;
 100.793 +
 100.794 +	need_sync = FALSE;
 100.795 +
 100.796 +	while (host_requests < max_requests)
 100.797 +	{
 100.798 +		if (!get_random_cache (now, &host_name, &remote_path))
 100.799 +		{
 100.800 +			GT->DBGFN (GT, "error looking up cache");
 100.801 +			break;
 100.802 +		}
 100.803 +
 100.804 +#if 0
 100.805 +		/* make a url request sometimes to keep the cache file up to date, but
 100.806 +		 * mostly ask for hosts */
 100.807 +		if (10.0 * rand() / (RAND_MAX + 1.0) < 1.0)
 100.808 +		{
 100.809 +			ret = make_request (host_name, remote_path,
 100.810 +			                    "urlfile=1&client=GIFT&version=" GT_VERSION);
 100.811 +			url_requests++;
 100.812 +		}
 100.813 +		else
 100.814 +#endif
 100.815 +		{
 100.816 +			ret = make_request (host_name, remote_path,
 100.817 +			                    "hostfile=1&client=GIFT&version=" GT_VERSION);
 100.818 +
 100.819 +			if (ret)
 100.820 +				checking_caches = TRUE;
 100.821 +
 100.822 +			host_requests++;
 100.823 +		}
 100.824 +
 100.825 +		if (ret)
 100.826 +		{
 100.827 +			GT->DBGFN (GT, "hitting web cache [total cache hits %u] "
 100.828 +			           "(cache: http://%s/%s)", cache_hits,
 100.829 +			           host_name, STRING_NOTNULL(remote_path));
 100.830 +
 100.831 +			cache_hits++;
 100.832 +			need_sync = TRUE;
 100.833 +
 100.834 +			/* reset the atime for the cache */
 100.835 +			insert_webcache (host_name, remote_path, now);
 100.836 +		}
 100.837 +
 100.838 +		free (host_name);
 100.839 +		free (remote_path);
 100.840 +	}
 100.841 +
 100.842 +	/* only sync when we successfully accessed a cache */
 100.843 +	if (need_sync)
 100.844 +		file_cache_sync (web_caches);
 100.845 +}
 100.846 +
 100.847 +static BOOL webcache_update (void *udata)
 100.848 +{
 100.849 +	char       *webcache_file;
 100.850 +	int         web_exists;
 100.851 +	time_t      now;
 100.852 +	size_t      nodes_len;
 100.853 +	struct stat st;
 100.854 +
 100.855 +	if (GNUTELLA_LOCAL_MODE)
 100.856 +		return TRUE;
 100.857 +
 100.858 +	now = time (NULL);
 100.859 +	nodes_len = gt_conn_length (GT_NODE_NONE, GT_NODE_ANY);
 100.860 +
 100.861 +	/*
 100.862 +	 * If we've already accessed the caches successfully, we won't
 100.863 +	 * allow another access to go through, _unless_ the node list
 100.864 +	 * is small enough, in which case it could be we really do need
 100.865 +	 * to access the caches.
 100.866 +	 */
 100.867 +	if (now < next_atime && nodes_len >= 20)
 100.868 +		return FALSE;
 100.869 +
 100.870 +	webcache_file = STRDUP (gift_conf_path ("Gnutella/gwebcaches"));
 100.871 +	web_exists = file_stat (webcache_file, &st);
 100.872 +
 100.873 +	if (!web_exists)
 100.874 +	{
 100.875 +		GIFT_ERROR (("gwebcaches file doesn't exist"));
 100.876 +		return FALSE;
 100.877 +	}
 100.878 +
 100.879 +	/*
 100.880 +	 * next_atime, the absolute next time we allow ourselves to contact the
 100.881 +	 * caches, gets set when we sucessfully access the caches, and if we
 100.882 +	 * manage to get some hosts from a cache we access in an exponentially
 100.883 +	 * decreasing interval.
 100.884 +	 */
 100.885 +	access_gwebcaches ();
 100.886 +
 100.887 +	free (webcache_file);
 100.888 +	return TRUE;
 100.889 +}
 100.890 +
 100.891 +/*****************************************************************************/
 100.892 +
 100.893 +void gt_web_cache_update (void)
 100.894 +{
 100.895 +	webcache_update (NULL);
 100.896 +}
 100.897 +
 100.898 +BOOL gt_web_cache_init (void)
 100.899 +{
 100.900 +	/*
 100.901 +	 * Copy the gwebcaches file to from the data dir to
 100.902 +	 * ~/.giFT/Gnutella if it is newer or if ~/.giFT/Gnutella/gwebcaches
 100.903 +	 * doesn't exist.
 100.904 +	 */
 100.905 +	gt_config_load_file ("Gnutella/gwebcaches", TRUE, FALSE);
 100.906 +
 100.907 +	web_caches = file_cache_new (gift_conf_path ("Gnutella/gwebcaches"));
 100.908 +	bad_caches = file_cache_new (gift_conf_path ("Gnutella/bad_gwebcaches"));
 100.909 +
 100.910 +	if (!web_caches)
 100.911 +		return FALSE;
 100.912 +
 100.913 +	return TRUE;
 100.914 +}
 100.915 +
 100.916 +void gt_web_cache_cleanup (void)
 100.917 +{
 100.918 +	file_cache_free (web_caches);
 100.919 +	web_caches = NULL;
 100.920 +
 100.921 +	file_cache_free (bad_caches);
 100.922 +	bad_caches = NULL;
 100.923 +
 100.924 +	cache_hits = 0;
 100.925 +	next_atime = 0;
 100.926 +
 100.927 +	checking_caches = FALSE;
 100.928 +}
   101.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   101.2 +++ b/src/gt_web_cache.h	Sat Feb 20 21:18:28 2010 -0800
   101.3 @@ -0,0 +1,52 @@
   101.4 +/*
   101.5 + * $Id: gt_web_cache.h,v 1.8 2004/02/23 04:18:43 hipnod Exp $
   101.6 + *
   101.7 + * Copyright (C) 2001-2003 giFT project (gift.sourceforge.net)
   101.8 + *
   101.9 + * This program is free software; you can redistribute it and/or modify it
  101.10 + * under the terms of the GNU General Public License as published by the
  101.11 + * Free Software Foundation; either version 2, or (at your option) any
  101.12 + * later version.
  101.13 + *
  101.14 + * This program is distributed in the hope that it will be useful, but
  101.15 + * WITHOUT ANY WARRANTY; without even the implied warranty of
  101.16 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
  101.17 + * General Public License for more details.
  101.18 + */
  101.19 +
  101.20 +#ifndef GIFT_GT_WEB_CACHE_H_
  101.21 +#define GIFT_GT_WEB_CACHE_H_
  101.22 +
  101.23 +/*****************************************************************************/
  101.24 +
  101.25 +/* this should be in http_request.c instead */
  101.26 +#define HTTP_PROXY              gt_config_get_str("http/proxy")
  101.27 +
  101.28 +/*****************************************************************************/
  101.29 +
  101.30 +typedef struct gt_web_cache
  101.31 +{
  101.32 +	/* host name of the web_cache */
  101.33 +	char  *host_name;
  101.34 +
  101.35 +	/* xxxx in http://foo.com/xxxx */
  101.36 +	char  *remote_path;
  101.37 +
  101.38 +	/* last time we visited this webcache */
  101.39 +	time_t visited_time;
  101.40 +} Gt_WebCache;
  101.41 +
  101.42 +/*****************************************************************************/
  101.43 +
  101.44 +/* initialize the gwebcaches from the ~/.giFT/Gnutella/gwebcaches file */
  101.45 +BOOL gt_web_cache_init (void);
  101.46 +
  101.47 +/* cleanup any data allocated for gwebcaches */
  101.48 +void gt_web_cache_cleanup (void);
  101.49 +
  101.50 +/* talk to the web caches to find more nodes (and webcaches) */
  101.51 +void gt_web_cache_update  (void);
  101.52 +
  101.53 +/*****************************************************************************/
  101.54 +
  101.55 +#endif /* GIFT_GT_WEB_CACHE_H_ */
   102.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   102.2 +++ b/src/gt_xfer.c	Sat Feb 20 21:18:28 2010 -0800
   102.3 @@ -0,0 +1,1183 @@
   102.4 +/*
   102.5 + * $Id: gt_xfer.c,v 1.103 2005/01/05 14:08:40 mkern Exp $
   102.6 + *
   102.7 + * Copyright (C) 2001-2003 giFT project (gift.sourceforge.net)
   102.8 + *
   102.9 + * This program is free software; you can redistribute it and/or modify it
  102.10 + * under the terms of the GNU General Public License as published by the
  102.11 + * Free Software Foundation; either version 2, or (at your option) any
  102.12 + * later version.
  102.13 + *
  102.14 + * This program is distributed in the hope that it will be useful, but
  102.15 + * WITHOUT ANY WARRANTY; without even the implied warranty of
  102.16 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
  102.17 + * General Public License for more details.
  102.18 + */
  102.19 +
  102.20 +#include "gt_gnutella.h"
  102.21 +
  102.22 +#include "gt_xfer_obj.h"
  102.23 +#include "gt_xfer.h"
  102.24 +#include "gt_http_client.h"
  102.25 +#include "gt_http_server.h"
  102.26 +#include "gt_share.h"
  102.27 +#include "gt_share_file.h"
  102.28 +#include "gt_packet.h"
  102.29 +#include "gt_node.h"
  102.30 +#include "gt_node_list.h"
  102.31 +#include "gt_netorg.h"
  102.32 +#include "gt_connect.h"
  102.33 +#include "gt_bind.h"
  102.34 +#include "gt_utils.h"
  102.35 +
  102.36 +#include "encoding/url.h"
  102.37 +
  102.38 +#include "transfer/source.h"
  102.39 +
  102.40 +/******************************************************************************/
  102.41 +
  102.42 +/* maximum number of push connections in limbo each remote user */
  102.43 +#define PUSH_MAX_LIMBO        gt_config_get_int("transfer/push_max_in_limbo=5")
  102.44 +
  102.45 +/******************************************************************************/
  102.46 +
  102.47 +/* an alternative to carrying the push TTL around in the source url */
  102.48 +#define PUSH_MAX_TTL              12
  102.49 +
  102.50 +/* maximum time to keep push connections in "limbo" while awaiting giftd
  102.51 + * to reissue Chunks */
  102.52 +#define PUSH_LIMBO_TIMEOUT        (4 * MINUTES)
  102.53 +
  102.54 +/* how long to wait for a PUSH reply before timing out in order to free the
  102.55 + * Chunk */
  102.56 +#define PUSH_WAIT_INTERVAL        (30 * SECONDS)
  102.57 +
  102.58 +/* minimum interval between pushes */
  102.59 +#define PUSH_MIN_DEFER_TIME       (30 * ESECONDS)
  102.60 +
  102.61 +/* maximum amount of time a push will be forced to wait before being sent */
  102.62 +#define PUSH_MAX_DEFER_TIME       (10 * EMINUTES)
  102.63 +
  102.64 +/*****************************************************************************/
  102.65 +
  102.66 +/* this stores information about an indirect ("pushed") download */
  102.67 +typedef struct gt_push_source
  102.68 +{
  102.69 +	gt_guid_t  *guid;
  102.70 +	in_addr_t   ip;
  102.71 +	in_addr_t   src_ip;      /* whether this push was to a local source */
  102.72 +	List       *xfers;       /* xfers for this source */
  102.73 +	List       *connections; /* connection for this source */
  102.74 +	time_t      last_sent;   /* time of last push sent to this source */
  102.75 +	double      defer_time;  /* min time to wait before sending another push
  102.76 +	                          * doubles every push to PUSH_MAX_DEFER_TIME */
  102.77 +} GtPushSource;
  102.78 +
  102.79 +/*****************************************************************************/
  102.80 +
  102.81 +/* Maps guid->{list of unique GtPushSources} */
  102.82 +static Dataset *gt_push_requests;
  102.83 +
  102.84 +/******************************************************************************/
  102.85 +
  102.86 +static void push_source_reset_last_sent (GtPushSource *push_src);
  102.87 +static void push_source_set_last_sent   (gt_guid_t *guid, in_addr_t ip);
  102.88 +static BOOL push_source_should_send     (gt_guid_t *guid, in_addr_t ip);
  102.89 +
  102.90 +/*****************************************************************************/
  102.91 +
  102.92 +/*
  102.93 + * The source URL is stored on disk and could be outdated if the format has
  102.94 + * changed. This updates it with any changes when we first read it from
  102.95 + * the state file on startup.
  102.96 + */
  102.97 +static void replace_url (Source *src, GtSource *gt)
  102.98 +{
  102.99 +	char *url;
 102.100 +
 102.101 +	if (!(url = gt_source_serialize (gt)))
 102.102 +		return;
 102.103 +
 102.104 +	/* swap urls */
 102.105 +	FREE (src->url);
 102.106 +	src->url = url;
 102.107 +}
 102.108 +
 102.109 +/******************************************************************************/
 102.110 +
 102.111 +static FileShare *lookup_index (GtTransfer *xfer, char *request)
 102.112 +{
 102.113 +	FileShare *file;
 102.114 +	char      *index_str;
 102.115 +	char      *filename;
 102.116 +	char      *decoded;
 102.117 +	uint32_t   index;
 102.118 +
 102.119 +	filename  = request;
 102.120 +	index_str = string_sep (&filename, "/");
 102.121 +
 102.122 +	if (!filename || !index_str)
 102.123 +		return NULL;
 102.124 +
 102.125 +	index = ATOUL (index_str);
 102.126 +
 102.127 +	decoded = gt_url_decode (filename);
 102.128 +	file = gt_share_local_lookup_by_index (index, decoded);
 102.129 +
 102.130 +	free (decoded);
 102.131 +
 102.132 +	/* the filename may or may not be url encoded */
 102.133 +	if (!file)
 102.134 +		file = gt_share_local_lookup_by_index (index, filename);
 102.135 +
 102.136 +	return file;
 102.137 +}
 102.138 +
 102.139 +static FileShare *lookup_urns (GtTransfer *xfer, char *urns)
 102.140 +{
 102.141 +	FileShare *file = NULL;
 102.142 +	char      *urn;
 102.143 +
 102.144 +	/*
 102.145 +	 * Try to lookup all urns provided in the header,
 102.146 +	 * until one is found.
 102.147 +	 */
 102.148 +	while (!file && !string_isempty (urns))
 102.149 +	{
 102.150 +		urn = string_sep_set (&urns, ", ");
 102.151 +		file = gt_share_local_lookup_by_urn (urn);
 102.152 +	}
 102.153 +
 102.154 +	return file;
 102.155 +}
 102.156 +
 102.157 +static FileShare *lookup_uri_res (GtTransfer *xfer, char *request)
 102.158 +{
 102.159 +	FileShare  *file     = NULL;
 102.160 +	char       *resolver = NULL;
 102.161 +	char       *urn;
 102.162 +
 102.163 +	resolver = string_sep (&request, "?");
 102.164 +	urn      = string_sep (&request, " ");
 102.165 +
 102.166 +	if (resolver && !strcasecmp (resolver, "N2R"))
 102.167 +	{
 102.168 +		string_trim (request);
 102.169 +		file = lookup_urns (xfer, urn);
 102.170 +	}
 102.171 +
 102.172 +	if (file && HTTP_DEBUG)
 102.173 +		GT->dbg (GT, "file=%s", share_get_hpath (file));
 102.174 +
 102.175 +	return file;
 102.176 +}
 102.177 +
 102.178 +static Share *lookup_hpath (char *namespace, GtTransfer *xfer, char *request)
 102.179 +{
 102.180 +	char   *hpath;
 102.181 +	Share  *share;
 102.182 +
 102.183 +	/*
 102.184 +	 * Reconstruct the hpath
 102.185 +	 */
 102.186 +	if (!(hpath = stringf_dup ("/%s/%s", namespace, request)))
 102.187 +		return NULL;
 102.188 +
 102.189 +	if (HTTP_DEBUG)
 102.190 +		GT->dbg (GT, "request by hpath: %s", hpath);
 102.191 +
 102.192 +	share = GT->share_lookup (GT, SHARE_LOOKUP_HPATH, hpath);
 102.193 +	free (hpath);
 102.194 +
 102.195 +	return share;
 102.196 +}
 102.197 +
 102.198 +/* Take a request for a file, i.e. everything after GET in:
 102.199 + *
 102.200 + * "GET /get/1279/filename.mp3"
 102.201 + *
 102.202 + * and convert it to a localized path to a file.
 102.203 + *
 102.204 + * Path has been "secured" already if necessary.
 102.205 + *
 102.206 + * The path returned must be static.
 102.207 + * TODO: this interface is a bit bizarre */
 102.208 +char *gt_localize_request (GtTransfer *xfer, char *s_path, int *authorized)
 102.209 +{
 102.210 +	static char open_path[PATH_MAX];
 102.211 +	char       *namespace;
 102.212 +	char       *path, *path0;
 102.213 +	char       *content_urns;
 102.214 +	FileShare  *file;
 102.215 +
 102.216 +	/* TODO: use authorized for Browse Host (BH) requests */
 102.217 +	if (!STRCMP (s_path, "/"))
 102.218 +	{
 102.219 +		/* *authorized = TRUE; */
 102.220 +		if (HTTP_DEBUG)
 102.221 +			GT->DBGFN (GT, "received unimplemented Browse Host request");
 102.222 +
 102.223 +		return NULL;
 102.224 +	}
 102.225 +
 102.226 +	if (authorized)
 102.227 +		*authorized = FALSE;
 102.228 +
 102.229 +	if (!(path0 = path = STRDUP (s_path)))
 102.230 +		return NULL;
 102.231 +
 102.232 +	if (HTTP_DEBUG)
 102.233 +		GT->dbg (GT, "path=%s", path);
 102.234 +
 102.235 +	/* get rid of leading slash */
 102.236 +	string_sep (&path, "/");
 102.237 +	namespace = string_sep (&path, "/");
 102.238 +
 102.239 +	if (!namespace || !path)
 102.240 +	{
 102.241 +		GT->DBGFN (GT, "null namespace or path: %s %s\n", namespace, path);
 102.242 +		free (path0);
 102.243 +		return NULL;
 102.244 +	}
 102.245 +
 102.246 +	/*
 102.247 +	 * If the client supplied "X-Gnutella-Content-URN: ", lookup
 102.248 +	 * by that instead of the request.
 102.249 +	 */
 102.250 +	content_urns = dataset_lookupstr (xfer->header, "x-gnutella-content-urn");
 102.251 +
 102.252 +	if (content_urns)
 102.253 +		file = lookup_urns (xfer, content_urns);
 102.254 +	else if (!strcasecmp (namespace, "get"))
 102.255 +		file = lookup_index (xfer, path);
 102.256 +	else if (!strcasecmp (namespace, "uri-res"))
 102.257 +		file = lookup_uri_res (xfer, path);
 102.258 +	else
 102.259 +		file = lookup_hpath (namespace, xfer, path);
 102.260 +
 102.261 +	/*
 102.262 +	 * Set xfer->content_urn [which replies with 'X-Gnutella-Content-URN']
 102.263 +	 * to a comma-separated list of all URNs for this file.
 102.264 +	 */
 102.265 +	xfer->content_urns = gt_share_local_get_urns (file);
 102.266 +
 102.267 +	if (!file)
 102.268 +	{
 102.269 +		if (HTTP_DEBUG)
 102.270 +			GT->DBGFN (GT, "bad request: /%s/%s", namespace, path);
 102.271 +
 102.272 +		free (path0);
 102.273 +		return NULL;
 102.274 +	}
 102.275 +
 102.276 +	free (path0);
 102.277 +
 102.278 +	if (!share_complete (file))
 102.279 +		return NULL;
 102.280 +
 102.281 +	/* argh, need to return static data */
 102.282 +	snprintf (open_path, sizeof (open_path) - 1, "%s", share_get_hpath (file));
 102.283 +
 102.284 +	/* try to fill in the hash */
 102.285 +	xfer->hash = share_dsp_hash (file, "SHA1");
 102.286 +
 102.287 +	return open_path;
 102.288 +}
 102.289 +
 102.290 +/******************************************************************************/
 102.291 +
 102.292 +static char *index_request (char *request, size_t size,
 102.293 +                            uint32_t index, const char *filename)
 102.294 +{
 102.295 +	/*
 102.296 +	 * The filename may not have ever been set.  Fail the request in
 102.297 +	 * this case.
 102.298 +	 */
 102.299 +	if (!filename || string_isempty (filename))
 102.300 +		return NULL;
 102.301 +
 102.302 +	/*
 102.303 +	 * Filename is encoded, we don't support sending unecoded requests
 102.304 +	 * anymore.  NOTE: filename doesnt have leading '/' here, that may change
 102.305 +	 */
 102.306 +	snprintf (request, size - 1, "/get/%u/%s", index, filename);
 102.307 +	return request;
 102.308 +}
 102.309 +
 102.310 +/*
 102.311 + * Setup a request string. Try request-by-hash (/uri-res/N2R?urn:sha1:..),
 102.312 + * but if there are any problems, fallback to a "/get/<index>/<filename>"
 102.313 + * request.
 102.314 + */
 102.315 +static char *request_str (Source *source, uint32_t index, char *filename)
 102.316 +{
 102.317 +	static char request[RW_BUFFER];
 102.318 +	char       *hash = source->hash;
 102.319 +	GtSource   *gt;
 102.320 +
 102.321 +	gt = source->udata;
 102.322 +	assert (gt != NULL);
 102.323 +
 102.324 +	/*
 102.325 +	 * Do a uri-res request unless one has failed already or
 102.326 +	 * if we have no filename and thus no choice but to use the hash.
 102.327 +	 * (doesn't happen currently but will for download-mesh sources
 102.328 +	 * that only have the hash and no filename)
 102.329 +	 */
 102.330 +	if (hash && (!gt->uri_res_failed || string_isempty (filename)))
 102.331 +	{
 102.332 +		char *str0, *str;
 102.333 +
 102.334 +		if (!(str0 = STRDUP (hash)))
 102.335 +			return index_request (request, sizeof (request), index, filename);
 102.336 +
 102.337 +		str = str0;
 102.338 +		string_sep (&str, ":");
 102.339 +
 102.340 +		/* hashes are canonically uppercase on the gnet */
 102.341 +		string_upper (str);
 102.342 +
 102.343 +		if (str)
 102.344 +		{
 102.345 +			snprintf (request, sizeof (request) - 1,
 102.346 +			          "/uri-res/N2R?urn:sha1:%s", str);
 102.347 +			free (str0);
 102.348 +			return request;
 102.349 +		}
 102.350 +
 102.351 +		free (str0);
 102.352 +	}
 102.353 +
 102.354 +	return index_request (request, sizeof (request), index, filename);
 102.355 +}
 102.356 +
 102.357 +/*****************************************************************************/
 102.358 +/* PUSH HANDLING */
 102.359 +
 102.360 +/*
 102.361 + * This code has to deal with some tricky race conditions involving
 102.362 + * chunk timeouts and pushes.
 102.363 + */
 102.364 +
 102.365 +static GtPushSource *gt_push_source_new (gt_guid_t *guid, in_addr_t ip,
 102.366 +                                         in_addr_t src_ip)
 102.367 +{
 102.368 +	GtPushSource *src;
 102.369 +
 102.370 +	if (!(src = MALLOC (sizeof (GtPushSource))))
 102.371 +		return NULL;
 102.372 +
 102.373 +	src->guid        = gt_guid_dup (guid);
 102.374 +	src->ip          = ip;
 102.375 +	src->src_ip      = src_ip;
 102.376 +	src->xfers       = NULL;
 102.377 +	src->connections = NULL;
 102.378 +
 102.379 +	push_source_reset_last_sent (src);
 102.380 +
 102.381 +	return src;
 102.382 +}
 102.383 +
 102.384 +static void gt_push_source_free (GtPushSource *src)
 102.385 +{
 102.386 +	if (!src)
 102.387 +		return;
 102.388 +
 102.389 +	assert (src->xfers == NULL);
 102.390 +	assert (src->connections == NULL);
 102.391 +
 102.392 +	free (src->guid);
 102.393 +	free (src);
 102.394 +}
 102.395 +
 102.396 +/*****************************************************************************/
 102.397 +
 102.398 +/* TODO: break this into two parts, first part looks in the
 102.399 + *       list for matching ip. If none is found, look for
 102.400 + *       a firewalled (local ip) push source.  */
 102.401 +static int find_ip (GtPushSource *src, in_addr_t *ip)
 102.402 +{
 102.403 +	/* If the source is a local IP address behind a non-local one,
 102.404 +	 * authorize by just the client guid. Otherwise, use the IP. */
 102.405 +	if (gt_is_local_ip (src->ip, src->src_ip) || src->ip == *ip)
 102.406 +		return 0;
 102.407 +
 102.408 +	return -1;
 102.409 +}
 102.410 +
 102.411 +static List *lookup_source_list (gt_guid_t *guid)
 102.412 +{
 102.413 +	List   *src_list;
 102.414 +
 102.415 +	if (!(src_list = dataset_lookup (gt_push_requests, guid, 16)))
 102.416 +		return NULL;
 102.417 +
 102.418 +	return src_list;
 102.419 +}
 102.420 +
 102.421 +static GtPushSource *push_source_lookup (gt_guid_t *guid, in_addr_t ip)
 102.422 +{
 102.423 +	List   *requests;
 102.424 +	List   *list;
 102.425 +
 102.426 +	if (!(requests = lookup_source_list (guid)))
 102.427 +		return NULL;
 102.428 +
 102.429 +	list = list_find_custom (requests, &ip, (ListForeachFunc)find_ip);
 102.430 +	return list_nth_data (list, 0);
 102.431 +}
 102.432 +
 102.433 +/*****************************************************************************/
 102.434 +
 102.435 +static void insert_source_list (gt_guid_t *guid, List *src_list)
 102.436 +{
 102.437 +	if (!gt_push_requests)
 102.438 +		gt_push_requests = dataset_new (DATASET_HASH);
 102.439 +
 102.440 +	dataset_insert (&gt_push_requests, guid, 16, src_list, 0);
 102.441 +}
 102.442 +
 102.443 +static void add_push_source (List *pushes, gt_guid_t *guid, in_addr_t ip,
 102.444 +                             in_addr_t src_ip)
 102.445 +{
 102.446 +	GtPushSource *src;
 102.447 +	List         *old_list;
 102.448 +
 102.449 +	if (!(src = gt_push_source_new (guid, ip, src_ip)))
 102.450 +		return;
 102.451 +
 102.452 +	if ((old_list = list_find_custom (pushes, &ip, (ListForeachFunc)find_ip)))
 102.453 +	{
 102.454 +		/* push source is already there */
 102.455 +		gt_push_source_free (src);
 102.456 +		return;
 102.457 +	}
 102.458 +
 102.459 +	pushes = list_prepend (pushes, src);
 102.460 +	insert_source_list (guid, pushes);
 102.461 +}
 102.462 +
 102.463 +void gt_push_source_add (gt_guid_t *guid, in_addr_t ip, in_addr_t src_ip)
 102.464 +{
 102.465 +	List *pushes;
 102.466 +
 102.467 +	pushes = lookup_source_list (guid);
 102.468 +	add_push_source (pushes, guid, ip, src_ip);
 102.469 +}
 102.470 +
 102.471 +/*****************************************************************************/
 102.472 +/* Timing controls for push requests */
 102.473 +
 102.474 +static void push_source_reset_last_sent (GtPushSource *push_src)
 102.475 +{
 102.476 +	push_src->last_sent  = gt_uptime ();  /* wrong */
 102.477 +	push_src->defer_time = 0.0;
 102.478 +}
 102.479 +
 102.480 +static void push_source_set_last_sent (gt_guid_t *guid, in_addr_t ip)
 102.481 +{
 102.482 +	GtPushSource *src;
 102.483 +
 102.484 +	if (!(src = push_source_lookup (guid, ip)))
 102.485 +		return;
 102.486 +
 102.487 +	time (&src->last_sent);
 102.488 +}
 102.489 +
 102.490 +static BOOL push_source_should_send (gt_guid_t *guid, in_addr_t ip)
 102.491 +{
 102.492 +	GtPushSource *src;
 102.493 +	double        deferred;
 102.494 +	time_t        now;
 102.495 +
 102.496 +	time (&now);
 102.497 +
 102.498 +	if (!(src = push_source_lookup (guid, ip)))
 102.499 +		return FALSE;
 102.500 +
 102.501 +	deferred = difftime (now, src->last_sent);
 102.502 +
 102.503 +	/* randomize the defer time a bit in order to not send pushes for all
 102.504 +	 * downloads at once */
 102.505 +	if (deferred < src->defer_time + -10.0 + 20.0 * rand() / (RAND_MAX + 1.0))
 102.506 +		return FALSE;
 102.507 +
 102.508 +	/*
 102.509 +	 * Double the defer time interval (the minimum time between sent
 102.510 +	 * pushes for this source).
 102.511 +	 */
 102.512 +	src->defer_time *= 2;
 102.513 +	if (src->defer_time >= PUSH_MAX_DEFER_TIME)
 102.514 +		src->defer_time = PUSH_MAX_DEFER_TIME;
 102.515 +
 102.516 +	if (src->defer_time == 0)
 102.517 +		src->defer_time = PUSH_MIN_DEFER_TIME;
 102.518 +
 102.519 +	return TRUE;
 102.520 +}
 102.521 +
 102.522 +/*****************************************************************************/
 102.523 +
 102.524 +static void flush_inputs (TCPC *c)
 102.525 +{
 102.526 +	int ret;
 102.527 +
 102.528 +	assert (c->fd >= 0);
 102.529 +
 102.530 +	/* queued writes arent used by the HTTP system in this plugin,
 102.531 +	 * so this should always be true */
 102.532 +	ret = tcp_flush (c, TRUE);
 102.533 +	assert (ret == 0);
 102.534 +
 102.535 +	input_remove_all (c->fd);
 102.536 +}
 102.537 +
 102.538 +static void continue_download (GtPushSource *push_src, GtTransfer *xfer,
 102.539 +                               TCPC *c)
 102.540 +{
 102.541 +	Chunk *chunk;
 102.542 +
 102.543 +	chunk = gt_transfer_get_chunk (xfer);
 102.544 +
 102.545 +	/* remove all previous inputs */
 102.546 +	flush_inputs (c);
 102.547 +
 102.548 +	/* HACK: remove the detach timeout */
 102.549 +	timer_remove_zero (&xfer->detach_timer);
 102.550 +
 102.551 +	/* connect the TCPC and GtTransfer */
 102.552 +	gt_transfer_set_tcpc (xfer, c);
 102.553 +
 102.554 +	/* update the IP and port for placing in Host: */
 102.555 +	peer_addr (c->fd, &xfer->ip, &xfer->port);
 102.556 +
 102.557 +	/* the connection and the chunk have met up */
 102.558 +	gt_transfer_status (xfer, SOURCE_WAITING, "Received GIV response");
 102.559 +
 102.560 +	if (HTTP_DEBUG)
 102.561 +		GT->DBGSOCK (GT, c, "Continuing download for %s", xfer->request);
 102.562 +
 102.563 +	input_add (c->fd, xfer, INPUT_WRITE,
 102.564 +	           (InputCallback)gt_http_client_start, TIMEOUT_DEF);
 102.565 +}
 102.566 +
 102.567 +static void reset_conn (int fd, input_id id, TCPC *c)
 102.568 +{
 102.569 +	/*
 102.570 +	 * We should only get here if some data was sent, or if it timed out.  In
 102.571 +	 * which case we should close this connection, because it shouldn't be
 102.572 +	 * sending anything.
 102.573 +	 */
 102.574 +	if (HTTP_DEBUG)
 102.575 +	{
 102.576 +		if (fd == -1)
 102.577 +			GT->DBGSOCK (GT, c, "connection timed out");
 102.578 +		else
 102.579 +			GT->DBGSOCK (GT, c, "connection closed or sent invalid data");
 102.580 +	}
 102.581 +
 102.582 +	gt_push_source_remove_conn (c);
 102.583 +	tcp_close (c);
 102.584 +}
 102.585 +
 102.586 +static void store_conn (GtPushSource *src, TCPC *c)
 102.587 +{
 102.588 +	flush_inputs (c);
 102.589 +
 102.590 +	input_add (c->fd, c, INPUT_READ,
 102.591 +	           (InputCallback)reset_conn, PUSH_LIMBO_TIMEOUT);
 102.592 +
 102.593 +	assert (!list_find (src->connections, c));
 102.594 +	src->connections = list_prepend (src->connections, c);
 102.595 +
 102.596 +	if (HTTP_DEBUG)
 102.597 +		GT->DBGSOCK (GT, c, "storing connection");
 102.598 +}
 102.599 +
 102.600 +BOOL gt_push_source_add_conn (gt_guid_t *guid, in_addr_t ip, TCPC *c)
 102.601 +{
 102.602 +	GtTransfer    *xfer;
 102.603 +	GtPushSource  *push_src;
 102.604 +
 102.605 +	if (!(push_src = push_source_lookup (guid, ip)))
 102.606 +	{
 102.607 +		if (HTTP_DEBUG)
 102.608 +		{
 102.609 +			GT->err (GT, "couldn't find push source %s:[%s]",
 102.610 +			         gt_guid_str (guid), net_ip_str (ip));
 102.611 +		}
 102.612 +
 102.613 +		tcp_close (c);
 102.614 +		return FALSE;
 102.615 +	}
 102.616 +
 102.617 +	/*
 102.618 +	 * Don't allow too many connections in flight from the same remote user.
 102.619 +	 */
 102.620 +	if (list_length (push_src->connections) >= PUSH_MAX_LIMBO)
 102.621 +	{
 102.622 +		if (HTTP_DEBUG)
 102.623 +		{
 102.624 +			GT->DBGSOCK (GT, c, "too many push connections from %s, closing",
 102.625 +			             gt_guid_str (guid));
 102.626 +		}
 102.627 +
 102.628 +		tcp_close (c);
 102.629 +		return FALSE;
 102.630 +	}
 102.631 +
 102.632 +	/*
 102.633 +	 * Since we now know this push source is alive, reset the push send
 102.634 +	 * tracking time: in case the connection is lost, we'll resend the push
 102.635 +	 * right away instead of waiting.
 102.636 +	 */
 102.637 +	push_source_reset_last_sent (push_src);
 102.638 +
 102.639 +	/*
 102.640 +	 * Store the connection if there are no GtTransfer requests from
 102.641 +	 * giFT at the moment.
 102.642 +	 */
 102.643 +	if (!push_src->xfers)
 102.644 +	{
 102.645 +		store_conn (push_src, c);
 102.646 +		return FALSE;
 102.647 +	}
 102.648 +
 102.649 +	xfer = list_nth_data (push_src->xfers, 0);
 102.650 +	push_src->xfers = list_remove (push_src->xfers, xfer);
 102.651 +
 102.652 +	continue_download (push_src, xfer, c);
 102.653 +	return TRUE;
 102.654 +}
 102.655 +
 102.656 +/* return TRUE if there's a connection residing on this push source */
 102.657 +static BOOL push_source_lookup_conn (gt_guid_t *guid, in_addr_t ip)
 102.658 +{
 102.659 +	GtPushSource *push_src;
 102.660 +
 102.661 +	if (!(push_src = push_source_lookup (guid, ip)))
 102.662 +		return FALSE;
 102.663 +
 102.664 +	if (push_src->connections)
 102.665 +	{
 102.666 +		if (HTTP_DEBUG)
 102.667 +			GT->DBGFN (GT, "found push connection for %s", net_ip_str (ip));
 102.668 +
 102.669 +		return TRUE;
 102.670 +	}
 102.671 +
 102.672 +	return FALSE;
 102.673 +}
 102.674 +
 102.675 +static void store_xfer (GtPushSource *src, GtTransfer *xfer)
 102.676 +{
 102.677 +	assert (!list_find (src->xfers, xfer));
 102.678 +	src->xfers = list_prepend (src->xfers, xfer);
 102.679 +}
 102.680 +
 102.681 +BOOL gt_push_source_add_xfer (gt_guid_t *guid, in_addr_t ip,
 102.682 +                              in_addr_t src_ip, GtTransfer *xfer)
 102.683 +{
 102.684 +	TCPC           *c;
 102.685 +	GtPushSource   *push_src;
 102.686 +
 102.687 +	assert (xfer != NULL);
 102.688 +
 102.689 +	/* create the source if it doesn't exist already */
 102.690 +	gt_push_source_add (guid, ip, src_ip);
 102.691 +
 102.692 +	if (!(push_src = push_source_lookup (guid, ip)))
 102.693 +	{
 102.694 +		if (HTTP_DEBUG)
 102.695 +		{
 102.696 +			GT->err (GT, "couldn't find push source (%s:[%s]) for chunk %s",
 102.697 +			         gt_guid_str (guid), net_ip_str (ip), xfer->request);
 102.698 +		}
 102.699 +
 102.700 +		return FALSE;
 102.701 +	}
 102.702 +
 102.703 +	/*
 102.704 +	 * Store the GtTransfer if there are no connections to service it
 102.705 +	 * at the moment.
 102.706 +	 */
 102.707 +	if (!push_src->connections)
 102.708 +	{
 102.709 +		store_xfer (push_src, xfer);
 102.710 +		return FALSE;
 102.711 +	}
 102.712 +
 102.713 +	c = list_nth_data (push_src->connections, 0);
 102.714 +	push_src->connections = list_remove (push_src->connections, c);
 102.715 +
 102.716 +	continue_download (push_src, xfer, c);
 102.717 +	return TRUE;
 102.718 +}
 102.719 +
 102.720 +/*****************************************************************************/
 102.721 +
 102.722 +static BOOL remove_xfer (GtPushSource *src, GtTransfer *xfer)
 102.723 +{
 102.724 +	src->xfers = list_remove (src->xfers, xfer);
 102.725 +	return FALSE;
 102.726 +}
 102.727 +
 102.728 +static void remove_xfer_list (ds_data_t *key, ds_data_t *value,
 102.729 +                              GtTransfer *xfer)
 102.730 +{
 102.731 +	List *src_list = value->data;
 102.732 +
 102.733 +	list_foreach (src_list, (ListForeachFunc)remove_xfer, xfer);
 102.734 +}
 102.735 +
 102.736 +/*
 102.737 + * The chunk is being cancelled, so remove it from being tracked.
 102.738 + *
 102.739 + * After this, if the push recipient connects, we will have to wait
 102.740 + * for another chunk timeout before transmitting.
 102.741 + */
 102.742 +void gt_push_source_remove_xfer (GtTransfer *xfer)
 102.743 +{
 102.744 +	if (!xfer)
 102.745 +		return;
 102.746 +
 102.747 +	dataset_foreach (gt_push_requests, DS_FOREACH(remove_xfer_list), xfer);
 102.748 +}
 102.749 +
 102.750 +static BOOL remove_conn (GtPushSource *src, TCPC *c)
 102.751 +{
 102.752 +	src->connections = list_remove (src->connections, c);
 102.753 +	return FALSE;
 102.754 +}
 102.755 +
 102.756 +static void remove_conn_list (ds_data_t *key, ds_data_t *value, TCPC *c)
 102.757 +{
 102.758 +	List *src_list = value->data;
 102.759 +
 102.760 +	list_foreach (src_list, (ListForeachFunc)remove_conn, c);
 102.761 +}
 102.762 +
 102.763 +/*
 102.764 + * The connection from this push download closed
 102.765 + */
 102.766 +void gt_push_source_remove_conn (TCPC *c)
 102.767 +{
 102.768 +	if (!c)
 102.769 +		return;
 102.770 +
 102.771 +	dataset_foreach (gt_push_requests, DS_FOREACH(remove_conn_list), c);
 102.772 +}
 102.773 +
 102.774 +static BOOL cleanup_xfer (GtTransfer *xfer, void *udata)
 102.775 +{
 102.776 +	gt_push_source_remove_xfer (xfer);
 102.777 +	return TRUE;
 102.778 +}
 102.779 +
 102.780 +static BOOL cleanup_conn (TCPC *c, void *udata)
 102.781 +{
 102.782 +	gt_push_source_remove_conn (c);
 102.783 +	tcp_close (c);
 102.784 +	return TRUE;
 102.785 +}
 102.786 +
 102.787 +static void remove_push_source (GtPushSource *src)
 102.788 +{
 102.789 +	List *src_list;
 102.790 +
 102.791 +	src_list = lookup_source_list (src->guid);
 102.792 +	src_list = list_remove (src_list, src);
 102.793 +
 102.794 +	insert_source_list (src->guid, src_list);
 102.795 +}
 102.796 +
 102.797 +void gt_push_source_remove (gt_guid_t *guid, in_addr_t ip, in_addr_t src_ip)
 102.798 +{
 102.799 +	GtPushSource *src;
 102.800 +
 102.801 +	if (!(src = push_source_lookup (guid, ip)))
 102.802 +		return;
 102.803 +
 102.804 +	/* cleanup all the chunks and connections */
 102.805 +	src->xfers =
 102.806 +	    list_foreach_remove (src->xfers, (ListForeachFunc)cleanup_xfer,
 102.807 +	                         NULL);
 102.808 +	src->connections =
 102.809 +	    list_foreach_remove (src->connections, (ListForeachFunc)cleanup_conn,
 102.810 +	                         NULL);
 102.811 +
 102.812 +	/* remove this source from the global list */
 102.813 +	remove_push_source (src);
 102.814 +
 102.815 +	gt_push_source_free (src);
 102.816 +}
 102.817 +
 102.818 +/*****************************************************************************/
 102.819 +
 102.820 +static BOOL detach_timeout (void *udata)
 102.821 +{
 102.822 +	GtTransfer *xfer = udata;
 102.823 +
 102.824 +	/* Added this on 2004-12-22 to track observed assertion failure in
 102.825 +	 * gt_transfer_get_chunk. -- mkern
 102.826 +	 */
 102.827 +	if (!xfer->chunk || xfer->chunk->udata != xfer)
 102.828 +	{
 102.829 +		GT->DBGFN (GT, "Detach timeout troubles. status = %d, "
 102.830 +		           "text = %s, xfer->ip = %s, "
 102.831 +		           "xfer = %p, xfer->chunk->udata = %p, "
 102.832 +		           "xfer->detach_timer = 0x%X",
 102.833 +		           xfer->detach_status, xfer->detach_msgtxt,
 102.834 +		           net_ip_str (xfer->ip), xfer,
 102.835 +		           xfer->chunk->udata, xfer->detach_timer);
 102.836 +	}
 102.837 +
 102.838 +	/* Sometimes gt_transfer_status will trigger an
 102.839 +	 * assert (xfer->chunk->udata == xfer) failure in gt_transfer_get_chunk.
 102.840 +	 * But why? Is xfer already freed? Does it have another chunk and the
 102.841 +	 * timer was not removed?
 102.842 +	 */
 102.843 +	gt_transfer_status (xfer, xfer->detach_status, xfer->detach_msgtxt);
 102.844 +	gt_transfer_close (xfer, TRUE);
 102.845 +
 102.846 +	return FALSE;
 102.847 +}
 102.848 +
 102.849 +/*
 102.850 + * Attach a timer that will "detach" the GtTransfer from the Chunk by
 102.851 + * cancelling it, but pretend that the Source is in some other state besides
 102.852 + * "cancelled" or "timed out" by changing the status text.
 102.853 + *
 102.854 + * This is useful to keep a semi-consistent UI in certain situations, such as
 102.855 + * sending out push requests, and cancelling requests when the remote side has
 102.856 + * queued our request.
 102.857 + */
 102.858 +static void detach_transfer_in (GtTransfer *xfer, SourceStatus status,
 102.859 +                                char *status_txt, time_t interval)
 102.860 +{
 102.861 +	char *msg;
 102.862 +
 102.863 +	msg = STRDUP (status_txt);
 102.864 +
 102.865 +	gt_transfer_status (xfer, status, msg);
 102.866 +	xfer->detach_status = status;
 102.867 +
 102.868 +	free (xfer->detach_msgtxt);
 102.869 +	xfer->detach_msgtxt = msg;
 102.870 +
 102.871 +	xfer->detach_timer = timer_add (interval,
 102.872 +	                                (TimerCallback)detach_timeout, xfer);
 102.873 +}
 102.874 +
 102.875 +/*
 102.876 + * Detach an GtTransfer from its Chunk.
 102.877 + */
 102.878 +static void detach_transfer (GtTransfer *xfer, SourceStatus status,
 102.879 +                             char *msgtxt)
 102.880 +{
 102.881 +	/*
 102.882 +	 * Cancelling from p->download_start will cause download_pause() to crash.
 102.883 +	 * So, the detach must happen from timer context.
 102.884 +	 */
 102.885 +	detach_transfer_in (xfer, status, msgtxt, 2 * SECONDS);
 102.886 +}
 102.887 +
 102.888 +/*****************************************************************************/
 102.889 +
 102.890 +static void send_push (GtTransfer *xfer, GtSource *gt, TCPC *server)
 102.891 +{
 102.892 +	GtPacket *packet;
 102.893 +
 102.894 +	if (!(packet = gt_packet_new (GT_MSG_PUSH, PUSH_MAX_TTL, NULL)))
 102.895 +		return;
 102.896 +
 102.897 +	gt_packet_put_ustr   (packet, gt->guid, 16);
 102.898 +	gt_packet_put_uint32 (packet, gt->index);
 102.899 +	gt_packet_put_ip     (packet, GT_NODE(server)->my_ip);
 102.900 +	gt_packet_put_port   (packet, GT_SELF->gt_port);
 102.901 +
 102.902 +	if (gt_packet_error (packet))
 102.903 +	{
 102.904 +		gt_packet_free (packet);
 102.905 +		return;
 102.906 +	}
 102.907 +
 102.908 +	gt_packet_send (server, packet);
 102.909 +	gt_packet_free (packet);
 102.910 +
 102.911 +	/*
 102.912 +	 * Don't wait for the whole Chunk timeout -- that keeps the Chunk
 102.913 +	 * occupied for too long if there are other active sources (the Chunk
 102.914 +	 * also times out longer and longer each time, so this gets worse
 102.915 +	 * the longer the transfer is inactive).
 102.916 +	 *
 102.917 +	 * This is really an infelicity of the Chunk system.
 102.918 +	 */
 102.919 +	detach_transfer_in (xfer, SOURCE_QUEUED_REMOTE, "Sent PUSH request",
 102.920 +	                    PUSH_WAIT_INTERVAL);
 102.921 +
 102.922 +	/* set the last time we sent a push to now */
 102.923 +	push_source_set_last_sent (gt->guid, gt->user_ip);
 102.924 +}
 102.925 +
 102.926 +static BOOL send_push_to_server (in_addr_t server_ip, in_port_t server_port,
 102.927 +                                 GtTransfer *xfer, GtSource *gt)
 102.928 +{
 102.929 +	GtNode *server;
 102.930 +
 102.931 +	if (!(server = gt_node_lookup (server_ip, server_port)))
 102.932 +	{
 102.933 +		server = gt_node_register (server_ip, server_port,
 102.934 +		                           GT_NODE_ULTRA);
 102.935 +	}
 102.936 +
 102.937 +	if (!server)
 102.938 +	{
 102.939 +		GT->err (GT, "couldn't register server");
 102.940 +		return FALSE;
 102.941 +	}
 102.942 +
 102.943 +	if (server->state & (GT_NODE_CONNECTED | GT_NODE_CONNECTING_2))
 102.944 +	{
 102.945 +		assert (GT_CONN(server) != NULL);
 102.946 +
 102.947 +		/* Server is in a state for receiving packets -- send the push */
 102.948 +		send_push (xfer, gt, GT_CONN(server));
 102.949 +		return TRUE;
 102.950 +	}
 102.951 +	else if (server->state & GT_NODE_CONNECTING_1)
 102.952 +	{
 102.953 +		/* dont try to connect again; wait till we're connected */
 102.954 +		return FALSE;
 102.955 +	}
 102.956 +	else if (gt_conn_need_connections (GT_NODE_ULTRA) > 0 &&
 102.957 +	         !server->tried_connect &&
 102.958 +	         gt_connect (server) >= 0)
 102.959 +	{
 102.960 +		/*
 102.961 +		 * We've tried to connect to the server so we could deliver the push
 102.962 +		 * request eventually NOTE: this doesnt send a push until the next
 102.963 +		 * chunk timeout.
 102.964 +		 */
 102.965 +		return FALSE;
 102.966 +	}
 102.967 +
 102.968 +	return FALSE;
 102.969 +}
 102.970 +
 102.971 +static void handle_push_download (Chunk *chunk, GtTransfer *xfer, GtSource *gt)
 102.972 +{
 102.973 +	GtNode *server;
 102.974 +
 102.975 +	/*
 102.976 +	 * If this succeeds, we already have a connection to this
 102.977 +	 * user and the transfer will continue by using that connection.
 102.978 +	 *
 102.979 +	 * TODO: the gt_push_source_add() should be used by some
 102.980 +	 *       per-source data structure
 102.981 +	 */
 102.982 +	if (gt_push_source_add_xfer (gt->guid, gt->user_ip, gt->server_ip, xfer))
 102.983 +		return;
 102.984 +
 102.985 +	/*
 102.986 +	 * Dont send pushes too often. Maybe should use a global queue instead.
 102.987 +	 *
 102.988 +	 * NOTE: we can't free the xfer here because we have stored it.
 102.989 +	 */
 102.990 +	if (push_source_should_send (gt->guid, gt->user_ip) == FALSE)
 102.991 +	{
 102.992 +		/* don't occupy the Chunk forever */
 102.993 +		detach_transfer_in (xfer, SOURCE_QUEUED_REMOTE, "Awaiting connection",
 102.994 +		                    PUSH_WAIT_INTERVAL);
 102.995 +		return;
 102.996 +	}
 102.997 +
 102.998 +	/*
 102.999 +	 * Next, try to find the server that supplied this result,
102.1000 +	 * and send them a push.
102.1001 +	 */
102.1002 +	if (send_push_to_server (gt->server_ip, gt->server_port, xfer, gt))
102.1003 +		return;
102.1004 +
102.1005 +	/*
102.1006 +	 * Finally, try sending to a random connected server.
102.1007 +	 *
102.1008 +	 * TODO: these should be rate-limited, either globally or
102.1009 +	 *       per-source.
102.1010 +	 */
102.1011 +	if ((server = gt_conn_random (GT_NODE_ULTRA, GT_NODE_CONNECTED)))
102.1012 +	{
102.1013 +		send_push_to_server (server->ip, server->gt_port, xfer, gt);
102.1014 +		return;
102.1015 +	}
102.1016 +
102.1017 +	detach_transfer (xfer, SOURCE_QUEUED_REMOTE, "No PUSH route");
102.1018 +}
102.1019 +
102.1020 +static BOOL set_request (GtTransfer *xfer, Chunk *chunk, Source *source,
102.1021 +                         GtSource *gt_src)
102.1022 +{
102.1023 +	char  *request;
102.1024 +
102.1025 +	if (!chunk || !xfer)
102.1026 +		return FALSE;
102.1027 +
102.1028 +	request = request_str (source, gt_src->index, gt_src->filename);
102.1029 +
102.1030 +	if (!gt_transfer_set_request (xfer, request))
102.1031 +	{
102.1032 +		GT->DBGFN (GT, "UI made an invalid request for '%s'", request);
102.1033 +		return FALSE;
102.1034 +	}
102.1035 +
102.1036 +	/* connect the xfer and the chunk */
102.1037 +	gt_transfer_set_chunk (xfer, chunk);
102.1038 +
102.1039 +	return TRUE;
102.1040 +}
102.1041 +
102.1042 +static BOOL should_push (GtSource *gt)
102.1043 +{
102.1044 +	TCPC *persistent;
102.1045 +
102.1046 +	/* we cannot push if there is no guid to send the push to */
102.1047 +	if (gt_guid_is_empty (gt->guid))
102.1048 +		return FALSE;
102.1049 +
102.1050 +	persistent = gt_http_connection_lookup (GT_TRANSFER_DOWNLOAD,
102.1051 +	                                        gt->user_ip,
102.1052 +	                                        gt->user_port);
102.1053 +
102.1054 +	/* need to close the connection to re-add it to the list, because
102.1055 +	 * _lookup removes it from the persistent connection list */
102.1056 +	gt_http_connection_close (GT_TRANSFER_DOWNLOAD, persistent, FALSE);
102.1057 +
102.1058 +	/* if we already have a connection don't send a push */
102.1059 +	if (persistent)
102.1060 +		return FALSE;
102.1061 +
102.1062 +	/* now check for a persistent "pushed" connection, which would be stored
102.1063 +	 * separately from a directly connected one */
102.1064 +	if (push_source_lookup_conn (gt->guid, gt->user_ip))
102.1065 +		return TRUE;
102.1066 +
102.1067 +	/* send a push if the IP is local */
102.1068 +	if (gt_is_local_ip (gt->user_ip, gt->server_ip))
102.1069 +		return TRUE;
102.1070 +
102.1071 +	/* don't send a push if we cannot receive incoming connections */
102.1072 +	if (gt_bind_is_firewalled())
102.1073 +		return FALSE;
102.1074 +
102.1075 +	/* send a push if they set the firewalled bit */
102.1076 +	if (gt->firewalled)
102.1077 +		return TRUE;
102.1078 +
102.1079 +	/* the last connection attempt failed, so try a push */
102.1080 +	if (gt->connect_failed)
102.1081 +		return TRUE;
102.1082 +
102.1083 +	return FALSE;
102.1084 +}
102.1085 +
102.1086 +static void handle_download (Chunk *chunk, GtTransfer *xfer, GtSource *gt)
102.1087 +{
102.1088 +	/*
102.1089 +	 * Send a push, or connect directly.
102.1090 +	 */
102.1091 +	if (should_push (gt))
102.1092 +	{
102.1093 +		/* (possibly) retry a connection attempt next time */
102.1094 +		gt->connect_failed = FALSE;
102.1095 +
102.1096 +		handle_push_download (chunk, xfer, gt);
102.1097 +	}
102.1098 +	else
102.1099 +	{
102.1100 +		gt_http_client_get (chunk, xfer);
102.1101 +	}
102.1102 +}
102.1103 +
102.1104 +static BOOL download_is_queued (GtSource *gt)
102.1105 +{
102.1106 +	/* back out if the request is still too early */
102.1107 +	if (time (NULL) < gt->retry_time)
102.1108 +		return TRUE;
102.1109 +
102.1110 +	return FALSE;
102.1111 +}
102.1112 +
102.1113 +int gnutella_download_start (Protocol *p, Transfer *transfer, Chunk *chunk,
102.1114 +                             Source *source)
102.1115 +{
102.1116 +	GtTransfer    *xfer;
102.1117 +	GtSource      *gt;
102.1118 +	off_t          start;
102.1119 +	off_t          stop;
102.1120 +
102.1121 +	gt = source->udata;
102.1122 +	assert (gt != NULL);
102.1123 +
102.1124 +	/* giftd should send us only deactivated Chunks */
102.1125 +	assert (chunk->udata == NULL);
102.1126 +
102.1127 +	/* free the Source URL and update it with any format changes */
102.1128 +	replace_url (source, gt);
102.1129 +
102.1130 +	/* thank you, pretender :) */
102.1131 +	start = chunk->start + chunk->transmit;
102.1132 +	stop  = chunk->stop;
102.1133 +
102.1134 +	if (!(xfer = gt_transfer_new (GT_TRANSFER_DOWNLOAD, source,
102.1135 +	                              gt->user_ip, gt->user_port, start, stop)))
102.1136 +	{
102.1137 +		GT->DBGFN (GT, "gt_transfer_new failed");
102.1138 +		return FALSE;
102.1139 +	}
102.1140 +
102.1141 +	if (!set_request (xfer, chunk, source, gt))
102.1142 +	{
102.1143 +		gt_transfer_close (xfer, TRUE);
102.1144 +		return FALSE;
102.1145 +	}
102.1146 +
102.1147 +	if (download_is_queued (gt))
102.1148 +	{
102.1149 +		detach_transfer (xfer, SOURCE_QUEUED_REMOTE, gt->status_txt);
102.1150 +		return TRUE;
102.1151 +	}
102.1152 +
102.1153 +	handle_download (chunk, xfer, gt);
102.1154 +
102.1155 +	return TRUE;
102.1156 +}
102.1157 +
102.1158 +void gnutella_download_stop (Protocol *p, Transfer *transfer, Chunk *chunk,
102.1159 +                             Source *source, BOOL complete)
102.1160 +{
102.1161 +	gt_download_cancel (chunk, NULL);
102.1162 +}
102.1163 +
102.1164 +int gnutella_upload_start (Protocol *p, Transfer *transfer, Chunk *chunk,
102.1165 +                           Source *source, unsigned long avail)
102.1166 +{
102.1167 +	return TRUE;
102.1168 +}
102.1169 +
102.1170 +void gnutella_upload_stop (Protocol *p, Transfer *transfer, Chunk *chunk,
102.1171 +                           Source *source)
102.1172 +{
102.1173 +	gt_upload_cancel (chunk, NULL);
102.1174 +}
102.1175 +
102.1176 +int gnutella_chunk_suspend (Protocol *p, Transfer *transfer, Chunk *chunk,
102.1177 +                            Source *source)
102.1178 +{
102.1179 +	return gt_chunk_suspend (chunk, transfer, NULL);
102.1180 +}
102.1181 +
102.1182 +int gnutella_chunk_resume (Protocol *p, Transfer *transfer, Chunk *chunk,
102.1183 +                           Source *source)
102.1184 +{
102.1185 +	return gt_chunk_resume (chunk, transfer, NULL);
102.1186 +}
   103.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   103.2 +++ b/src/gt_xfer.h	Sat Feb 20 21:18:28 2010 -0800
   103.3 @@ -0,0 +1,74 @@
   103.4 +/*
   103.5 + * $Id: gt_xfer.h,v 1.27 2004/05/05 10:30:12 hipnod Exp $
   103.6 + *
   103.7 + * Copyright (C) 2001-2003 giFT project (gift.sourceforge.net)
   103.8 + *
   103.9 + * This program is free software; you can redistribute it and/or modify it
  103.10 + * under the terms of the GNU General Public License as published by the
  103.11 + * Free Software Foundation; either version 2, or (at your option) any
  103.12 + * later version.
  103.13 + *
  103.14 + * This program is distributed in the hope that it will be useful, but
  103.15 + * WITHOUT ANY WARRANTY; without even the implied warranty of
  103.16 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
  103.17 + * General Public License for more details.
  103.18 + */
  103.19 +
  103.20 +#ifndef GIFT_GT_XFER_H_
  103.21 +#define GIFT_GT_XFER_H_
  103.22 +
  103.23 +/*****************************************************************************/
  103.24 +
  103.25 +struct transfer;
  103.26 +struct source;
  103.27 +struct chunk;
  103.28 +
  103.29 +struct gt_transfer;
  103.30 +
  103.31 +/*****************************************************************************/
  103.32 +
  103.33 +char *gt_localize_request (struct gt_transfer *xfer, char *s_path,
  103.34 +                           BOOL *authorized);
  103.35 +
  103.36 +/*****************************************************************************/
  103.37 +/* Push handling routines */
  103.38 +
  103.39 +void  gt_push_source_add           (gt_guid_t *guid, in_addr_t ip,
  103.40 +                                    in_addr_t src_ip);
  103.41 +void  gt_push_source_remove        (gt_guid_t *guid, in_addr_t ip,
  103.42 +                                    in_addr_t src_ip);
  103.43 +BOOL  gt_push_source_add_xfer      (gt_guid_t *guid, in_addr_t ip,
  103.44 +                                    in_addr_t src_ip,
  103.45 +                                    struct gt_transfer *xfer);
  103.46 +BOOL  gt_push_source_add_conn      (gt_guid_t *guid, in_addr_t ip, TCPC *c);
  103.47 +
  103.48 +void  gt_push_source_remove_xfer   (struct gt_transfer *xfer);
  103.49 +void  gt_push_source_remove_conn   (TCPC *c);
  103.50 +
  103.51 +/*****************************************************************************/
  103.52 +
  103.53 +int  gnutella_download_start  (struct protocol *p, struct transfer *transfer,
  103.54 +                               struct chunk *chunk, struct source *source);
  103.55 +void gnutella_download_stop   (struct protocol *p, struct transfer *transfer,
  103.56 +                               struct chunk *chunk, struct source *source,
  103.57 +                               BOOL complete);
  103.58 +
  103.59 +/*****************************************************************************/
  103.60 +
  103.61 +int  gnutella_upload_start (struct protocol *p, struct transfer *transfer,
  103.62 +                            struct chunk *chunk, struct source *source,
  103.63 +                            unsigned long avail);
  103.64 +void gnutella_upload_stop  (struct protocol *p, struct transfer *transfer,
  103.65 +                            struct chunk *chunk, struct source *source);
  103.66 +void gnutella_upload_avail (struct protocol *p, unsigned long avail);
  103.67 +
  103.68 +/*****************************************************************************/
  103.69 +
  103.70 +int gnutella_chunk_suspend (Protocol *p, struct transfer *transfer,
  103.71 +                            struct chunk *chunk, struct source *source);
  103.72 +int gnutella_chunk_resume  (Protocol *p, struct transfer *transfer,
  103.73 +                            struct chunk *chunk, struct source *source);
  103.74 +
  103.75 +/*****************************************************************************/
  103.76 +
  103.77 +#endif /* GIFT_GT_XFER_H_ */
   104.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   104.2 +++ b/src/gt_xfer_obj.c	Sat Feb 20 21:18:28 2010 -0800
   104.3 @@ -0,0 +1,867 @@
   104.4 +/*
   104.5 + * $Id: gt_xfer_obj.c,v 1.48 2004/12/19 12:38:42 mkern Exp $
   104.6 + *
   104.7 + * acts as a gateway between giFT and the HTTP implementation
   104.8 + *
   104.9 + * Copyright (C) 2001-2003 giFT project (gift.sourceforge.net)
  104.10 + *
  104.11 + * This program is free software; you can redistribute it and/or modify it
  104.12 + * under the terms of the GNU General Public License as published by the
  104.13 + * Free Software Foundation; either version 2, or (at your option) any
  104.14 + * later version.
  104.15 + *
  104.16 + * This program is distributed in the hope that it will be useful, but
  104.17 + * WITHOUT ANY WARRANTY; without even the implied warranty of
  104.18 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
  104.19 + * General Public License for more details.
  104.20 + */
  104.21 +
  104.22 +#include "gt_gnutella.h"
  104.23 +
  104.24 +#include "gt_xfer_obj.h"
  104.25 +#include "gt_xfer.h"
  104.26 +#include "gt_http_server.h"
  104.27 +#include "gt_http_client.h"
  104.28 +#include "gt_share.h"
  104.29 +
  104.30 +#include "encoding/url.h"
  104.31 +
  104.32 +#include "transfer/source.h"
  104.33 +
  104.34 +/*****************************************************************************/
  104.35 +
  104.36 +static List *upload_connections   = NULL;
  104.37 +static List *download_connections = NULL;
  104.38 +
  104.39 +/*****************************************************************************/
  104.40 +/* HTTP COMMUNICATION */
  104.41 +
  104.42 +static BOOL header_read_timeout (GtTransfer *xfer)
  104.43 +{
  104.44 +	gt_transfer_status (xfer, SOURCE_TIMEOUT, "Timed out");
  104.45 +	gt_transfer_close (xfer, TRUE);
  104.46 +	return FALSE;
  104.47 +}
  104.48 +
  104.49 +GtTransfer *gt_transfer_new (GtTransferType type, Source *source,
  104.50 +                             in_addr_t ip, in_port_t port,
  104.51 +                             off_t start, off_t stop)
  104.52 +{
  104.53 +	GtTransfer    *xfer;
  104.54 +	GtTransferCB   cb;
  104.55 +
  104.56 +	if (!(xfer = malloc (sizeof (GtTransfer))))
  104.57 +		return NULL;
  104.58 +
  104.59 +	memset (xfer, 0, sizeof (GtTransfer));
  104.60 +
  104.61 +	if (type == GT_TRANSFER_UPLOAD)
  104.62 +		cb = gt_upload;
  104.63 +	else if (type == GT_TRANSFER_DOWNLOAD)
  104.64 +		cb = gt_download;
  104.65 +	else
  104.66 +		abort ();
  104.67 +
  104.68 +	xfer->type     = type;
  104.69 +	xfer->callback = cb;
  104.70 +	xfer->source   = source;
  104.71 +
  104.72 +	/* parsed information about the source */
  104.73 +	xfer->ip       = ip;
  104.74 +	xfer->port     = port;
  104.75 +
  104.76 +	xfer->start    = start;
  104.77 +	xfer->stop     = stop;
  104.78 +
  104.79 +	xfer->shared   = TRUE;
  104.80 +
  104.81 +	xfer->detach_timer  = TIMER_NONE;
  104.82 +	xfer->detach_msgtxt = NULL;
  104.83 +
  104.84 +	/* set the size of this http request */
  104.85 +	xfer->remaining_len = xfer->stop - xfer->start;
  104.86 +
  104.87 +	/* give this GtTransfer a maximum amount of time before cancelling */
  104.88 +	xfer->header_timer = timer_add (1 * MINUTES,
  104.89 +	                                (TimerCallback)header_read_timeout,
  104.90 +	                                xfer);
  104.91 +
  104.92 +	return xfer;
  104.93 +}
  104.94 +
  104.95 +static void gt_transfer_free (GtTransfer *xfer)
  104.96 +{
  104.97 +	if (!xfer)
  104.98 +		return;
  104.99 +
 104.100 +	free (xfer->command);
 104.101 +	free (xfer->request);
 104.102 +	free (xfer->request_path);
 104.103 +	free (xfer->content_urns);
 104.104 +	free (xfer->detach_msgtxt);
 104.105 +
 104.106 +	if (xfer->header)
 104.107 +		dataset_clear (xfer->header);
 104.108 +
 104.109 +#if 0
 104.110 +	if (xfer->share_authd && xfer->shared_authd_free)
 104.111 +		share_free (xfer->share_authd);
 104.112 +#endif
 104.113 +
 104.114 +	timer_remove (xfer->detach_timer);
 104.115 +	timer_remove (xfer->header_timer);
 104.116 +
 104.117 +	/* uploads use these */
 104.118 +	free (xfer->open_path);
 104.119 +	free (xfer->hash);
 104.120 +	free (xfer->version);
 104.121 +
 104.122 +	if (xfer->f)
 104.123 +		fclose (xfer->f);
 104.124 +
 104.125 +	/* whee */
 104.126 +	free (xfer);
 104.127 +}
 104.128 +
 104.129 +/*****************************************************************************/
 104.130 +
 104.131 +void gt_transfer_set_tcpc (GtTransfer *xfer, TCPC *c)
 104.132 +{
 104.133 +	assert (c->udata == NULL);
 104.134 +	assert (xfer->c == NULL);
 104.135 +
 104.136 +	c->udata = xfer;
 104.137 +	xfer->c = c;
 104.138 +}
 104.139 +
 104.140 +void gt_transfer_set_chunk (GtTransfer *xfer, Chunk *chunk)
 104.141 +{
 104.142 +	assert (chunk->udata == NULL);
 104.143 +	assert (xfer->chunk == NULL);
 104.144 +
 104.145 +	xfer->chunk = chunk;
 104.146 +	chunk->udata = xfer;
 104.147 +}
 104.148 +
 104.149 +Chunk *gt_transfer_get_chunk (GtTransfer *xfer)
 104.150 +{
 104.151 +	assert (xfer->chunk != NULL);
 104.152 +	assert (xfer->chunk->udata == xfer);
 104.153 +
 104.154 +	return xfer->chunk;
 104.155 +}
 104.156 +
 104.157 +TCPC *gt_transfer_get_tcpc (GtTransfer *xfer)
 104.158 +{
 104.159 +	assert (xfer->c != NULL);
 104.160 +	assert (xfer->c->udata == xfer);
 104.161 +
 104.162 +	return xfer->c;
 104.163 +}
 104.164 +
 104.165 +/*****************************************************************************/
 104.166 +
 104.167 +GtSource *gt_transfer_get_source (GtTransfer *xfer)
 104.168 +{
 104.169 +	Source *source = xfer->source;
 104.170 +
 104.171 +	/* could be null for uploads */
 104.172 +	if (!source)
 104.173 +		return NULL;
 104.174 +
 104.175 +	assert (source->udata != NULL);
 104.176 +	return source->udata;
 104.177 +}
 104.178 +
 104.179 +/*****************************************************************************/
 104.180 +
 104.181 +/*
 104.182 + * giftd may change the Chunk size. This routine will reset the range of the
 104.183 + * transfer we'll ask the remote end for. It should be called before we've
 104.184 + * transmitted the HTTP headers that include the Range: request.
 104.185 + */
 104.186 +void gt_transfer_set_length (GtTransfer *xfer, Chunk *chunk)
 104.187 +{
 104.188 +	TCPC   *c;
 104.189 +	off_t   old_start;
 104.190 +	off_t   old_stop;
 104.191 +	off_t   old_len;
 104.192 +
 104.193 +	c = gt_transfer_get_tcpc (xfer);
 104.194 +
 104.195 +	/* don't call me if you've already transmitted headers */
 104.196 +	assert (!xfer->transmitted_hdrs);
 104.197 +
 104.198 +	old_start = xfer->start;
 104.199 +	old_stop  = xfer->stop;
 104.200 +	old_len   = xfer->remaining_len;
 104.201 +
 104.202 +	xfer->start = chunk->start + chunk->transmit;
 104.203 +	xfer->stop  = chunk->stop;
 104.204 +
 104.205 +	xfer->remaining_len = xfer->stop - xfer->start;
 104.206 +
 104.207 +	/* i believe this is true even for push downloads... */
 104.208 +	assert (xfer->start == old_start);
 104.209 +
 104.210 +	if (xfer->stop != old_stop)
 104.211 +	{
 104.212 +		assert (xfer->remaining_len != old_len);
 104.213 +
 104.214 +		GT->DBGSOCK (GT, c, "(%s) old chunk range: [%lu,%lu) "
 104.215 +		                    "new range: [%lu,%lu) old len: %lu new len: %lu",
 104.216 +		                    xfer->request, (long)old_start,(long)old_stop,
 104.217 +		                    (long)xfer->start, (long)xfer->stop,
 104.218 +		                    (long)old_len, (long)xfer->remaining_len);
 104.219 +	}
 104.220 +}
 104.221 +
 104.222 +/*****************************************************************************/
 104.223 +
 104.224 +/*
 104.225 + * Cancels a possibly active HTTP transfer
 104.226 + *
 104.227 + * NOTE:
 104.228 + * This function may be called recursively if you don't do what giFT expects
 104.229 + * of you.  This is a feature, not a bug, trust me.
 104.230 + */
 104.231 +static void gt_transfer_cancel (Chunk *chunk, TransferType type)
 104.232 +{
 104.233 +	GtTransfer   *xfer;
 104.234 +	BOOL          force_close = FALSE;
 104.235 +
 104.236 +	if (!chunk)
 104.237 +		return;
 104.238 +
 104.239 +	xfer = chunk->udata;
 104.240 +
 104.241 +	/* each time this function is called we _MUST_ uncouple the transfer
 104.242 +	 * and the chunk or the code to follow will eventually call this func
 104.243 +	 * again!! */
 104.244 +	if (!xfer)
 104.245 +		return;
 104.246 +
 104.247 +	/* do not emit a callback signal */
 104.248 +	xfer->callback = NULL;
 104.249 +	gt_transfer_close (xfer, force_close);
 104.250 +}
 104.251 +
 104.252 +/*****************************************************************************/
 104.253 +
 104.254 +static void close_http_connection (TCPC *c, BOOL force_close,
 104.255 +                                   GtTransferType type, GtSource *gt_src)
 104.256 +{
 104.257 +	if (!c)
 104.258 +		return;
 104.259 +
 104.260 +	/*
 104.261 +	 * If this is an incoming indirect download that we sent a push out
 104.262 +	 * for, then don't store the connection in the HTTP connection cache,
 104.263 +	 * store it in the separate push connection cache that uses the client
 104.264 +	 * id as well as the IP address to identify the node.
 104.265 +	 */
 104.266 +	if (!force_close && type == GT_TRANSFER_DOWNLOAD && !c->outgoing)
 104.267 +	{
 104.268 +		if (gt_src != NULL)
 104.269 +		{
 104.270 +			if (HTTP_DEBUG)
 104.271 +				GT->DBGSOCK (GT, c, "Keeping push connection");
 104.272 +
 104.273 +			/* nullify the previous data on this connection */
 104.274 +			c->udata = NULL;
 104.275 +
 104.276 +			gt_push_source_add_conn (gt_src->guid, gt_src->user_ip, c);
 104.277 +			return;
 104.278 +		}
 104.279 +
 104.280 +		/*
 104.281 +		 * This could happen if the chunk has no source url to parse
 104.282 +		 * at the moment. Argh, GtTransfer should always have a GtSource
 104.283 +		 * if xfer->type == GT_TRANSFER_DOWNLOAD.
 104.284 +		 */
 104.285 +		if (HTTP_DEBUG)
 104.286 +			GT->DBGSOCK (GT, c, "Closing pushed connection! ARGH!");
 104.287 +
 104.288 +		force_close = TRUE;
 104.289 +	}
 104.290 +
 104.291 +	gt_http_connection_close (type, c, force_close);
 104.292 +}
 104.293 +
 104.294 +/*
 104.295 + * This function is very critical to OpenFT's transfer system.  It is called
 104.296 + * anytime either the client or server HTTP implementations need to "cleanup"
 104.297 + * all data associated.  This includes disconnecting the socket, unlinking
 104.298 + * itself from the chunk system and registering this status with giFT, just
 104.299 + * in case this is premature.  If anything is leaking or fucking up, blame
 104.300 + * this :)
 104.301 + */
 104.302 +void gt_transfer_close (GtTransfer *xfer, BOOL force_close)
 104.303 +{
 104.304 +	TCPC          *c;
 104.305 +	Chunk         *chunk;
 104.306 +	GtSource      *gt_src = NULL;
 104.307 +	char          *conn_hdr;
 104.308 +
 104.309 +	if (!xfer)
 104.310 +		return;
 104.311 +
 104.312 +	c     = xfer->c;
 104.313 +	chunk = xfer->chunk;
 104.314 +
 104.315 +	assert (xfer != NULL);
 104.316 +
 104.317 +	/* remove the xfer from the indirect src list */
 104.318 +	gt_push_source_remove_xfer (xfer);
 104.319 +
 104.320 +	/* get this source if this was a download */
 104.321 +	if (xfer->type == GT_TRANSFER_DOWNLOAD && chunk && chunk->source)
 104.322 +		gt_src = gt_source_unserialize (chunk->source->url);
 104.323 +
 104.324 +	/* if we have associated a chunk with this transfer we need to make sure
 104.325 +	 * we remove cleanly detach */
 104.326 +	if (chunk)
 104.327 +	{
 104.328 +		chunk->udata = NULL;
 104.329 +
 104.330 +		/*
 104.331 +		 * notify the transfer callback that we have terminated this
 104.332 +		 * connection.  let giFT handle the rest
 104.333 +		 *
 104.334 +		 * NOTE:
 104.335 +		 * see gt_transfer_cancel for some warnings about this code
 104.336 +		 */
 104.337 +		if (xfer->callback)
 104.338 +			(*xfer->callback) (chunk, NULL, 0);
 104.339 +
 104.340 +		/* WARNING: chunk is free'd in the depths of xfer->callback! */
 104.341 +	}
 104.342 +
 104.343 +	/* HTTP/1.0 does not support persist connections or something...i dunno */
 104.344 +	if (!STRCASECMP (xfer->version, "HTTP/1.0"))
 104.345 +		force_close = TRUE;
 104.346 +
 104.347 +	/* older gnutella clients send a plain "HTTP" version, that is
 104.348 +	 * not persistent */
 104.349 +	if (!STRCASECMP (xfer->version, "HTTP"))
 104.350 +		force_close = TRUE;
 104.351 +
 104.352 +	/*
 104.353 +	 * We must force a socket close if there is still data waiting to
 104.354 +	 * be read on this transfer.
 104.355 +	 */
 104.356 +	if (!xfer->transmitted_hdrs || xfer->remaining_len != 0)
 104.357 +		force_close = TRUE;
 104.358 +
 104.359 +	/* close the connection if "Connection: close" was supplied */
 104.360 +	conn_hdr = dataset_lookupstr (xfer->header, "connection");
 104.361 +	if (!STRCASECMP (conn_hdr, "close"))
 104.362 +		force_close = TRUE;
 104.363 +
 104.364 +	close_http_connection (c, force_close, xfer->type, gt_src);
 104.365 +
 104.366 +	gt_source_free (gt_src);
 104.367 +
 104.368 +	gt_transfer_free (xfer);
 104.369 +}
 104.370 +
 104.371 +void gt_transfer_status (GtTransfer *xfer, SourceStatus status, char *text)
 104.372 +{
 104.373 +	Chunk      *chunk;
 104.374 +	GtSource   *gt_src;
 104.375 +	char       *next_status;
 104.376 +
 104.377 +	if (!xfer || !text)
 104.378 +		return;
 104.379 +
 104.380 +	/* Added this on 2004-12-19 to track observed assertion failure in
 104.381 +	 * gt_transfer_get_chunk. -- mkern
 104.382 +	 */
 104.383 +	if (!xfer->chunk || xfer->chunk->udata != xfer)
 104.384 +	{
 104.385 +		GT->DBGFN (GT, "This is where we say good bye. status = %d, "
 104.386 +		           "text = %s, xfer->request_path = %s, xfer->ip = %s",
 104.387 +		           status, text, xfer->request_path, net_ip_str (xfer->ip));
 104.388 +	}
 104.389 +
 104.390 +	chunk = gt_transfer_get_chunk (xfer);
 104.391 +
 104.392 +	GT->source_status (GT, chunk->source, status, text);
 104.393 +
 104.394 +	/*
 104.395 +	 * HACK: Store the status message on the GtSource,
 104.396 +	 *       so we can reuse it sometimes.
 104.397 +	 */
 104.398 +	if (!xfer->source || !(gt_src = xfer->source->udata))
 104.399 +		return;
 104.400 +
 104.401 +	/* allocate first so it's ok to call this function with an old value of
 104.402 +	 * gt_src->status_txt */
 104.403 +	next_status = STRDUP (text);
 104.404 +	free (gt_src->status_txt);
 104.405 +	gt_src->status_txt = next_status;
 104.406 +}
 104.407 +
 104.408 +/*****************************************************************************/
 104.409 +/* PERSISTENT HTTP HANDLING */
 104.410 +
 104.411 +struct conn_info
 104.412 +{
 104.413 +	in_addr_t  ip;
 104.414 +	in_port_t  port;
 104.415 +	size_t     count;
 104.416 +};
 104.417 +
 104.418 +static int conn_cmp (TCPC *c, struct conn_info *info)
 104.419 +{
 104.420 + 	if (info->port != c->port)
 104.421 + 		return -1;
 104.422 +
 104.423 +	if (net_peer (c->fd) != info->ip)
 104.424 +		return 1;
 104.425 +
 104.426 +	return 0;
 104.427 +}
 104.428 +
 104.429 +TCPC *gt_http_connection_lookup (GtTransferType type, in_addr_t ip,
 104.430 +                                 in_port_t port)
 104.431 +{
 104.432 +	List            *link;
 104.433 +	List           **connlist_ptr;
 104.434 +	TCPC            *c           = NULL;
 104.435 +	struct conn_info info;
 104.436 +
 104.437 +	info.ip   = ip;
 104.438 +	info.port = port;
 104.439 +
 104.440 +	if (type == GT_TRANSFER_DOWNLOAD)
 104.441 +		connlist_ptr = &download_connections;
 104.442 +	else
 104.443 +		connlist_ptr = &upload_connections;
 104.444 +
 104.445 +	link = list_find_custom (*connlist_ptr, &info, (CompareFunc)conn_cmp);
 104.446 +
 104.447 +	if (link)
 104.448 +	{
 104.449 +		c = link->data;
 104.450 +
 104.451 +		GT->DBGFN (GT, "using previous connection to %s:%hu",
 104.452 +		           net_ip_str (ip), port);
 104.453 +
 104.454 +		/* remove from the open list */
 104.455 +		*connlist_ptr = list_remove_link (*connlist_ptr, link);
 104.456 +		input_remove_all (c->fd);
 104.457 +	}
 104.458 +
 104.459 +	return c;
 104.460 +}
 104.461 +
 104.462 +/*
 104.463 + * Handles outgoing HTTP connections.  This function is capable of
 104.464 + * retrieving an already connected socket that was left over from a previous
 104.465 + * transfer.
 104.466 + */
 104.467 +TCPC *gt_http_connection_open (GtTransferType type, in_addr_t ip,
 104.468 +                               in_port_t port)
 104.469 +{
 104.470 +	TCPC *c;
 104.471 +
 104.472 +	if (!(c = gt_http_connection_lookup (type, ip, port)))
 104.473 +		c = tcp_open (ip, port, FALSE);
 104.474 +
 104.475 +	return c;
 104.476 +}
 104.477 +
 104.478 +static BOOL count_open (TCPC *c, struct conn_info *info)
 104.479 +{
 104.480 +	if (info->ip == net_peer (c->fd))
 104.481 +		info->count++;
 104.482 +
 104.483 +	return FALSE;
 104.484 +}
 104.485 +
 104.486 +size_t gt_http_connection_length (GtTransferType type, in_addr_t ip)
 104.487 +{
 104.488 +	struct conn_info info;
 104.489 +	List            *list;
 104.490 +
 104.491 +	info.ip    = ip;
 104.492 +	info.port  = 0;
 104.493 +	info.count = 0;
 104.494 +
 104.495 +	assert (type == GT_TRANSFER_DOWNLOAD || type == GT_TRANSFER_UPLOAD);
 104.496 +	list = (type == GT_TRANSFER_DOWNLOAD ? download_connections :
 104.497 +	                                       upload_connections);
 104.498 +
 104.499 +	list_foreach (list, (ListForeachFunc)count_open, &info);
 104.500 +
 104.501 +	return info.count;
 104.502 +}
 104.503 +
 104.504 +void gt_http_connection_close (GtTransferType type, TCPC *c, BOOL force_close)
 104.505 +{
 104.506 +	List **connlist_ptr;
 104.507 +
 104.508 +	if (!c)
 104.509 +		return;
 104.510 +
 104.511 +	switch (type)
 104.512 +	{
 104.513 +	 case GT_TRANSFER_DOWNLOAD:
 104.514 +		{
 104.515 +			gt_http_client_reset (c);
 104.516 +			connlist_ptr = &download_connections;
 104.517 +		}
 104.518 +		break;
 104.519 +
 104.520 +	 case GT_TRANSFER_UPLOAD:
 104.521 +		{
 104.522 +			gt_http_server_reset (c);
 104.523 +			connlist_ptr = &upload_connections;
 104.524 +		}
 104.525 +		break;
 104.526 +
 104.527 +	 default:
 104.528 +		abort ();
 104.529 +	}
 104.530 +
 104.531 +	if (force_close)
 104.532 +	{
 104.533 +		*connlist_ptr = list_remove (*connlist_ptr, c);
 104.534 +
 104.535 +		if (HTTP_DEBUG)
 104.536 +			GT->DBGSOCK (GT, c, "force closing");
 104.537 +
 104.538 +		tcp_close (c);
 104.539 +		return;
 104.540 +	}
 104.541 +
 104.542 +	/* remove the data associated with this connection */
 104.543 +	c->udata = NULL;
 104.544 +
 104.545 +	/*
 104.546 +	 * This condition will happen because the server doesn't remove the
 104.547 +	 * connection from the persistent list until the connection fails.
 104.548 +	 */
 104.549 +	if (list_find (*connlist_ptr, c))
 104.550 +	{
 104.551 +		assert (type == GT_TRANSFER_UPLOAD);
 104.552 +		return;
 104.553 +	}
 104.554 +
 104.555 +	/* track it */
 104.556 +	*connlist_ptr = list_prepend (*connlist_ptr, c);
 104.557 +}
 104.558 +
 104.559 +/*****************************************************************************/
 104.560 +
 104.561 +static char *localize_request (GtTransfer *xfer, BOOL *authorized)
 104.562 +{
 104.563 +	char          *open_path;
 104.564 +	char          *s_path;
 104.565 +	int            auth      = FALSE;
 104.566 +	int            need_free = FALSE;
 104.567 +
 104.568 +	if (!xfer || !xfer->request)
 104.569 +		return NULL;
 104.570 +
 104.571 +	/* dont call secure_path if they dont even care if it's a secure
 104.572 +	 * lookup */
 104.573 +	s_path =
 104.574 +	    (authorized ? file_secure_path (xfer->request) : xfer->request);
 104.575 +
 104.576 +	if (authorized)
 104.577 +		need_free = TRUE;
 104.578 +
 104.579 +	open_path = gt_localize_request (xfer, s_path, &auth);
 104.580 +
 104.581 +	if (need_free || !open_path)
 104.582 +		free (s_path);
 104.583 +
 104.584 +	if (authorized)
 104.585 +		*authorized = auth;
 104.586 +
 104.587 +	/* we need a unix style path for authorization */
 104.588 +	return open_path;
 104.589 +}
 104.590 +
 104.591 +/*
 104.592 + * request is expected in the form:
 104.593 + *   /shared/Fuck%20Me%20Hard.mpg
 104.594 + */
 104.595 +BOOL gt_transfer_set_request (GtTransfer *xfer, char *request)
 104.596 +{
 104.597 +#if 0
 104.598 +	FileShare *file;
 104.599 +	char      *shared_path;
 104.600 +#endif
 104.601 +
 104.602 +	free (xfer->request);
 104.603 +	xfer->request = NULL;
 104.604 +
 104.605 +	/* lets keep this sane shall we */
 104.606 +	if (!request || *request != '/')
 104.607 +		return FALSE;
 104.608 +
 104.609 +	xfer->request      = STRDUP (request);
 104.610 +	xfer->request_path = gt_url_decode (request);   /* storing here for opt */
 104.611 +
 104.612 +	return TRUE;
 104.613 +}
 104.614 +
 104.615 +/* attempts to open the requested file locally.
 104.616 + * NOTE: this handles verification */
 104.617 +FILE *gt_transfer_open_request (GtTransfer *xfer, int *code)
 104.618 +{
 104.619 +	FILE       *f;
 104.620 +	char       *shared_path;
 104.621 +	char       *full_path = NULL;
 104.622 +	char       *host_path;
 104.623 +	int         auth = FALSE;
 104.624 +	int         code_l = 200;
 104.625 +
 104.626 +	if (code)
 104.627 +		*code = 404; /* Not Found */
 104.628 +
 104.629 +	if (!xfer || !xfer->request)
 104.630 +		return NULL;
 104.631 +
 104.632 +	if (!(shared_path = localize_request (xfer, &auth)))
 104.633 +	{
 104.634 +		/*
 104.635 +		 * If we havent finished syncing shares, that may be why the
 104.636 +		 * request failed. If so, return 503 here.
 104.637 +		 */
 104.638 +		if (!gt_share_local_sync_is_done () && code != NULL)
 104.639 +			*code = 503;
 104.640 +
 104.641 +		return NULL;
 104.642 +	}
 104.643 +
 104.644 +	/* needs more work for virtual requests */
 104.645 +#if 0
 104.646 +	/* check to see if we matched a special OpenFT condition.  If we did, the
 104.647 +	 * localized path is in the wrong order, so convert it (just to be
 104.648 +	 * converted back again...it's easier to maintain this way :) */
 104.649 +	if (auth)
 104.650 +	{
 104.651 +		xfer->shared = FALSE;
 104.652 +		full_path = file_unix_path (shared_path);
 104.653 +	}
 104.654 +	else
 104.655 +#endif
 104.656 +	{
 104.657 +		Share        *share;
 104.658 +		int           reason = UPLOAD_AUTH_NOTSHARED;
 104.659 +		upload_auth_t cond;
 104.660 +
 104.661 +		/*
 104.662 +		 * NOTE: the user string is not consistent with the one
 104.663 +		 * echoed through search results, which prefixes the IP
 104.664 +		 * with the GUID, if this node is firewalled.
 104.665 +		 */
 104.666 +		if ((share = GT->share_lookup (GT, SHARE_LOOKUP_HPATH, shared_path)))
 104.667 +		    reason = GT->upload_auth (GT, net_ip_str (xfer->ip), share, &cond);
 104.668 +
 104.669 +		xfer->share_authd = share;
 104.670 +
 104.671 +		switch (reason)
 104.672 +		{
 104.673 +		 case UPLOAD_AUTH_STALE:
 104.674 +			code_l = 500;              /* Internal Server Error */
 104.675 +			break;
 104.676 +		 case UPLOAD_AUTH_NOTSHARED:
 104.677 +			code_l = 404;              /* Not Found */
 104.678 +			break;
 104.679 +		 case UPLOAD_AUTH_ALLOW:
 104.680 +			code_l = 200;              /* OK */
 104.681 +			xfer->open_path_size = share->size;
 104.682 +			xfer->content_type = share->mime;
 104.683 +			full_path = STRDUP (share->path);
 104.684 +			break;
 104.685 +		 case UPLOAD_AUTH_MAX:
 104.686 +		 case UPLOAD_AUTH_MAX_PERUSER:
 104.687 +		 case UPLOAD_AUTH_HIDDEN:
 104.688 +		 default:
 104.689 +			code_l = 503;              /* Service Unavailable */
 104.690 +			xfer->queue_pos = cond.queue_pos;
 104.691 +			xfer->queue_ttl = cond.queue_ttl;
 104.692 +			break;
 104.693 +		}
 104.694 +	}
 104.695 +
 104.696 +	if (code)
 104.697 +		*code = code_l;
 104.698 +
 104.699 +	/* error of some kind, get out of here */
 104.700 +	if (code_l != 200)
 104.701 +		return NULL;
 104.702 +
 104.703 +	/* figure out the actual filename that we should be opening */
 104.704 +	host_path = file_host_path (full_path);
 104.705 +	free (full_path);
 104.706 +
 104.707 +	/* needs more work for virtual requests */
 104.708 +#if 0
 104.709 +	/* complete the rest of the data required */
 104.710 +	if (auth)
 104.711 +	{
 104.712 +		struct stat st;
 104.713 +
 104.714 +		if (!file_stat (host_path, &st))
 104.715 +		{
 104.716 +			free (host_path);
 104.717 +			return NULL;
 104.718 +		}
 104.719 +
 104.720 +		xfer->open_path_size = st.st_size;
 104.721 +		xfer->content_type = mime_type (host_path);
 104.722 +	}
 104.723 +#endif
 104.724 +
 104.725 +	if (!(f = fopen (host_path, "rb")))
 104.726 +	{
 104.727 +		*code = 500;
 104.728 +		return NULL;
 104.729 +	}
 104.730 +
 104.731 +	/* NOTE: gt_transfer_close will be responsible for freeing this now */
 104.732 +	xfer->open_path = host_path;
 104.733 +
 104.734 +	if (code)
 104.735 +		*code = 200; /* OK */
 104.736 +
 104.737 +	return f;
 104.738 +}
 104.739 +
 104.740 +/*****************************************************************************/
 104.741 +
 104.742 +/*
 104.743 + * The callbacks here are from within the HTTP system, centralized for
 104.744 + * maintainability.
 104.745 + */
 104.746 +
 104.747 +/* report back the progress of this download chunk */
 104.748 +void gt_download (Chunk *chunk, unsigned char *segment, size_t len)
 104.749 +{
 104.750 +	GT->chunk_write (GT, chunk->transfer, chunk, chunk->source,
 104.751 +	                 segment, len);
 104.752 +}
 104.753 +
 104.754 +/* report back the progress of this upload chunk */
 104.755 +void gt_upload (Chunk *chunk, unsigned char *segment, size_t len)
 104.756 +{
 104.757 +	GT->chunk_write (GT, chunk->transfer, chunk, chunk->source,
 104.758 +	                 segment, len);
 104.759 +}
 104.760 +
 104.761 +void gt_transfer_write (GtTransfer *xfer, Chunk *chunk,
 104.762 +                        unsigned char *segment, size_t len)
 104.763 +{
 104.764 +	/*
 104.765 +	 * Cap the data at the remaining size of the xfer.  Note that this is
 104.766 +	 * the size of the HTTP request issued, _NOT_ the chunk size, which may
 104.767 +	 * have been altered by giFT in splitting up chunks. I think giFT
 104.768 +	 * handles that case properly, but we also have to guard against
 104.769 +	 * remaining_len becoming less than 0. Note that p->chunk_write
 104.770 +	 * will cancel the transfer if remaining_len goes to 0.
 104.771 +	 *
 104.772 +	 * TODO: remaining_len is off_t, make sure this is handled right wrt
 104.773 +	 * negative file sizes (do big files become negative sizes?)
 104.774 +	 */
 104.775 +	if (len > xfer->remaining_len)
 104.776 +		len = xfer->remaining_len;
 104.777 +
 104.778 +	xfer->remaining_len -= len;
 104.779 +	(*xfer->callback) (chunk, segment, len);
 104.780 +}
 104.781 +
 104.782 +/*****************************************************************************/
 104.783 +
 104.784 +static BOOL throttle_suspend (Chunk *chunk, int s_opt, float factor)
 104.785 +{
 104.786 +	GtTransfer  *xfer;
 104.787 +
 104.788 +	if (!chunk)
 104.789 +		return FALSE;
 104.790 +
 104.791 +	xfer = chunk->udata;
 104.792 +
 104.793 +	if (!xfer || !xfer->c)
 104.794 +	{
 104.795 +		GT->DBGFN (GT, "no connection found to suspend");
 104.796 +		return FALSE;
 104.797 +	}
 104.798 +
 104.799 +	input_suspend_all (xfer->c->fd);
 104.800 +
 104.801 +	if (factor)
 104.802 +		net_sock_adj_buf (xfer->c->fd, s_opt, factor);
 104.803 +
 104.804 +	return TRUE;
 104.805 +}
 104.806 +
 104.807 +static BOOL throttle_resume (Chunk *chunk, int s_opt, float factor)
 104.808 +{
 104.809 +	GtTransfer *xfer = NULL;
 104.810 +
 104.811 +	if (!chunk)
 104.812 +		return FALSE;
 104.813 +
 104.814 +	xfer = chunk->udata;
 104.815 +
 104.816 +	if (!xfer || !xfer->c)
 104.817 +	{
 104.818 +		GT->DBGFN (GT, "no connection found to resume");
 104.819 +		return FALSE;
 104.820 +	}
 104.821 +
 104.822 +	input_resume_all (xfer->c->fd);
 104.823 +
 104.824 +#if 0
 104.825 +	if (factor)
 104.826 +		net_sock_adj_buf (xfer->c->fd, s_opt, factor);
 104.827 +#endif
 104.828 +
 104.829 +	return TRUE;
 104.830 +}
 104.831 +
 104.832 +/*****************************************************************************/
 104.833 +
 104.834 +void gt_download_cancel (Chunk *chunk, void *data)
 104.835 +{
 104.836 +	gt_transfer_cancel (chunk, TRANSFER_DOWNLOAD);
 104.837 +}
 104.838 +
 104.839 +/* cancel the transfer associate with the chunk giFT gave us */
 104.840 +void gt_upload_cancel (Chunk *chunk, void *data)
 104.841 +{
 104.842 +	gt_transfer_cancel (chunk, TRANSFER_UPLOAD);
 104.843 +}
 104.844 +
 104.845 +static int throttle_sopt (Transfer *transfer)
 104.846 +{
 104.847 +	int sopt = 0;
 104.848 +
 104.849 +	switch (transfer_direction (transfer))
 104.850 +	{
 104.851 +	 case TRANSFER_DOWNLOAD:
 104.852 +		sopt = SO_RCVBUF;
 104.853 +		break;
 104.854 +	 case TRANSFER_UPLOAD:
 104.855 +		sopt = SO_SNDBUF;
 104.856 +		break;
 104.857 +	}
 104.858 +
 104.859 +	return sopt;
 104.860 +}
 104.861 +
 104.862 +BOOL gt_chunk_suspend (Chunk *chunk, Transfer *transfer, void *data)
 104.863 +{
 104.864 +	return throttle_suspend (chunk, throttle_sopt (transfer), 0.0);
 104.865 +}
 104.866 +
 104.867 +BOOL gt_chunk_resume (Chunk *chunk, Transfer *transfer, void *data)
 104.868 +{
 104.869 +	return throttle_resume (chunk, throttle_sopt (transfer), 0.0);
 104.870 +}
   105.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   105.2 +++ b/src/gt_xfer_obj.h	Sat Feb 20 21:18:28 2010 -0800
   105.3 @@ -0,0 +1,159 @@
   105.4 +/*
   105.5 + * $Id: gt_xfer_obj.h,v 1.23 2004/05/05 10:30:12 hipnod Exp $
   105.6 + *
   105.7 + * Copyright (C) 2001-2003 giFT project (gift.sourceforge.net)
   105.8 + *
   105.9 + * This program is free software; you can redistribute it and/or modify it
  105.10 + * under the terms of the GNU General Public License as published by the
  105.11 + * Free Software Foundation; either version 2, or (at your option) any
  105.12 + * later version.
  105.13 + *
  105.14 + * This program is distributed in the hope that it will be useful, but
  105.15 + * WITHOUT ANY WARRANTY; without even the implied warranty of
  105.16 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
  105.17 + * General Public License for more details.
  105.18 + */
  105.19 +
  105.20 +#ifndef GIFT_GT_XFER_OBJ_H_
  105.21 +#define GIFT_GT_XFER_OBJ_H_
  105.22 +
  105.23 +/*****************************************************************************/
  105.24 +
  105.25 +#define HTTP_DEBUG   gt_config_get_int("http/debug=0")
  105.26 +
  105.27 +#define HTTP_MAX_PERUSER_UPLOAD_CONNS \
  105.28 +                     gt_config_get_int("http/max_peruser_upload_connections=5")
  105.29 +
  105.30 +/*****************************************************************************/
  105.31 +
  105.32 +struct gt_source;
  105.33 +
  105.34 +typedef enum gt_transfer_type
  105.35 +{
  105.36 +	GT_TRANSFER_UPLOAD,
  105.37 +	GT_TRANSFER_DOWNLOAD,
  105.38 +} GtTransferType;
  105.39 +
  105.40 +typedef void (*GtTransferCB) (Chunk *chunk, unsigned char *data, size_t len);
  105.41 +
  105.42 +typedef struct gt_transfer
  105.43 +{
  105.44 +	TCPC          *c;                  /* see gt_transfer_ref */
  105.45 +	Chunk         *chunk;              /* ...                 */
  105.46 +	Source        *source;             /* source for this transfer */
  105.47 +
  105.48 +	GtTransferCB  callback;            /* where to report progress
  105.49 +	                                    * see gt_download and gt_upload in
  105.50 +	                                    * xfer.c */
  105.51 +	GtTransferType type;               /* which direction this transfer is in */
  105.52 +
  105.53 +	Dataset       *header;             /* HTTP headers */
  105.54 +	int            code;               /* HTTP status code last seen */
  105.55 +
  105.56 +	in_addr_t      ip;                 /* address of the user who is either
  105.57 +	                                    * leeching our node or is being leeched
  105.58 +	                                    * by it */
  105.59 +	in_port_t      port;               /* used only by the client routines */
  105.60 +
  105.61 +	char          *command;            /* request operator (GET, PUSH, ...) */
  105.62 +	char          *request;            /* exact request operand, url encoded */
  105.63 +	char          *version;            /* HTTP version resembling HTTP/1.1 */
  105.64 +	char          *request_path;       /* url decoded copy of request */
  105.65 +
  105.66 +	char          *content_type;       /* Content-Type: send from server or
  105.67 +	                                    * to client */
  105.68 +	char          *content_urns;       /* X-Gnutella-Content-URN: if requested
  105.69 +	                                    * by urn */
  105.70 +	BOOL           transmitted_hdrs;   /* transfer completed reading HTTP
  105.71 +	                                    * headers */
  105.72 +	off_t          remaining_len;      /* size of content remaining to be
  105.73 +	                                    * read */
  105.74 +
  105.75 +	off_t          start;              /* range begin */
  105.76 +	off_t          stop;               /* range stop.  0 is an exception which
  105.77 +	                                    * will be translated to the total file
  105.78 +	                                    * size as soon as known */
  105.79 +	timer_id       header_timer;       /* timeout for reading complete header */
  105.80 +
  105.81 +	timer_id       detach_timer;       /* fires to detach xfer and chunk */
  105.82 +	SourceStatus   detach_status;      /* next status if detach_timer hits */
  105.83 +	char          *detach_msgtxt;      /* next msg if detach_timer hits */
  105.84 +
  105.85 +	/* used by the server routines for uploading */
  105.86 +	FILE          *f;                  /* used only by the server routines */
  105.87 +	Share         *share_authd;        /* hack for the new sharing
  105.88 +	                                    * interface...ugh */
  105.89 +
  105.90 +	char          *open_path;          /* path opened by the server */
  105.91 +	off_t          open_path_size;     /* size of the file on disk described
  105.92 +	                                    * by open_path */
  105.93 +	char          *hash;               /* openft's hash to deliever to the
  105.94 +	                                    * interface protocol when we register
  105.95 +	                                    * this upload */
  105.96 +	unsigned int   queue_pos;          /* position in upload queue */
  105.97 +	unsigned int   queue_ttl;          /* size of queue */
  105.98 +
  105.99 +	unsigned char  shared : 1;         /* see interface proto docs */
 105.100 +} GtTransfer;
 105.101 +
 105.102 +/*****************************************************************************/
 105.103 +
 105.104 +#include "gt_http_client.h"
 105.105 +#include "gt_http_server.h"
 105.106 +
 105.107 +/*****************************************************************************/
 105.108 +
 105.109 +GtTransfer  *gt_transfer_new    (GtTransferType type, Source *source,
 105.110 +                                 in_addr_t ip, in_port_t port,
 105.111 +                                 off_t start, off_t stop);
 105.112 +void         gt_transfer_close  (GtTransfer *xfer, BOOL force_close);
 105.113 +void         gt_transfer_status (GtTransfer *xfer, SourceStatus status,
 105.114 +                                 char *text);
 105.115 +
 105.116 +void         gt_transfer_write  (GtTransfer *xfer, Chunk *chunk,
 105.117 +                                 unsigned char *segment, size_t len);
 105.118 +
 105.119 +/*****************************************************************************/
 105.120 +
 105.121 +void               gt_transfer_set_tcpc   (GtTransfer *xfer, TCPC *c);
 105.122 +void               gt_transfer_set_chunk  (GtTransfer *xfer, Chunk *chunk);
 105.123 +
 105.124 +TCPC              *gt_transfer_get_tcpc   (GtTransfer *xfer);
 105.125 +Chunk             *gt_transfer_get_chunk  (GtTransfer *xfer);
 105.126 +
 105.127 +struct gt_source  *gt_transfer_get_source (GtTransfer *xfer);
 105.128 +void               gt_transfer_set_length (GtTransfer *xfer, Chunk *chunk);
 105.129 +
 105.130 +/*****************************************************************************/
 105.131 +
 105.132 +void         gt_http_connection_close  (GtTransferType type, TCPC *c,
 105.133 +                                        BOOL force_close);
 105.134 +TCPC        *gt_http_connection_open   (GtTransferType type, in_addr_t ip,
 105.135 +                                        in_port_t port);
 105.136 +TCPC        *gt_http_connection_lookup (GtTransferType type,
 105.137 +                                        in_addr_t ip, in_port_t port);
 105.138 +size_t       gt_http_connection_length (GtTransferType type, in_addr_t ip);
 105.139 +
 105.140 +/*****************************************************************************/
 105.141 +
 105.142 +BOOL  gt_transfer_set_request  (GtTransfer *xfer, char *request);
 105.143 +FILE *gt_transfer_open_request (GtTransfer *xfer, int *code);
 105.144 +
 105.145 +/*****************************************************************************/
 105.146 +
 105.147 +void gt_download (Chunk *chunk, unsigned char *segment, size_t len);
 105.148 +void gt_upload   (Chunk *chunk, unsigned char *segment, size_t len);
 105.149 +
 105.150 +/*****************************************************************************/
 105.151 +
 105.152 +void gt_download_cancel (Chunk *chunk, void *data);
 105.153 +void gt_upload_cancel   (Chunk *chunk, void *data);
 105.154 +
 105.155 +/*****************************************************************************/
 105.156 +
 105.157 +BOOL gt_chunk_suspend (Chunk *chunk, Transfer *transfer, void *data);
 105.158 +BOOL gt_chunk_resume  (Chunk *chunk, Transfer *transfer, void *data);
 105.159 +
 105.160 +/*****************************************************************************/
 105.161 +
 105.162 +#endif /* GIFT_GT_XFER_OBJ_H_ */
   106.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   106.2 +++ b/src/http_request.c	Sat Feb 20 21:18:28 2010 -0800
   106.3 @@ -0,0 +1,687 @@
   106.4 +/*
   106.5 + * $Id: http_request.c,v 1.25 2005/01/04 15:03:41 mkern Exp $
   106.6 + *
   106.7 + * Copyright (C) 2001-2003 giFT project (gift.sourceforge.net)
   106.8 + *
   106.9 + * This program is free software; you can redistribute it and/or modify it
  106.10 + * under the terms of the GNU General Public License as published by the
  106.11 + * Free Software Foundation; either version 2, or (at your option) any
  106.12 + * later version.
  106.13 + *
  106.14 + * This program is distributed in the hope that it will be useful, but
  106.15 + * WITHOUT ANY WARRANTY; without even the implied warranty of
  106.16 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
  106.17 + * General Public License for more details.
  106.18 + */
  106.19 +
  106.20 +#include "gt_gnutella.h"
  106.21 +#include "gt_version.h"
  106.22 +
  106.23 +#include "gt_accept.h"
  106.24 +#include "gt_web_cache.h"
  106.25 +
  106.26 +#include "http_request.h"
  106.27 +
  106.28 +/*****************************************************************************/
  106.29 +
  106.30 +#define MAX_REDIRECTS      (5)
  106.31 +
  106.32 +/*****************************************************************************/
  106.33 +
  106.34 +static void decode_chunked_data (int fd, input_id id, TCPC *c);
  106.35 +static void read_chunked_header (int fd, input_id id, TCPC *c);
  106.36 +
  106.37 +/*****************************************************************************/
  106.38 +
  106.39 +/*
  106.40 + * Dummy callbacks
  106.41 + */
  106.42 +
  106.43 +static void dummy_close (HttpRequest *r, int code)
  106.44 +{
  106.45 +	return;
  106.46 +}
  106.47 +
  106.48 +static BOOL dummy_recv (HttpRequest *r, char *d, size_t l)
  106.49 +{
  106.50 +	return TRUE;
  106.51 +}
  106.52 +
  106.53 +static BOOL dummy_add_header (HttpRequest *r, Dataset **d)
  106.54 +{
  106.55 +	return TRUE;
  106.56 +}
  106.57 +
  106.58 +static BOOL dummy_redirect (HttpRequest *r, const char *h, const char *p)
  106.59 +{
  106.60 +	return TRUE;
  106.61 +}
  106.62 +
  106.63 +/*****************************************************************************/
  106.64 +
  106.65 +BOOL gt_http_url_parse (char *value, char **r_host, char **r_path)
  106.66 +{
  106.67 +	char *host_name;
  106.68 +
  106.69 +	if (r_host)
  106.70 +		*r_host = NULL;
  106.71 +	if (r_path)
  106.72 +		*r_path = NULL;
  106.73 +
  106.74 +	string_sep (&value, "http://");
  106.75 +
  106.76 +	/* divide the url in two parts */
  106.77 +	host_name = string_sep (&value, "/");
  106.78 +
  106.79 +	if (r_host)
  106.80 +		*r_host = host_name;
  106.81 +
  106.82 +	if (r_path)
  106.83 +		*r_path = STRING_NOTNULL (value);
  106.84 +
  106.85 +	if (!host_name || host_name[0] == 0)
  106.86 +		return FALSE;
  106.87 +
  106.88 +	return TRUE;
  106.89 +}
  106.90 +
  106.91 +static void setup_dummy_functbl (HttpRequest *r)
  106.92 +{
  106.93 +	r->close_req_func  = dummy_close;
  106.94 +	r->recv_func       = dummy_recv;
  106.95 +	r->add_header_func = dummy_add_header;
  106.96 +	r->redirect_func   = dummy_redirect;
  106.97 +}
  106.98 +
  106.99 +HttpRequest *gt_http_request_new (const char *url, const char *request)
 106.100 +{
 106.101 +	HttpRequest *req;
 106.102 +	char        *dup;
 106.103 +	char        *host;
 106.104 +	char        *path;
 106.105 +
 106.106 +	if (!(dup = STRDUP (url)))
 106.107 +		return NULL;
 106.108 +
 106.109 +	if (!gt_http_url_parse (dup, &host, &path) ||
 106.110 +		!(req = MALLOC (sizeof (HttpRequest))))
 106.111 +	{
 106.112 +		free (dup);
 106.113 +		return NULL;
 106.114 +	}
 106.115 +
 106.116 +	req->host      = STRDUP (host);
 106.117 +	req->path      = STRDUP (path);
 106.118 +	req->request   = STRDUP (request);
 106.119 +	req->timeout   = 0;
 106.120 +	req->redirects = 0;
 106.121 +	req->headers   = NULL;
 106.122 +
 106.123 +	/* setup functbl */
 106.124 +	setup_dummy_functbl (req);
 106.125 +
 106.126 +	free (dup);
 106.127 +
 106.128 +	return req;
 106.129 +}
 106.130 +
 106.131 +static void gt_http_request_free (HttpRequest *req)
 106.132 +{
 106.133 +	if (!req)
 106.134 +		return;
 106.135 +
 106.136 +	dataset_clear (req->headers);
 106.137 +
 106.138 +	free (req->host);
 106.139 +	free (req->path);
 106.140 +	free (req->request);
 106.141 +
 106.142 +	free (req);
 106.143 +}
 106.144 +
 106.145 +void gt_http_request_close (HttpRequest *req, int error_code)
 106.146 +{
 106.147 +	/* notify the callback */
 106.148 +	req->close_req_func (req, error_code);
 106.149 +
 106.150 +	if (req->c)
 106.151 +		tcp_close (req->c);
 106.152 +
 106.153 +	timer_remove_zero (&req->timeout);
 106.154 +
 106.155 +	gt_http_request_free (req);
 106.156 +}
 106.157 +
 106.158 +/*****************************************************************************/
 106.159 +
 106.160 +static BOOL request_timeout (HttpRequest *req)
 106.161 +{
 106.162 +	GT->DBGFN (GT, "request to %s timed out", req->host);
 106.163 +	gt_http_request_close (req, -1);
 106.164 +	return FALSE;
 106.165 +}
 106.166 +
 106.167 +void gt_http_request_set_timeout (HttpRequest *req, time_t time)
 106.168 +{
 106.169 +	if (!req)
 106.170 +		return;
 106.171 +
 106.172 +	if (req->timeout)
 106.173 +		timer_remove (req->timeout);
 106.174 +
 106.175 +	req->timeout = timer_add (time, (TimerCallback)request_timeout, req);
 106.176 +}
 106.177 +
 106.178 +void gt_http_request_set_proxy (HttpRequest *req, const char *proxy)
 106.179 +{
 106.180 +	free (req->proxy);
 106.181 +	req->proxy = NULL;
 106.182 +
 106.183 +	if (!proxy)
 106.184 +		return;
 106.185 +
 106.186 +	req->proxy = STRDUP (proxy);
 106.187 +}
 106.188 +
 106.189 +void gt_http_request_set_conn (HttpRequest *req, TCPC *c)
 106.190 +{
 106.191 +	assert (c->udata == NULL);
 106.192 +	assert (req->c == NULL);
 106.193 +
 106.194 +	req->c = c;
 106.195 +	c->udata = req;
 106.196 +}
 106.197 +
 106.198 +void gt_http_request_set_max_len (HttpRequest *req, size_t max_len)
 106.199 +{
 106.200 +	req->max_len = max_len;
 106.201 +}
 106.202 +
 106.203 +/*****************************************************************************/
 106.204 +
 106.205 +static BOOL write_data (HttpRequest *req, char *data, size_t len)
 106.206 +{
 106.207 +	if (!req)
 106.208 +		return FALSE;
 106.209 +
 106.210 +	req->recvd_len += len;
 106.211 +
 106.212 +	/* check if we overflowed the max length the user wants to receive */
 106.213 +	if (req->max_len > 0 && req->recvd_len > req->max_len)
 106.214 +	{
 106.215 +		GT->DBGFN (GT, "%s sent %lu bytes overflowing max length of %lu",
 106.216 +		           req->host, req->recvd_len, req->max_len);
 106.217 +		gt_http_request_close (req, -1);
 106.218 +		return FALSE;
 106.219 +	}
 106.220 +
 106.221 +	/* send the data to the listener */
 106.222 +	if (req->recv_func (req, data, len) == FALSE)
 106.223 +	{
 106.224 +		gt_http_request_close (req, -1);
 106.225 +		return FALSE;
 106.226 +	}
 106.227 +
 106.228 +	return TRUE;
 106.229 +}
 106.230 +
 106.231 +/*****************************************************************************/
 106.232 +
 106.233 +static void write_header (ds_data_t *key, ds_data_t *value, String *s)
 106.234 +{
 106.235 +	char *header = key->data;
 106.236 +	char *field  = value->data;
 106.237 +
 106.238 +	string_appendf (s, "%s: %s\r\n", header, field);
 106.239 +}
 106.240 +
 106.241 +static int http_send (TCPC *c, char *command, char *request,
 106.242 +                      Dataset *headers)
 106.243 +{
 106.244 +	String      *s;
 106.245 +	int          ret;
 106.246 +
 106.247 +	if (!command || !request)
 106.248 +		return -1;
 106.249 +
 106.250 +	if (!(s = string_new (NULL, 0, 0, TRUE)))
 106.251 +		return -1;
 106.252 +
 106.253 +	string_appendf (s, "%s %s HTTP/1.1\r\n", command, request);
 106.254 +
 106.255 +	dataset_foreach (headers, DS_FOREACH(write_header), s);
 106.256 +	string_append (s, "\r\n");
 106.257 +
 106.258 +	GT->DBGSOCK (GT, c, "<http_request.c> sending:\n%s", s->str);
 106.259 +
 106.260 +	ret = tcp_send (c, s->str, s->len);
 106.261 +	string_free (s);
 106.262 +
 106.263 +	return ret;
 106.264 +}
 106.265 +
 106.266 +static HttpRequest *get_request (TCPC *c)
 106.267 +{
 106.268 +	return c->udata;
 106.269 +}
 106.270 +
 106.271 +/*****************************************************************************/
 106.272 +
 106.273 +static void decode_chunked_data (int fd, input_id id, TCPC *c)
 106.274 +{
 106.275 +	HttpRequest *req;
 106.276 +	FDBuf       *buf;
 106.277 +	char        *data;
 106.278 +	int          data_len = 0;
 106.279 +	int          n;
 106.280 +
 106.281 +	req = get_request (c);
 106.282 +
 106.283 +	if (!req->size)
 106.284 +	{
 106.285 +		gt_http_request_close (req, 200);
 106.286 +		return;
 106.287 +	}
 106.288 +
 106.289 +	buf = tcp_readbuf (c);
 106.290 +
 106.291 +	if ((n = fdbuf_fill (buf, req->size)) < 0)
 106.292 +	{
 106.293 +		GT->DBGFN (GT, "error on host %s: %s", req->host, GIFT_NETERROR ());
 106.294 +		gt_http_request_close (req, -1);
 106.295 +		return;
 106.296 +	}
 106.297 +
 106.298 +	if (gt_fdbuf_full (buf))
 106.299 +	{
 106.300 +		gt_http_request_close (req, -1);
 106.301 +		return;
 106.302 +	}
 106.303 +
 106.304 +	if (n > 0)
 106.305 +		return;
 106.306 +
 106.307 +	data = fdbuf_data (buf, &data_len);
 106.308 +	fdbuf_release (buf);
 106.309 +
 106.310 +	if (!write_data (req, data, data_len))
 106.311 +		return;
 106.312 +
 106.313 +	input_remove (id);
 106.314 +	input_add (fd, c, INPUT_READ,
 106.315 +	           (InputCallback)read_chunked_header, TIMEOUT_DEF);
 106.316 +}
 106.317 +
 106.318 +static void read_chunked_header (int fd, input_id id, TCPC *c)
 106.319 +{
 106.320 +	HttpRequest *req;
 106.321 +	FDBuf       *buf;
 106.322 +	char        *response;
 106.323 +	int          n;
 106.324 +
 106.325 +	req = get_request (c);
 106.326 +	buf = tcp_readbuf (c);
 106.327 +
 106.328 +	if ((n = fdbuf_delim (buf, "\n")) < 0)
 106.329 +	{
 106.330 +		GT->DBGFN (GT, "error on %s: %s", req->host, GIFT_NETERROR ());
 106.331 +		gt_http_request_close (req, -1);
 106.332 +		return;
 106.333 +	}
 106.334 +
 106.335 +	if (gt_fdbuf_full (buf))
 106.336 +	{
 106.337 +		gt_http_request_close (req, -1);
 106.338 +		return;
 106.339 +	}
 106.340 +
 106.341 +	if (n > 0)
 106.342 +		return;
 106.343 +
 106.344 +	response = fdbuf_data (buf, NULL);
 106.345 +	fdbuf_release (buf);
 106.346 +
 106.347 +	/* read the chunk size, its a hexadecimal integer */
 106.348 +	req->size = strtoul (response, NULL, 16);
 106.349 +	GT->DBGFN (GT, "server sent chunk size of %lu", req->size);
 106.350 +
 106.351 +	if (req->size == ULONG_MAX)
 106.352 +	{
 106.353 +		GT->DBGFN (GT, "overflow reading chunk size: %s", GIFT_STRERROR ());
 106.354 +		gt_http_request_close (req, -1);
 106.355 +		return;
 106.356 +	}
 106.357 +
 106.358 +	if (req->size == 0)
 106.359 +	{
 106.360 +		/* ok, done */
 106.361 +		if (!write_data (req, NULL, 0))
 106.362 +			return;
 106.363 +
 106.364 +		/* there could be a CRLF at the end. should we read it?
 106.365 +		 * To avoid screwing up persistent http, yes.. */
 106.366 +		gt_http_request_close (req, 200);
 106.367 +		return;
 106.368 +	}
 106.369 +
 106.370 +	input_remove (id);
 106.371 +	input_add (fd, c, INPUT_READ,
 106.372 +	           (InputCallback)decode_chunked_data, TIMEOUT_DEF);
 106.373 +}
 106.374 +
 106.375 +/* read the amount of data specified by Content-Length: */
 106.376 +static void read_file (int fd, input_id id, TCPC *c)
 106.377 +{
 106.378 +	HttpRequest   *req;
 106.379 +	FDBuf         *buf;
 106.380 +	int            n;
 106.381 +	size_t         len;
 106.382 +	unsigned char *data;
 106.383 +
 106.384 +	req = get_request (c);
 106.385 +
 106.386 +	if (!req->size)
 106.387 +	{
 106.388 +		gt_http_request_close (req, 200);
 106.389 +		return;
 106.390 +	}
 106.391 +
 106.392 +	buf = tcp_readbuf (c);
 106.393 +
 106.394 +	if ((n = fdbuf_fill (buf, req->size)) < 0)
 106.395 +	{
 106.396 +		GT->DBGFN (GT, "error from %s: %s", req->host, GIFT_NETERROR ());
 106.397 +		gt_http_request_close (req, -1);
 106.398 +		return;
 106.399 +	}
 106.400 +
 106.401 +	if (n > 0)
 106.402 +		return;
 106.403 +
 106.404 +	data = fdbuf_data (buf, &len);
 106.405 +	fdbuf_release (buf);
 106.406 +
 106.407 +	if (!write_data (req, data, len))
 106.408 +		return;
 106.409 +
 106.410 +	/*
 106.411 +	 * We've read all the data, the total length of the request being provided
 106.412 +	 * by fdbuf_fill().  Now send the closing notification to our callback.
 106.413 +	 */
 106.414 +	if (!write_data (req, NULL, 0))
 106.415 +		return;
 106.416 +
 106.417 +	/* success */
 106.418 +	gt_http_request_close (req, 200);
 106.419 +}
 106.420 +
 106.421 +/* callback to read when no Content-Length: header is provided */
 106.422 +static void read_until_eof (int fd, input_id id, TCPC *c)
 106.423 +{
 106.424 +	char          data[RW_BUFFER];
 106.425 +	int           n;
 106.426 +	HttpRequest  *req;
 106.427 +
 106.428 +	req = get_request (c);
 106.429 +
 106.430 +	if ((n = tcp_recv (c, data, sizeof (data) - 1)) < 0)
 106.431 +	{
 106.432 +		GT->DBGFN (GT, "error from %s: %s", req->host, GIFT_NETERROR());
 106.433 +		gt_http_request_close (req, -1);
 106.434 +		return;
 106.435 +	}
 106.436 +
 106.437 +	/* terminate the buffer */
 106.438 +	data[n] = 0;
 106.439 +
 106.440 +	if (n == 0)
 106.441 +	{
 106.442 +		/* signal to the listener that EOF was reached */
 106.443 +		if (!write_data (req, NULL, 0))
 106.444 +			return;
 106.445 +
 106.446 +		gt_http_request_close (req, 200);
 106.447 +		return;
 106.448 +	}
 106.449 +
 106.450 +	if (!write_data (req, data, n))
 106.451 +		return;
 106.452 +}
 106.453 +
 106.454 +static void reset_request (HttpRequest *req, const char *host,
 106.455 +                           const char *path)
 106.456 +{
 106.457 +	free (req->host);
 106.458 +	free (req->path);
 106.459 +	req->host = STRDUP (host);
 106.460 +	req->path = STRDUP (path);
 106.461 +
 106.462 +	dataset_clear (req->headers);
 106.463 +	req->headers = NULL;
 106.464 +}
 106.465 +
 106.466 +/*
 106.467 + * This will do a limited redirect on the same connection.
 106.468 + * One bug is it doesn't care if the Location header posts a different port,
 106.469 + */
 106.470 +static void handle_redirect (HttpRequest *req, int code)
 106.471 +{
 106.472 +	char *new_host;
 106.473 +	char *new_path;
 106.474 +	char *location;
 106.475 +
 106.476 +	/* make sure the Location: header points to the same host */
 106.477 +	location = dataset_lookupstr (req->headers, "location");
 106.478 +
 106.479 +	/* butchers Location header, but it will be freed soon anyway */
 106.480 +	if (!location ||
 106.481 +	    !gt_http_url_parse (location, &new_host, &new_path))
 106.482 +	{
 106.483 +		gt_http_request_close (req, code);
 106.484 +		return;
 106.485 +	}
 106.486 +
 106.487 +	assert (new_host != NULL);
 106.488 +
 106.489 +	if (++req->redirects >= MAX_REDIRECTS)
 106.490 +	{
 106.491 +		GT->DBGSOCK (GT, req->c, "Too many redirects");
 106.492 +		gt_http_request_close (req, code);
 106.493 +		return;
 106.494 +	}
 106.495 +
 106.496 +	/*
 106.497 +	 * Let the caller know we're redirecting so it can reset it's ancilliary
 106.498 +	 * data.
 106.499 +	 */
 106.500 +	if (req->redirect_func (req, new_host, new_path) == FALSE)
 106.501 +	{
 106.502 +		gt_http_request_close (req, code);
 106.503 +		return;
 106.504 +	}
 106.505 +
 106.506 +	/* setup the new request */
 106.507 +	reset_request (req, new_host, new_path);
 106.508 +
 106.509 +	/* restart the request */
 106.510 +	input_remove_all (req->c->fd);
 106.511 +	input_add (req->c->fd, req->c, INPUT_WRITE,
 106.512 +	           (InputCallback)gt_http_request_handle, TIMEOUT_DEF);
 106.513 +}
 106.514 +
 106.515 +static BOOL parse_server_response (char *reply, HttpRequest *req)
 106.516 +{
 106.517 +	char *response;
 106.518 +	int   code;    /* 200, 404, ... */
 106.519 +
 106.520 +	response = string_sep (&reply, "\r\n");
 106.521 +
 106.522 +	if (!response)
 106.523 +		return FALSE;
 106.524 +
 106.525 +	/*    */     string_sep (&response, " ");  /* shift past HTTP/1.1 */
 106.526 +	code = ATOI (string_sep (&response, " ")); /* shift past 200 */
 106.527 +
 106.528 +	/* parse the headers */
 106.529 +	gt_http_header_parse (reply, &req->headers);
 106.530 +
 106.531 +	if (code >= 200 && code <= 299)
 106.532 +		return TRUE;
 106.533 +
 106.534 +	/* redirection */
 106.535 +	if (code >= 300 && code <= 399)
 106.536 +	{
 106.537 +		handle_redirect (req, code);
 106.538 +		return FALSE; /* stop this request */
 106.539 +	}
 106.540 +
 106.541 +	/* request error: could blacklist the server in recv_callback */
 106.542 +	GT->DBGFN (GT, "error parsing response from %s, closing", req->host);
 106.543 +	gt_http_request_close (req, code);
 106.544 +
 106.545 +	return FALSE;
 106.546 +}
 106.547 +
 106.548 +static void read_headers (int fd, input_id id, TCPC *c)
 106.549 +{
 106.550 +	HttpRequest *req;
 106.551 +	FDBuf       *buf;
 106.552 +	char        *response;
 106.553 +	size_t       response_len = 0;
 106.554 +	char        *encoding;
 106.555 +	char        *len_str;
 106.556 +	int          n;
 106.557 +
 106.558 +	req = get_request (c);
 106.559 +	buf = tcp_readbuf (c);
 106.560 +
 106.561 +	if ((n = fdbuf_delim (buf, "\n")) < 0)
 106.562 +	{
 106.563 +		GT->DBGFN (GT, "error reading from %s: %s", net_peer_ip (c->fd),
 106.564 +		           GIFT_NETERROR ());
 106.565 +		gt_http_request_close (req, -1);
 106.566 +		return;
 106.567 +	}
 106.568 +
 106.569 +	if (gt_fdbuf_full (buf))
 106.570 +	{
 106.571 +		gt_http_request_close (req, -1);
 106.572 +		return;
 106.573 +	}
 106.574 +
 106.575 +	if (n > 0)
 106.576 +		return;
 106.577 +
 106.578 +	response = fdbuf_data (buf, &response_len);
 106.579 +
 106.580 +	if (response_len >= req->max_len)
 106.581 +	{
 106.582 +		GT->DBGFN (GT, "headers too large(%lu)", (long)response_len);
 106.583 +		gt_http_request_close (req, -1);
 106.584 +	}
 106.585 +
 106.586 +	if (!gt_http_header_terminated (response, response_len))
 106.587 +		return;
 106.588 +
 106.589 +	fdbuf_release (buf);
 106.590 +	GT->DBGFN (GT, "response=\n%s", response);
 106.591 +
 106.592 +	if (!parse_server_response (response, req))
 106.593 +		return;
 106.594 +
 106.595 +	input_remove (id);
 106.596 +
 106.597 +	encoding = dataset_lookupstr (req->headers, "transfer-encoding");
 106.598 +
 106.599 +	if (encoding && !strcasecmp (encoding, "chunked"))
 106.600 +	{
 106.601 +		input_add (fd, c, INPUT_READ,
 106.602 +		           (InputCallback)read_chunked_header, TIMEOUT_DEF);
 106.603 +		return;
 106.604 +	}
 106.605 +
 106.606 +	if (!(len_str = dataset_lookupstr (req->headers, "content-length")))
 106.607 +	{
 106.608 +		GT->warn (GT, "no Content-Length header from %s", req->host);
 106.609 +		input_add (fd, c, INPUT_READ,
 106.610 +		           (InputCallback)read_until_eof, TIMEOUT_DEF);
 106.611 +		return;
 106.612 +	}
 106.613 +
 106.614 +	req->size = ATOUL (len_str);
 106.615 +
 106.616 +	if (req->max_len > 0 && req->size >= req->max_len)
 106.617 +	{
 106.618 +		GT->DBGFN (GT, "bad size (%s) in content length field for %s",
 106.619 +		           len_str, req->host);
 106.620 +		gt_http_request_close (req, -1);
 106.621 +		return;
 106.622 +	}
 106.623 +
 106.624 +	input_add (fd, c, INPUT_READ,
 106.625 +	           (InputCallback)read_file, TIMEOUT_DEF);
 106.626 +}
 106.627 +
 106.628 +/*
 106.629 + * Determine the part after the GET.  If proxied, this need to be a complete
 106.630 + * URL, and otherwise should be a simple path.
 106.631 + */
 106.632 +static void append_request_line (String *s, HttpRequest *req)
 106.633 +{
 106.634 +	if (req->proxy)
 106.635 +		string_appendf (s, "http://%s", req->host);
 106.636 +
 106.637 +	string_appendf (s, "/%s", STRING_NOTNULL(req->path));
 106.638 +}
 106.639 +
 106.640 +static int send_request (HttpRequest *req)
 106.641 +{
 106.642 +	Dataset *headers = NULL;
 106.643 +	String  *s;
 106.644 +	int      ret;
 106.645 +
 106.646 +	if (!(s = string_new (NULL, 0, 0, TRUE)))
 106.647 +		return -1;
 106.648 +
 106.649 +	append_request_line (s, req);
 106.650 +
 106.651 +	if (!string_isempty (req->request))
 106.652 +		string_appendf (s, "?%s", req->request);
 106.653 +
 106.654 +	dataset_insertstr (&headers, "Host", req->host); /* required by HTTP/1.1 */
 106.655 +	dataset_insertstr (&headers, "User-Agent", gt_version ());
 106.656 +
 106.657 +	if (req->add_header_func (req, &headers) == FALSE)
 106.658 +	{
 106.659 +		/* Hmm, this is our error, what should the error code be */
 106.660 +		gt_http_request_close (req, -1);
 106.661 +		dataset_clear (headers);
 106.662 +		string_free (s);
 106.663 +		return -1;
 106.664 +	}
 106.665 +
 106.666 +	ret = http_send (req->c, "GET", s->str, headers);
 106.667 +
 106.668 +	dataset_clear (headers);
 106.669 +	string_free (s);
 106.670 +
 106.671 +	return ret;
 106.672 +}
 106.673 +
 106.674 +void gt_http_request_handle (int fd, input_id id, TCPC *c)
 106.675 +{
 106.676 +	HttpRequest *req;
 106.677 +
 106.678 +	req = get_request (c);
 106.679 +
 106.680 +	if (send_request (req) <= 0)
 106.681 +	{
 106.682 +		GT->DBGFN (GT, "send failed: %s", GIFT_NETERROR());
 106.683 +		gt_http_request_close (req, -1);
 106.684 +		return;
 106.685 +	}
 106.686 +
 106.687 +	input_remove (id);
 106.688 +	input_add (fd, c, INPUT_READ,
 106.689 +	           (InputCallback)read_headers, TIMEOUT_DEF);
 106.690 +}
   107.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   107.2 +++ b/src/http_request.h	Sat Feb 20 21:18:28 2010 -0800
   107.3 @@ -0,0 +1,87 @@
   107.4 +/*
   107.5 + * $Id: http_request.h,v 1.11 2004/03/24 06:20:48 hipnod Exp $
   107.6 + *
   107.7 + * Copyright (C) 2001-2003 giFT project (gift.sourceforge.net)
   107.8 + *
   107.9 + * This program is free software; you can redistribute it and/or modify it
  107.10 + * under the terms of the GNU General Public License as published by the
  107.11 + * Free Software Foundation; either version 2, or (at your option) any
  107.12 + * later version.
  107.13 + *
  107.14 + * This program is distributed in the hope that it will be useful, but
  107.15 + * WITHOUT ANY WARRANTY; without even the implied warranty of
  107.16 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
  107.17 + * General Public License for more details.
  107.18 + */
  107.19 +
  107.20 +#ifndef GIFT_GT_HTTP_REQUEST_H_
  107.21 +#define GIFT_GT_HTTP_REQUEST_H_
  107.22 +
  107.23 +/*****************************************************************************/
  107.24 +
  107.25 +struct gt_http_request;
  107.26 +
  107.27 +/*****************************************************************************/
  107.28 +
  107.29 +typedef void (*HttpCloseFunc)     (struct gt_http_request *req, int error_code);
  107.30 +
  107.31 +typedef BOOL (*HttpReceiveFunc)   (struct gt_http_request *req, char *data,
  107.32 +                                   size_t len);
  107.33 +typedef BOOL (*HttpAddHeaderFunc) (struct gt_http_request *req,
  107.34 +                                   Dataset **headers);
  107.35 +typedef BOOL (*HttpRedirectFunc)  (struct gt_http_request *req,
  107.36 +                                   const char *host, const char *path);
  107.37 +
  107.38 +/*****************************************************************************/
  107.39 +
  107.40 +typedef struct gt_http_request
  107.41 +{
  107.42 +	char             *host;
  107.43 +	char             *path;
  107.44 +	char             *request;
  107.45 +	char             *proxy;
  107.46 +
  107.47 +	TCPC             *c;
  107.48 +	Dataset          *headers;
  107.49 +	timer_id          timeout;
  107.50 +
  107.51 +	/* amount of data to expect:
  107.52 +	 * (1) in the chunk, when Transfer-Encoding: Chunked is used
  107.53 +	 * (2) in the body, from the Content-Length: header */
  107.54 +	unsigned long     size;
  107.55 +	size_t            max_len;
  107.56 +	size_t            recvd_len;
  107.57 +
  107.58 +	/* number of redirects tried already */
  107.59 +	int               redirects;
  107.60 +
  107.61 +	HttpReceiveFunc   recv_func;
  107.62 +	HttpAddHeaderFunc add_header_func;
  107.63 +	HttpCloseFunc     close_req_func;
  107.64 +	HttpRedirectFunc  redirect_func;
  107.65 +	void             *data;
  107.66 +
  107.67 +} HttpRequest;
  107.68 +
  107.69 +/*****************************************************************************/
  107.70 +
  107.71 +HttpRequest    *gt_http_request_new         (const char *url,
  107.72 +                                             const char *request);
  107.73 +void            gt_http_request_close       (HttpRequest *req, int code);
  107.74 +BOOL            gt_http_url_parse           (char *url, char **r_host,
  107.75 +                                             char **r_path);
  107.76 +
  107.77 +/*****************************************************************************/
  107.78 +
  107.79 +void            gt_http_request_set_conn    (HttpRequest *req, TCPC *c);
  107.80 +void            gt_http_request_set_proxy   (HttpRequest *req, const char *proxy);
  107.81 +void            gt_http_request_set_timeout (HttpRequest *req, time_t interval);
  107.82 +void            gt_http_request_set_max_len (HttpRequest *req, size_t max_len);
  107.83 +
  107.84 +/*****************************************************************************/
  107.85 +
  107.86 +void            gt_http_request_handle      (int fd, input_id id, TCPC *c);
  107.87 +
  107.88 +/*****************************************************************************/
  107.89 +
  107.90 +#endif /* GIFT_GT_HTTP_REQUEST_H_ */
   108.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   108.2 +++ b/src/io/Makefile.am	Sat Feb 20 21:18:28 2010 -0800
   108.3 @@ -0,0 +1,24 @@
   108.4 +# $Id: Makefile.am,v 1.5 2004/01/29 11:36:03 hipnod Exp $
   108.5 +
   108.6 +AM_CFLAGS = \
   108.7 +	$(GNUTELLA_CFLAGS)
   108.8 +
   108.9 +INCLUDES = \
  108.10 +	-I$(top_srcdir)/src
  108.11 +
  108.12 +noinst_LTLIBRARIES = \
  108.13 +	libgt_io.la
  108.14 +
  108.15 +libgt_io_la_SOURCES = \
  108.16 +	io_buf.c          io_buf.h \
  108.17 +	rx_inflate.c      rx_inflate.h \
  108.18 +	rx_layer.c        rx_layer.h \
  108.19 +	rx_link.c         rx_link.h \
  108.20 +	rx_packet.c       rx_packet.h \
  108.21 +	rx_stack.c        rx_stack.h \
  108.22 +	tx_layer.c        tx_layer.h \
  108.23 +	tx_link.c         tx_link.h \
  108.24 +	tx_deflate.c \
  108.25 +	tx_packet.c \
  108.26 +	tx_stack.c        tx_stack.h
  108.27 +
   109.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   109.2 +++ b/src/io/Makefile.in	Sat Feb 20 21:18:28 2010 -0800
   109.3 @@ -0,0 +1,463 @@
   109.4 +# Makefile.in generated by automake 1.7.9 from Makefile.am.
   109.5 +# @configure_input@
   109.6 +
   109.7 +# Copyright 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003
   109.8 +# Free Software Foundation, Inc.
   109.9 +# This Makefile.in is free software; the Free Software Foundation
  109.10 +# gives unlimited permission to copy and/or distribute it,
  109.11 +# with or without modifications, as long as this notice is preserved.
  109.12 +
  109.13 +# This program is distributed in the hope that it will be useful,
  109.14 +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
  109.15 +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
  109.16 +# PARTICULAR PURPOSE.
  109.17 +
  109.18 +@SET_MAKE@
  109.19 +
  109.20 +# $Id: Makefile.am,v 1.5 2004/01/29 11:36:03 hipnod Exp $
  109.21 +
  109.22 +srcdir = @srcdir@
  109.23 +top_srcdir = @top_srcdir@
  109.24 +VPATH = @srcdir@
  109.25 +pkgdatadir = $(datadir)/@PACKAGE@
  109.26 +pkglibdir = $(libdir)/@PACKAGE@
  109.27 +pkgincludedir = $(includedir)/@PACKAGE@
  109.28 +top_builddir = ../..
  109.29 +
  109.30 +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
  109.31 +INSTALL = @INSTALL@
  109.32 +install_sh_DATA = $(install_sh) -c -m 644
  109.33 +install_sh_PROGRAM = $(install_sh) -c
  109.34 +install_sh_SCRIPT = $(install_sh) -c
  109.35 +INSTALL_HEADER = $(INSTALL_DATA)
  109.36 +transform = $(program_transform_name)
  109.37 +NORMAL_INSTALL = :
  109.38 +PRE_INSTALL = :
  109.39 +POST_INSTALL = :
  109.40 +NORMAL_UNINSTALL = :
  109.41 +PRE_UNINSTALL = :
  109.42 +POST_UNINSTALL = :
  109.43 +host_triplet = @host@
  109.44 +ACLOCAL = @ACLOCAL@
  109.45 +AMDEP_FALSE = @AMDEP_FALSE@
  109.46 +AMDEP_TRUE = @AMDEP_TRUE@
  109.47 +AMTAR = @AMTAR@
  109.48 +AR = @AR@
  109.49 +AUTOCONF = @AUTOCONF@
  109.50 +AUTOHEADER = @AUTOHEADER@
  109.51 +AUTOMAKE = @AUTOMAKE@
  109.52 +AWK = @AWK@
  109.53 +CC = @CC@
  109.54 +CCDEPMODE = @CCDEPMODE@
  109.55 +CFLAGS = @CFLAGS@
  109.56 +CPP = @CPP@
  109.57 +CPPFLAGS = @CPPFLAGS@
  109.58 +CXX = @CXX@
  109.59 +CXXCPP = @CXXCPP@
  109.60 +CXXDEPMODE = @CXXDEPMODE@
  109.61 +CXXFLAGS = @CXXFLAGS@
  109.62 +CYGPATH_W = @CYGPATH_W@
  109.63 +DEFS = @DEFS@
  109.64 +DEPDIR = @DEPDIR@
  109.65 +ECHO = @ECHO@
  109.66 +ECHO_C = @ECHO_C@
  109.67 +ECHO_N = @ECHO_N@
  109.68 +ECHO_T = @ECHO_T@
  109.69 +EGREP = @EGREP@
  109.70 +EXEEXT = @EXEEXT@
  109.71 +F77 = @F77@
  109.72 +FFLAGS = @FFLAGS@
  109.73 +GNUTELLA_CFLAGS = @GNUTELLA_CFLAGS@
  109.74 +GNUTELLA_LIBS = @GNUTELLA_LIBS@
  109.75 +INSTALL_DATA = @INSTALL_DATA@
  109.76 +INSTALL_PROGRAM = @INSTALL_PROGRAM@
  109.77 +INSTALL_SCRIPT = @INSTALL_SCRIPT@
  109.78 +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
  109.79 +LDFLAGS = @LDFLAGS@
  109.80 +LIBOBJS = @LIBOBJS@
  109.81 +LIBS = @LIBS@
  109.82 +LIBTOOL = @LIBTOOL@
  109.83 +LIBXML2_CFLAGS = @LIBXML2_CFLAGS@
  109.84 +LIBXML2_LIBS = @LIBXML2_LIBS@
  109.85 +LN_S = @LN_S@
  109.86 +LTLIBOBJS = @LTLIBOBJS@
  109.87 +MAINT = @MAINT@
  109.88 +MAINTAINER_MODE_FALSE = @MAINTAINER_MODE_FALSE@
  109.89 +MAINTAINER_MODE_TRUE = @MAINTAINER_MODE_TRUE@
  109.90 +MAKEINFO = @MAKEINFO@
  109.91 +OBJEXT = @OBJEXT@
  109.92 +PACKAGE = @PACKAGE@
  109.93 +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
  109.94 +PACKAGE_NAME = @PACKAGE_NAME@
  109.95 +PACKAGE_STRING = @PACKAGE_STRING@
  109.96 +PACKAGE_TARNAME = @PACKAGE_TARNAME@
  109.97 +PACKAGE_VERSION = @PACKAGE_VERSION@
  109.98 +PATH_SEPARATOR = @PATH_SEPARATOR@
  109.99 +PKG_CONFIG = @PKG_CONFIG@
 109.100 +PLUGIN_LDFLAGS = @PLUGIN_LDFLAGS@
 109.101 +RANLIB = @RANLIB@
 109.102 +SET_MAKE = @SET_MAKE@
 109.103 +SHELL = @SHELL@
 109.104 +STRIP = @STRIP@
 109.105 +USE_ZLIB = @USE_ZLIB@
 109.106 +VERSION = @VERSION@
 109.107 +XML2_CONFIG = @XML2_CONFIG@
 109.108 +ac_ct_AR = @ac_ct_AR@
 109.109 +ac_ct_CC = @ac_ct_CC@
 109.110 +ac_ct_CXX = @ac_ct_CXX@
 109.111 +ac_ct_F77 = @ac_ct_F77@
 109.112 +ac_ct_RANLIB = @ac_ct_RANLIB@
 109.113 +ac_ct_STRIP = @ac_ct_STRIP@
 109.114 +am__fastdepCC_FALSE = @am__fastdepCC_FALSE@
 109.115 +am__fastdepCC_TRUE = @am__fastdepCC_TRUE@
 109.116 +am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@
 109.117 +am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@
 109.118 +am__include = @am__include@
 109.119 +am__leading_dot = @am__leading_dot@
 109.120 +am__quote = @am__quote@
 109.121 +bindir = @bindir@
 109.122 +build = @build@
 109.123 +build_alias = @build_alias@
 109.124 +build_cpu = @build_cpu@
 109.125 +build_os = @build_os@
 109.126 +build_vendor = @build_vendor@
 109.127 +datadir = @datadir@
 109.128 +exec_prefix = @exec_prefix@
 109.129 +host = @host@
 109.130 +host_alias = @host_alias@
 109.131 +host_cpu = @host_cpu@
 109.132 +host_os = @host_os@
 109.133 +host_vendor = @host_vendor@
 109.134 +includedir = @includedir@
 109.135 +infodir = @infodir@
 109.136 +install_sh = @install_sh@
 109.137 +libdir = @libdir@
 109.138 +libexecdir = @libexecdir@
 109.139 +localstatedir = @localstatedir@
 109.140 +mandir = @mandir@
 109.141 +oldincludedir = @oldincludedir@
 109.142 +prefix = @prefix@
 109.143 +program_transform_name = @program_transform_name@
 109.144 +sbindir = @sbindir@
 109.145 +sharedstatedir = @sharedstatedir@
 109.146 +sysconfdir = @sysconfdir@
 109.147 +target_alias = @target_alias@
 109.148 +
 109.149 +AM_CFLAGS = \
 109.150 +	$(GNUTELLA_CFLAGS)
 109.151 +
 109.152 +
 109.153 +INCLUDES = \
 109.154 +	-I$(top_srcdir)/src
 109.155 +
 109.156 +
 109.157 +noinst_LTLIBRARIES = \
 109.158 +	libgt_io.la
 109.159 +
 109.160 +
 109.161 +libgt_io_la_SOURCES = \
 109.162 +	io_buf.c          io_buf.h \
 109.163 +	rx_inflate.c      rx_inflate.h \
 109.164 +	rx_layer.c        rx_layer.h \
 109.165 +	rx_link.c         rx_link.h \
 109.166 +	rx_packet.c       rx_packet.h \
 109.167 +	rx_stack.c        rx_stack.h \
 109.168 +	tx_layer.c        tx_layer.h \
 109.169 +	tx_link.c         tx_link.h \
 109.170 +	tx_deflate.c \
 109.171 +	tx_packet.c \
 109.172 +	tx_stack.c        tx_stack.h
 109.173 +
 109.174 +subdir = src/io
 109.175 +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
 109.176 +mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
 109.177 +CONFIG_HEADER = $(top_builddir)/config.h
 109.178 +CONFIG_CLEAN_FILES =
 109.179 +LTLIBRARIES = $(noinst_LTLIBRARIES)
 109.180 +
 109.181 +libgt_io_la_LDFLAGS =
 109.182 +libgt_io_la_LIBADD =
 109.183 +am_libgt_io_la_OBJECTS = io_buf.lo rx_inflate.lo rx_layer.lo rx_link.lo \
 109.184 +	rx_packet.lo rx_stack.lo tx_layer.lo tx_link.lo tx_deflate.lo \
 109.185 +	tx_packet.lo tx_stack.lo
 109.186 +libgt_io_la_OBJECTS = $(am_libgt_io_la_OBJECTS)
 109.187 +
 109.188 +DEFAULT_INCLUDES =  -I. -I$(srcdir) -I$(top_builddir)
 109.189 +depcomp = $(SHELL) $(top_srcdir)/depcomp
 109.190 +am__depfiles_maybe = depfiles
 109.191 +@AMDEP_TRUE@DEP_FILES = ./$(DEPDIR)/io_buf.Plo \
 109.192 +@AMDEP_TRUE@	./$(DEPDIR)/rx_inflate.Plo ./$(DEPDIR)/rx_layer.Plo \
 109.193 +@AMDEP_TRUE@	./$(DEPDIR)/rx_link.Plo ./$(DEPDIR)/rx_packet.Plo \
 109.194 +@AMDEP_TRUE@	./$(DEPDIR)/rx_stack.Plo ./$(DEPDIR)/tx_deflate.Plo \
 109.195 +@AMDEP_TRUE@	./$(DEPDIR)/tx_layer.Plo ./$(DEPDIR)/tx_link.Plo \
 109.196 +@AMDEP_TRUE@	./$(DEPDIR)/tx_packet.Plo ./$(DEPDIR)/tx_stack.Plo
 109.197 +COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
 109.198 +	$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
 109.199 +LTCOMPILE = $(LIBTOOL) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) \
 109.200 +	$(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
 109.201 +CCLD = $(CC)
 109.202 +LINK = $(LIBTOOL) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
 109.203 +	$(AM_LDFLAGS) $(LDFLAGS) -o $@
 109.204 +DIST_SOURCES = $(libgt_io_la_SOURCES)
 109.205 +DIST_COMMON = $(srcdir)/Makefile.in Makefile.am
 109.206 +SOURCES = $(libgt_io_la_SOURCES)
 109.207 +
 109.208 +all: all-am
 109.209 +
 109.210 +.SUFFIXES:
 109.211 +.SUFFIXES: .c .lo .o .obj
 109.212 +$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ Makefile.am  $(top_srcdir)/configure.ac $(ACLOCAL_M4)
 109.213 +	cd $(top_srcdir) && \
 109.214 +	  $(AUTOMAKE) --gnu  src/io/Makefile
 109.215 +Makefile: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.in  $(top_builddir)/config.status
 109.216 +	cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)
 109.217 +
 109.218 +clean-noinstLTLIBRARIES:
 109.219 +	-test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES)
 109.220 +	@list='$(noinst_LTLIBRARIES)'; for p in $$list; do \
 109.221 +	  dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \
 109.222 +	  test "$$dir" = "$$p" && dir=.; \
 109.223 +	  echo "rm -f \"$${dir}/so_locations\""; \
 109.224 +	  rm -f "$${dir}/so_locations"; \
 109.225 +	done
 109.226 +libgt_io.la: $(libgt_io_la_OBJECTS) $(libgt_io_la_DEPENDENCIES) 
 109.227 +	$(LINK)  $(libgt_io_la_LDFLAGS) $(libgt_io_la_OBJECTS) $(libgt_io_la_LIBADD) $(LIBS)
 109.228 +
 109.229 +mostlyclean-compile:
 109.230 +	-rm -f *.$(OBJEXT) core *.core
 109.231 +
 109.232 +distclean-compile:
 109.233 +	-rm -f *.tab.c
 109.234 +
 109.235 +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/io_buf.Plo@am__quote@
 109.236 +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rx_inflate.Plo@am__quote@
 109.237 +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rx_layer.Plo@am__quote@
 109.238 +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rx_link.Plo@am__quote@
 109.239 +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rx_packet.Plo@am__quote@
 109.240 +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rx_stack.Plo@am__quote@
 109.241 +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tx_deflate.Plo@am__quote@
 109.242 +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tx_layer.Plo@am__quote@
 109.243 +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tx_link.Plo@am__quote@
 109.244 +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tx_packet.Plo@am__quote@
 109.245 +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tx_stack.Plo@am__quote@
 109.246 +
 109.247 +.c.o:
 109.248 +@am__fastdepCC_TRUE@	if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" \
 109.249 +@am__fastdepCC_TRUE@	  -c -o $@ `test -f '$<' || echo '$(srcdir)/'`$<; \
 109.250 +@am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; \
 109.251 +@am__fastdepCC_TRUE@	else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; \
 109.252 +@am__fastdepCC_TRUE@	fi
 109.253 +@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
 109.254 +@AMDEP_TRUE@@am__fastdepCC_FALSE@	depfile='$(DEPDIR)/$*.Po' tmpdepfile='$(DEPDIR)/$*.TPo' @AMDEPBACKSLASH@
 109.255 +@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 109.256 +@am__fastdepCC_FALSE@	$(COMPILE) -c `test -f '$<' || echo '$(srcdir)/'`$<
 109.257 +
 109.258 +.c.obj:
 109.259 +@am__fastdepCC_TRUE@	if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" \
 109.260 +@am__fastdepCC_TRUE@	  -c -o $@ `if test -f '$<'; then $(CYGPATH_W) '$<'; else $(CYGPATH_W) '$(srcdir)/$<'; fi`; \
 109.261 +@am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; \
 109.262 +@am__fastdepCC_TRUE@	else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; \
 109.263 +@am__fastdepCC_TRUE@	fi
 109.264 +@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
 109.265 +@AMDEP_TRUE@@am__fastdepCC_FALSE@	depfile='$(DEPDIR)/$*.Po' tmpdepfile='$(DEPDIR)/$*.TPo' @AMDEPBACKSLASH@
 109.266 +@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 109.267 +@am__fastdepCC_FALSE@	$(COMPILE) -c `if test -f '$<'; then $(CYGPATH_W) '$<'; else $(CYGPATH_W) '$(srcdir)/$<'; fi`
 109.268 +
 109.269 +.c.lo:
 109.270 +@am__fastdepCC_TRUE@	if $(LTCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" \
 109.271 +@am__fastdepCC_TRUE@	  -c -o $@ `test -f '$<' || echo '$(srcdir)/'`$<; \
 109.272 +@am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Plo"; \
 109.273 +@am__fastdepCC_TRUE@	else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; \
 109.274 +@am__fastdepCC_TRUE@	fi
 109.275 +@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
 109.276 +@AMDEP_TRUE@@am__fastdepCC_FALSE@	depfile='$(DEPDIR)/$*.Plo' tmpdepfile='$(DEPDIR)/$*.TPlo' @AMDEPBACKSLASH@
 109.277 +@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 109.278 +@am__fastdepCC_FALSE@	$(LTCOMPILE) -c -o $@ `test -f '$<' || echo '$(srcdir)/'`$<
 109.279 +
 109.280 +mostlyclean-libtool:
 109.281 +	-rm -f *.lo
 109.282 +
 109.283 +clean-libtool:
 109.284 +	-rm -rf .libs _libs
 109.285 +
 109.286 +distclean-libtool:
 109.287 +	-rm -f libtool
 109.288 +uninstall-info-am:
 109.289 +
 109.290 +ETAGS = etags
 109.291 +ETAGSFLAGS =
 109.292 +
 109.293 +CTAGS = ctags
 109.294 +CTAGSFLAGS =
 109.295 +
 109.296 +tags: TAGS
 109.297 +
 109.298 +ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
 109.299 +	list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
 109.300 +	unique=`for i in $$list; do \
 109.301 +	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
 109.302 +	  done | \
 109.303 +	  $(AWK) '    { files[$$0] = 1; } \
 109.304 +	       END { for (i in files) print i; }'`; \
 109.305 +	mkid -fID $$unique
 109.306 +
 109.307 +TAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
 109.308 +		$(TAGS_FILES) $(LISP)
 109.309 +	tags=; \
 109.310 +	here=`pwd`; \
 109.311 +	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
 109.312 +	unique=`for i in $$list; do \
 109.313 +	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
 109.314 +	  done | \
 109.315 +	  $(AWK) '    { files[$$0] = 1; } \
 109.316 +	       END { for (i in files) print i; }'`; \
 109.317 +	test -z "$(ETAGS_ARGS)$$tags$$unique" \
 109.318 +	  || $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
 109.319 +	     $$tags $$unique
 109.320 +
 109.321 +ctags: CTAGS
 109.322 +CTAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
 109.323 +		$(TAGS_FILES) $(LISP)
 109.324 +	tags=; \
 109.325 +	here=`pwd`; \
 109.326 +	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
 109.327 +	unique=`for i in $$list; do \
 109.328 +	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
 109.329 +	  done | \
 109.330 +	  $(AWK) '    { files[$$0] = 1; } \
 109.331 +	       END { for (i in files) print i; }'`; \
 109.332 +	test -z "$(CTAGS_ARGS)$$tags$$unique" \
 109.333 +	  || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
 109.334 +	     $$tags $$unique
 109.335 +
 109.336 +GTAGS:
 109.337 +	here=`$(am__cd) $(top_builddir) && pwd` \
 109.338 +	  && cd $(top_srcdir) \
 109.339 +	  && gtags -i $(GTAGS_ARGS) $$here
 109.340 +
 109.341 +distclean-tags:
 109.342 +	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
 109.343 +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
 109.344 +
 109.345 +top_distdir = ../..
 109.346 +distdir = $(top_distdir)/$(PACKAGE)-$(VERSION)
 109.347 +
 109.348 +distdir: $(DISTFILES)
 109.349 +	@srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \
 109.350 +	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \
 109.351 +	list='$(DISTFILES)'; for file in $$list; do \
 109.352 +	  case $$file in \
 109.353 +	    $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \
 109.354 +	    $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \
 109.355 +	  esac; \
 109.356 +	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
 109.357 +	  dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \
 109.358 +	  if test "$$dir" != "$$file" && test "$$dir" != "."; then \
 109.359 +	    dir="/$$dir"; \
 109.360 +	    $(mkinstalldirs) "$(distdir)$$dir"; \
 109.361 +	  else \
 109.362 +	    dir=''; \
 109.363 +	  fi; \
 109.364 +	  if test -d $$d/$$file; then \
 109.365 +	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
 109.366 +	      cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
 109.367 +	    fi; \
 109.368 +	    cp -pR $$d/$$file $(distdir)$$dir || exit 1; \
 109.369 +	  else \
 109.370 +	    test -f $(distdir)/$$file \
 109.371 +	    || cp -p $$d/$$file $(distdir)/$$file \
 109.372 +	    || exit 1; \
 109.373 +	  fi; \
 109.374 +	done
 109.375 +check-am: all-am
 109.376 +check: check-am
 109.377 +all-am: Makefile $(LTLIBRARIES)
 109.378 +
 109.379 +installdirs:
 109.380 +install: install-am
 109.381 +install-exec: install-exec-am
 109.382 +install-data: install-data-am
 109.383 +uninstall: uninstall-am
 109.384 +
 109.385 +install-am: all-am
 109.386 +	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
 109.387 +
 109.388 +installcheck: installcheck-am
 109.389 +install-strip:
 109.390 +	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
 109.391 +	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
 109.392 +	  `test -z '$(STRIP)' || \
 109.393 +	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
 109.394 +mostlyclean-generic:
 109.395 +
 109.396 +clean-generic:
 109.397 +
 109.398 +distclean-generic:
 109.399 +	-rm -f $(CONFIG_CLEAN_FILES)
 109.400 +
 109.401 +maintainer-clean-generic:
 109.402 +	@echo "This command is intended for maintainers to use"
 109.403 +	@echo "it deletes files that may require special tools to rebuild."
 109.404 +clean: clean-am
 109.405 +
 109.406 +clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \
 109.407 +	mostlyclean-am
 109.408 +
 109.409 +distclean: distclean-am
 109.410 +	-rm -rf ./$(DEPDIR)
 109.411 +	-rm -f Makefile
 109.412 +distclean-am: clean-am distclean-compile distclean-generic \
 109.413 +	distclean-libtool distclean-tags
 109.414 +
 109.415 +dvi: dvi-am
 109.416 +
 109.417 +dvi-am:
 109.418 +
 109.419 +info: info-am
 109.420 +
 109.421 +info-am:
 109.422 +
 109.423 +install-data-am:
 109.424 +
 109.425 +install-exec-am:
 109.426 +
 109.427 +install-info: install-info-am
 109.428 +
 109.429 +install-man:
 109.430 +
 109.431 +installcheck-am:
 109.432 +
 109.433 +maintainer-clean: maintainer-clean-am
 109.434 +	-rm -rf ./$(DEPDIR)
 109.435 +	-rm -f Makefile
 109.436 +maintainer-clean-am: distclean-am maintainer-clean-generic
 109.437 +
 109.438 +mostlyclean: mostlyclean-am
 109.439 +
 109.440 +mostlyclean-am: mostlyclean-compile mostlyclean-generic \
 109.441 +	mostlyclean-libtool
 109.442 +
 109.443 +pdf: pdf-am
 109.444 +
 109.445 +pdf-am:
 109.446 +
 109.447 +ps: ps-am
 109.448 +
 109.449 +ps-am:
 109.450 +
 109.451 +uninstall-am: uninstall-info-am
 109.452 +
 109.453 +.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
 109.454 +	clean-libtool clean-noinstLTLIBRARIES ctags distclean \
 109.455 +	distclean-compile distclean-generic distclean-libtool \
 109.456 +	distclean-tags distdir dvi dvi-am info info-am install \
 109.457 +	install-am install-data install-data-am install-exec \
 109.458 +	install-exec-am install-info install-info-am install-man \
 109.459 +	install-strip installcheck installcheck-am installdirs \
 109.460 +	maintainer-clean maintainer-clean-generic mostlyclean \
 109.461 +	mostlyclean-compile mostlyclean-generic mostlyclean-libtool pdf \
 109.462 +	pdf-am ps ps-am tags uninstall uninstall-am uninstall-info-am
 109.463 +
 109.464 +# Tell versions [3.59,3.63) of GNU make to not export all variables.
 109.465 +# Otherwise a system limit (for SysV at least) may be exceeded.
 109.466 +.NOEXPORT:
   110.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   110.2 +++ b/src/io/io_buf.c	Sat Feb 20 21:18:28 2010 -0800
   110.3 @@ -0,0 +1,126 @@
   110.4 +/*
   110.5 + * $Id: io_buf.c,v 1.2 2003/09/17 17:44:11 hipnod Exp $
   110.6 + *
   110.7 + * Copyright (C) 2003 giFT project (gift.sourceforge.net)
   110.8 + *
   110.9 + * This program is free software; you can redistribute it and/or modify it
  110.10 + * under the terms of the GNU General Public License as published by the
  110.11 + * Free Software Foundation; either version 2, or (at your option) any
  110.12 + * later version.
  110.13 + *
  110.14 + * This program is distributed in the hope that it will be useful, but
  110.15 + * WITHOUT ANY WARRANTY; without even the implied warranty of
  110.16 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
  110.17 + * General Public License for more details.
  110.18 + */
  110.19 +
  110.20 +#include "gt_gnutella.h"
  110.21 +
  110.22 +#include "io_buf.h"
  110.23 +
  110.24 +/*****************************************************************************/
  110.25 +
  110.26 +struct io_buf *io_buf_new (size_t size)
  110.27 +{
  110.28 +	struct io_buf *buf;
  110.29 +	uint8_t       *data;
  110.30 +
  110.31 +	if (!(data = gift_malloc (size + 1)))
  110.32 +		return NULL;
  110.33 +
  110.34 +	if (!(buf = gift_malloc (sizeof (struct io_buf))))
  110.35 +	{
  110.36 +		free (data);
  110.37 +		return NULL;
  110.38 +	}
  110.39 +
  110.40 +	buf->data   = data;
  110.41 +	buf->size   = size;
  110.42 +	buf->r_offs = 0;
  110.43 +	buf->w_offs = 0;
  110.44 +
  110.45 +	/* null terminate the buffer */
  110.46 +	buf->data[size] = 0;
  110.47 +
  110.48 +	return buf;
  110.49 +}
  110.50 +
  110.51 +void io_buf_free (struct io_buf *buf)
  110.52 +{
  110.53 +	uint8_t *data;
  110.54 +
  110.55 +	if (!buf)
  110.56 +		return;
  110.57 +
  110.58 +	data = io_buf_free_keep (buf);
  110.59 +	free (data);
  110.60 +}
  110.61 +
  110.62 +uint8_t *io_buf_free_keep (struct io_buf *buf)
  110.63 +{
  110.64 +	uint8_t *data;
  110.65 +
  110.66 +	data = buf->data;
  110.67 +	free (buf);
  110.68 +
  110.69 +	return data;
  110.70 +}
  110.71 +
  110.72 +/*
  110.73 + * Resize the underlying buffer. This includes +1 for the null terminator.
  110.74 + */
  110.75 +BOOL io_buf_resize (struct io_buf *buf, size_t len)
  110.76 +{
  110.77 +	uint8_t *resized;
  110.78 +
  110.79 +	if (buf->size >= len)
  110.80 +		return TRUE;
  110.81 +
  110.82 +	if (!(resized = gift_realloc (buf->data, len + 1)))
  110.83 +		return FALSE;
  110.84 +
  110.85 +	buf->data = resized;
  110.86 +	buf->size = len;
  110.87 +	
  110.88 +	/* ensure null-termination */
  110.89 +	buf->data[len] = 0;
  110.90 +
  110.91 +	return TRUE;
  110.92 +}
  110.93 +
  110.94 +void io_buf_reset (struct io_buf *buf)
  110.95 +{
  110.96 +	buf->w_offs = 0;
  110.97 +	buf->r_offs = 0;
  110.98 +}
  110.99 +
 110.100 +void io_buf_push (struct io_buf *buf, size_t len)
 110.101 +{
 110.102 +	assert (len + buf->w_offs <= buf->size);
 110.103 +	buf->w_offs += len;
 110.104 +}
 110.105 +
 110.106 +void io_buf_pop (struct io_buf *buf, size_t len)
 110.107 +{
 110.108 +	assert (len + buf->r_offs <= buf->w_offs);
 110.109 +	buf->r_offs += len;
 110.110 +}
 110.111 +
 110.112 +size_t io_buf_copy (struct io_buf *dst, struct io_buf *src, size_t len)
 110.113 +{
 110.114 +	size_t src_avail = io_buf_read_avail (src);
 110.115 +	size_t dst_avail = io_buf_write_avail (dst);
 110.116 +
 110.117 +	if (len > src_avail)
 110.118 +		len = src_avail;
 110.119 +
 110.120 +	if (len > dst_avail)
 110.121 +		len = dst_avail;
 110.122 +
 110.123 +	memcpy (dst->data + dst->w_offs, src->data + src->r_offs, len);
 110.124 +
 110.125 +	dst->w_offs += len;
 110.126 +	src->r_offs += len;
 110.127 +
 110.128 +	return len;
 110.129 +}
   111.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   111.2 +++ b/src/io/io_buf.h	Sat Feb 20 21:18:28 2010 -0800
   111.3 @@ -0,0 +1,74 @@
   111.4 +/*
   111.5 + * $Id: io_buf.h,v 1.2 2003/09/17 17:44:11 hipnod Exp $
   111.6 + *
   111.7 + * Copyright (C) 2003 giFT project (gift.sourceforge.net)
   111.8 + *
   111.9 + * This program is free software; you can redistribute it and/or modify it
  111.10 + * under the terms of the GNU General Public License as published by the
  111.11 + * Free Software Foundation; either version 2, or (at your option) any
  111.12 + * later version.
  111.13 + *
  111.14 + * This program is distributed in the hope that it will be useful, but
  111.15 + * WITHOUT ANY WARRANTY; without even the implied warranty of
  111.16 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
  111.17 + * General Public License for more details.
  111.18 + */
  111.19 +
  111.20 +#ifndef GIFT_GT_IO_BUF_H_
  111.21 +#define GIFT_GT_IO_BUF_H_
  111.22 +
  111.23 +/*****************************************************************************/
  111.24 +
  111.25 +/*
  111.26 + * This duplicates libgift's String somewhat...
  111.27 + */
  111.28 +struct io_buf
  111.29 +{
  111.30 +	uint8_t   *data;
  111.31 +	size_t     size;
  111.32 +	size_t     r_offs;
  111.33 +	size_t     w_offs;
  111.34 +};
  111.35 +
  111.36 +/*****************************************************************************/
  111.37 +
  111.38 +/*
  111.39 + * Macros for accessing particular things about an I/O buf...
  111.40 + */
  111.41 +
  111.42 +#define io_buf_read_avail(io_buf) \
  111.43 +	((io_buf)->w_offs - (io_buf)->r_offs)
  111.44 +
  111.45 +#define io_buf_len(io_buf) \
  111.46 +	((io_buf)->w_offs)
  111.47 +
  111.48 +#define io_buf_size(io_buf) \
  111.49 +	((io_buf)->size)
  111.50 +
  111.51 +#define io_buf_write_avail(io_buf) \
  111.52 +	((io_buf)->size - (io_buf)->w_offs)
  111.53 +
  111.54 +#define io_buf_write_ptr(io_buf) \
  111.55 +    (&(io_buf)->data[(io_buf)->w_offs])
  111.56 +
  111.57 +#define io_buf_read_ptr(iobuf) \
  111.58 +	(&(iobuf)->data[(iobuf)->r_offs])
  111.59 +
  111.60 +/*****************************************************************************/
  111.61 +
  111.62 +struct io_buf  *io_buf_new        (size_t len);
  111.63 +void            io_buf_free       (struct io_buf *buf);
  111.64 +uint8_t        *io_buf_free_keep  (struct io_buf *buf);
  111.65 +
  111.66 +BOOL            io_buf_resize     (struct io_buf *buf, size_t len);
  111.67 +void            io_buf_reset      (struct io_buf *buf);
  111.68 +
  111.69 +void            io_buf_push       (struct io_buf *buf, size_t len);
  111.70 +void            io_buf_pop        (struct io_buf *buf, size_t len);
  111.71 +
  111.72 +size_t          io_buf_copy       (struct io_buf *dst, struct io_buf *src,
  111.73 +                                   size_t len);
  111.74 +
  111.75 +/*****************************************************************************/
  111.76 +
  111.77 +#endif /* GIFT_GT_IO_BUF_H_ */
   112.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   112.2 +++ b/src/io/rx_inflate.c	Sat Feb 20 21:18:28 2010 -0800
   112.3 @@ -0,0 +1,192 @@
   112.4 +/*
   112.5 + * $Id: rx_inflate.c,v 1.10 2004/04/05 07:56:54 hipnod Exp $
   112.6 + *
   112.7 + * Copyright (C) 2003 giFT project (gift.sourceforge.net)
   112.8 + *
   112.9 + * This program is free software; you can redistribute it and/or modify it
  112.10 + * under the terms of the GNU General Public License as published by the
  112.11 + * Free Software Foundation; either version 2, or (at your option) any
  112.12 + * later version.
  112.13 + *
  112.14 + * This program is distributed in the hope that it will be useful, but
  112.15 + * WITHOUT ANY WARRANTY; without even the implied warranty of
  112.16 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
  112.17 + * General Public License for more details.
  112.18 + */
  112.19 +
  112.20 +#include "gt_gnutella.h"
  112.21 +
  112.22 +#include "rx_stack.h"
  112.23 +#include "rx_layer.h"
  112.24 +
  112.25 +#include <zlib.h>
  112.26 +
  112.27 +/*****************************************************************************/
  112.28 +
  112.29 +/* this is small for testing purposes */
  112.30 +#define    RX_INFLATE_BUFSIZE   256
  112.31 +
  112.32 +#define RX_INFLATE(rx) \
  112.33 +	((struct rx_inflate *) (((rx)->udata)))
  112.34 +
  112.35 +struct rx_inflate
  112.36 +{
  112.37 +	z_stream       z;
  112.38 +	BOOL           init_done;
  112.39 +};
  112.40 +
  112.41 +/*****************************************************************************/
  112.42 +
  112.43 +static BOOL rx_inflate_init (struct rx_layer *rx, void *udata)
  112.44 +{
  112.45 +	struct rx_inflate *rx_inflate;
  112.46 +
  112.47 +	if (!(rx_inflate = NEW (struct rx_inflate)))
  112.48 +		return FALSE;
  112.49 +
  112.50 +	/* inflateInit() may touch these variables */
  112.51 +	rx_inflate->z.zalloc   = Z_NULL;
  112.52 +	rx_inflate->z.zfree    = Z_NULL;
  112.53 +	rx_inflate->z.opaque   = Z_NULL;
  112.54 +	rx_inflate->z.next_in  = Z_NULL;
  112.55 +	rx_inflate->z.avail_in = 0;
  112.56 +
  112.57 +	if (inflateInit (&rx_inflate->z) != Z_OK)
  112.58 +	{
  112.59 +		gt_rx_stack_abort (rx->stack);
  112.60 +		return FALSE;
  112.61 +	}
  112.62 +
  112.63 +	rx->udata = rx_inflate;
  112.64 +
  112.65 +	rx_inflate->init_done = TRUE;
  112.66 +
  112.67 +	return TRUE;
  112.68 +}
  112.69 +
  112.70 +static void rx_inflate_destroy (struct rx_layer *rx)
  112.71 +{
  112.72 +	struct rx_inflate *rx_inflate = RX_INFLATE(rx);
  112.73 +
  112.74 +	/*
  112.75 +	 * We don't check the error here, there could very well be leftover data
  112.76 +	 * and it would be annoying to print a message every time.
  112.77 +	 */
  112.78 +	inflateEnd (&rx_inflate->z);
  112.79 +	rx_inflate->init_done = FALSE;
  112.80 +
  112.81 +	FREE (rx_inflate);
  112.82 +}
  112.83 +
  112.84 +static void rx_inflate_enable (struct rx_layer *rx)
  112.85 +{
  112.86 +	/* nothing -- we only process data when it comes towards us */
  112.87 +}
  112.88 +
  112.89 +static void rx_inflate_disable (struct rx_layer *rx)
  112.90 +{
  112.91 +	/* nothing */
  112.92 +}
  112.93 +
  112.94 +/*
  112.95 + * Handle the data from the lower layer, decompress it, and pass
  112.96 + * it to the upper layer.
  112.97 + */
  112.98 +static struct io_buf *read_buf (struct rx_layer *rx, struct io_buf *io_buf)
  112.99 +{
 112.100 +	struct rx_inflate *rx_inflate   = RX_INFLATE(rx);
 112.101 +	struct io_buf     *out_msg;
 112.102 +	z_streamp          inz;
 112.103 +	int                ret;
 112.104 +	size_t             uncompressed_size;
 112.105 +	size_t             compressed_read;
 112.106 +	size_t             out_size     = RX_INFLATE_BUFSIZE;
 112.107 +	size_t             avail;
 112.108 +	static size_t      running_cnt  = 0;
 112.109 +	static int         msg_count    = 0;
 112.110 +
 112.111 +	avail = io_buf_read_avail (io_buf);
 112.112 +
 112.113 +	if (avail == 0)
 112.114 +		return NULL;
 112.115 +
 112.116 +	if (!(out_msg = io_buf_new (out_size)))
 112.117 +	{
 112.118 +		GT->dbg (GT, "couldn't allocate memory for recv buf");
 112.119 +		gt_rx_stack_abort (rx->stack);
 112.120 +		return NULL;
 112.121 +	}
 112.122 +
 112.123 +	assert (rx_inflate->init_done);
 112.124 +	inz = &rx_inflate->z;
 112.125 +
 112.126 +	inz->next_in   = io_buf_read_ptr (io_buf);
 112.127 +	inz->avail_in  = avail;
 112.128 +	inz->next_out  = io_buf_write_ptr (out_msg);
 112.129 +	inz->avail_out = out_size;
 112.130 +
 112.131 +	ret = inflate (inz, Z_SYNC_FLUSH);
 112.132 +
 112.133 +	if (ret != Z_OK)
 112.134 +	{
 112.135 +		if (IO_DEBUG)
 112.136 +			GT->dbg (GT, "zlib recv error: %d", ret);
 112.137 +
 112.138 +		gt_rx_stack_abort (rx->stack);
 112.139 +		io_buf_free (out_msg);
 112.140 +		return NULL;
 112.141 +	}
 112.142 +
 112.143 +	uncompressed_size  = out_size - inz->avail_out;
 112.144 +	compressed_read    = avail - inz->avail_in;
 112.145 +
 112.146 +	running_cnt += uncompressed_size;
 112.147 +	if (IO_DEBUG && ++msg_count % 50 == 0)
 112.148 +	{
 112.149 +		GT->dbg (GT, "uncompressed %u bytes", running_cnt);
 112.150 +		running_cnt = 0;
 112.151 +	}
 112.152 +
 112.153 +	/* add the bytes we read to the new messge */
 112.154 +	io_buf_push (out_msg, uncompressed_size);
 112.155 +
 112.156 +	/* pop the old bytes we read off the incoming message */
 112.157 +	io_buf_pop (io_buf, compressed_read);
 112.158 +
 112.159 +	return out_msg;
 112.160 +}
 112.161 +
 112.162 +/*
 112.163 + * Parse the data into buffers, and send it to the upper layers.  packets to
 112.164 + */
 112.165 +static void rx_inflate_recv (struct rx_layer *rx, struct io_buf *io_buf)
 112.166 +{
 112.167 +	struct io_buf   *msg;
 112.168 +
 112.169 +	while (rx->enabled && (msg = read_buf (rx, io_buf)))
 112.170 +	{
 112.171 +		assert (msg != NULL);
 112.172 +		gt_rx_layer_recv (rx, msg);
 112.173 +
 112.174 +		/* 
 112.175 +		 * NOTE: gt_rx_layer_recv() may abort the stack here...  there's not much
 112.176 +		 * we can do about that, but in practice that doesn't happen and we
 112.177 +		 * won't access freed memory because the stack doesn't get freed until
 112.178 +		 * the lowest rx layer is notified of the abort...pretty hacky.
 112.179 +		 */
 112.180 +	}
 112.181 +
 112.182 +	/* we have to free the buffer */
 112.183 +	io_buf_free (io_buf);
 112.184 +}
 112.185 +
 112.186 +/*****************************************************************************/
 112.187 +
 112.188 +struct rx_layer_ops gt_rx_inflate_ops =
 112.189 +{
 112.190 +	rx_inflate_init,
 112.191 +	rx_inflate_destroy,
 112.192 +	rx_inflate_enable,
 112.193 +	rx_inflate_disable,
 112.194 +	rx_inflate_recv,
 112.195 +};
   113.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   113.2 +++ b/src/io/rx_inflate.h	Sat Feb 20 21:18:28 2010 -0800
   113.3 @@ -0,0 +1,26 @@
   113.4 +/*
   113.5 + * $Id: rx_inflate.h,v 1.3 2004/01/31 13:33:17 hipnod Exp $
   113.6 + *
   113.7 + * Copyright (C) 2003 giFT project (gift.sourceforge.net)
   113.8 + *
   113.9 + * This program is free software; you can redistribute it and/or modify it
  113.10 + * under the terms of the GNU General Public License as published by the
  113.11 + * Free Software Foundation; either version 2, or (at your option) any
  113.12 + * later version.
  113.13 + *
  113.14 + * This program is distributed in the hope that it will be useful, but
  113.15 + * WITHOUT ANY WARRANTY; without even the implied warranty of
  113.16 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
  113.17 + * General Public License for more details.
  113.18 + */
  113.19 +
  113.20 +#ifndef GIFT_GT_IO_RX_INFLATE_H_
  113.21 +#define GIFT_GT_IO_RX_INFLATE_H_
  113.22 +
  113.23 +/*****************************************************************************/
  113.24 +
  113.25 +extern struct rx_layer_ops gt_rx_inflate_ops;
  113.26 +
  113.27 +/*****************************************************************************/
  113.28 +
  113.29 +#endif /* GIFT_GT_IO_RX_INFLATE_H_ */
   114.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   114.2 +++ b/src/io/rx_layer.c	Sat Feb 20 21:18:28 2010 -0800
   114.3 @@ -0,0 +1,106 @@
   114.4 +/*
   114.5 + * $Id: rx_layer.c,v 1.4 2004/02/01 08:17:12 hipnod Exp $
   114.6 + *
   114.7 + * Copyright (C) 2003 giFT project (gift.sourceforge.net)
   114.8 + *
   114.9 + * This program is free software; you can redistribute it and/or modify it
  114.10 + * under the terms of the GNU General Public License as published by the
  114.11 + * Free Software Foundation; either version 2, or (at your option) any
  114.12 + * later version.
  114.13 + *
  114.14 + * This program is distributed in the hope that it will be useful, but
  114.15 + * WITHOUT ANY WARRANTY; without even the implied warranty of
  114.16 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
  114.17 + * General Public License for more details.
  114.18 + */
  114.19 +
  114.20 +#include "gt_gnutella.h"
  114.21 +
  114.22 +#include "rx_layer.h"
  114.23 +
  114.24 +/*****************************************************************************/
  114.25 +
  114.26 +void gt_rx_layer_disable (struct rx_layer *rx)
  114.27 +{
  114.28 +	if (!rx)
  114.29 +		return;
  114.30 +
  114.31 +	rx->enabled = FALSE;
  114.32 +	rx->ops->disable (rx);
  114.33 +}
  114.34 +
  114.35 +void gt_rx_layer_enable (struct rx_layer *rx)
  114.36 +{
  114.37 +	if (!rx)
  114.38 +		return;
  114.39 +
  114.40 +	rx->enabled = TRUE;
  114.41 +	rx->ops->enable (rx);
  114.42 +}
  114.43 +
  114.44 +void gt_rx_layer_recv (struct rx_layer *rx, struct io_buf *io_buf)
  114.45 +{
  114.46 +	struct rx_layer *upper;
  114.47 +
  114.48 +	/* let the stack know we've started to receive some data */
  114.49 +	gt_rx_stack_recv_start (rx->stack);
  114.50 +
  114.51 +	upper = rx->upper;
  114.52 +	assert (rx->upper != NULL);
  114.53 +
  114.54 +	upper->ops->recv (upper, io_buf);
  114.55 +
  114.56 +	/* 
  114.57 +	 * Let the stack know we're done. Currently, this will free the stack if
  114.58 +	 * rx_stack_abort() was called while we were receiving data.
  114.59 +	 *
  114.60 +	 * (Also note, the stack itself doesn't actually call free, but calls
  114.61 +	 * to the higher level callback's cleanup function, that calls 
  114.62 +	 * gt_rx_stack_free().
  114.63 +	 */
  114.64 +	gt_rx_stack_recv_end (rx->stack);
  114.65 +}
  114.66 +
  114.67 +/*****************************************************************************/
  114.68 +
  114.69 +struct rx_layer *gt_rx_layer_new (GtRxStack *stack, const char *name,
  114.70 +                               struct rx_layer_ops *ops, void *udata)
  114.71 +{
  114.72 +	struct rx_layer *rx;
  114.73 +
  114.74 +	if (!(rx = NEW (struct rx_layer)))
  114.75 +		return NULL;
  114.76 +
  114.77 +	rx->name  = name;
  114.78 +	rx->ops   = ops;    /* should we memdup this? */
  114.79 +	rx->udata = udata;
  114.80 +	rx->stack = stack;
  114.81 +
  114.82 +	/*
  114.83 +	 * Call the child initialization function.
  114.84 +	 */
  114.85 +	if (!ops->init (rx, udata))
  114.86 +	{
  114.87 +		free (rx);
  114.88 +		return NULL;
  114.89 +	}
  114.90 +
  114.91 +	return rx;
  114.92 +}
  114.93 +
  114.94 +void gt_rx_layer_free (struct rx_layer *rx)
  114.95 +{
  114.96 +	if (!rx)
  114.97 +		return;
  114.98 +
  114.99 +	/* tell the layer to free its data */
 114.100 +	rx->ops->destroy (rx);
 114.101 +
 114.102 +	/* ops structues are global */
 114.103 +#if 0
 114.104 +	free (rx->ops);
 114.105 +#endif
 114.106 +
 114.107 +	/* we free the layer itself here, at the top */
 114.108 +	FREE (rx);
 114.109 +}
   115.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   115.2 +++ b/src/io/rx_layer.h	Sat Feb 20 21:18:28 2010 -0800
   115.3 @@ -0,0 +1,68 @@
   115.4 +/*
   115.5 + * $Id: rx_layer.h,v 1.3 2004/02/01 08:17:12 hipnod Exp $
   115.6 + *
   115.7 + * Copyright (C) 2003 giFT project (gift.sourceforge.net)
   115.8 + *
   115.9 + * This program is free software; you can redistribute it and/or modify it
  115.10 + * under the terms of the GNU General Public License as published by the
  115.11 + * Free Software Foundation; either version 2, or (at your option) any
  115.12 + * later version.
  115.13 + *
  115.14 + * This program is distributed in the hope that it will be useful, but
  115.15 + * WITHOUT ANY WARRANTY; without even the implied warranty of
  115.16 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
  115.17 + * General Public License for more details.
  115.18 + */
  115.19 +
  115.20 +#ifndef GIFT_GT_RX_LAYER_H_
  115.21 +#define GIFT_GT_RX_LAYER_H_
  115.22 +
  115.23 +/*****************************************************************************/
  115.24 +
  115.25 +#include "rx_stack.h"
  115.26 +#include "io_buf.h"
  115.27 +
  115.28 +/*****************************************************************************/
  115.29 +
  115.30 +struct gt_rx_stack;
  115.31 +struct rx_layer;
  115.32 +
  115.33 +struct rx_layer_ops
  115.34 +{
  115.35 +	BOOL (*init)     (struct rx_layer *layer, void *udata);
  115.36 +	void (*destroy)  (struct rx_layer *layer);
  115.37 +	void (*enable)   (struct rx_layer *layer);
  115.38 +	void (*disable)  (struct rx_layer *layer);
  115.39 +	void (*recv)     (struct rx_layer *layer, struct io_buf *io_buf);
  115.40 +};
  115.41 +
  115.42 +struct rx_layer
  115.43 +{
  115.44 +	const char            *name;
  115.45 +	void                  *udata;
  115.46 +	struct rx_layer_ops   *ops;
  115.47 +	BOOL                   enabled;
  115.48 +
  115.49 +	struct rx_layer       *upper;
  115.50 +	struct rx_layer       *lower;
  115.51 +
  115.52 +	struct gt_rx_stack    *stack;
  115.53 +};
  115.54 +
  115.55 +/*****************************************************************************/
  115.56 +
  115.57 +struct rx_layer *gt_rx_layer_new     (struct gt_rx_stack *stack,
  115.58 +                                      const char *name,
  115.59 +                                      struct rx_layer_ops *ops, void *udata);
  115.60 +void             gt_rx_layer_free    (struct rx_layer *layer);
  115.61 +
  115.62 +void             gt_rx_layer_disable (struct rx_layer *layer);
  115.63 +void             gt_rx_layer_enable  (struct rx_layer *layer);
  115.64 +
  115.65 +/* pass a message buffer up to preceding layers */
  115.66 +void             gt_rx_layer_recv    (struct rx_layer *layer,
  115.67 +                                      struct io_buf *io_buf);
  115.68 +
  115.69 +/*****************************************************************************/
  115.70 +
  115.71 +#endif /* GIFT_GT_RX_LAYER_H_ */
   116.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   116.2 +++ b/src/io/rx_link.c	Sat Feb 20 21:18:28 2010 -0800
   116.3 @@ -0,0 +1,227 @@
   116.4 +/*
   116.5 + * $Id: rx_link.c,v 1.7 2004/02/01 08:17:12 hipnod Exp $
   116.6 + *
   116.7 + * Copyright (C) 2003 giFT project (gift.sourceforge.net)
   116.8 + *
   116.9 + * This program is free software; you can redistribute it and/or modify it
  116.10 + * under the terms of the GNU General Public License as published by the
  116.11 + * Free Software Foundation; either version 2, or (at your option) any
  116.12 + * later version.
  116.13 + *
  116.14 + * This program is distributed in the hope that it will be useful, but
  116.15 + * WITHOUT ANY WARRANTY; without even the implied warranty of
  116.16 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
  116.17 + * General Public License for more details.
  116.18 + */
  116.19 +
  116.20 +#include "gt_gnutella.h"
  116.21 +
  116.22 +#include "rx_layer.h"
  116.23 +#include "rx_link.h"
  116.24 +
  116.25 +/*****************************************************************************/
  116.26 +
  116.27 +struct rx_link
  116.28 +{
  116.29 +	/* TODO when the tx stack is implemented also
  116.30 +	 * right now cleanup is too hard */
  116.31 +#if 0
  116.32 +	struct io_source  *ios;
  116.33 +#endif
  116.34 +	TCPC              *c;
  116.35 +	input_id           id;
  116.36 +};
  116.37 +
  116.38 +/*****************************************************************************/
  116.39 +
  116.40 +/* Some macros for readability */
  116.41 +
  116.42 +#define RX_LINK(rx) \
  116.43 +	((struct rx_link *)((rx)->udata))
  116.44 +
  116.45 +#define IO_SOURCE(rx_link) \
  116.46 +	((rx_link)->ios)
  116.47 +
  116.48 +/*****************************************************************************/
  116.49 +
  116.50 +/* TODO: implement cached allocation */
  116.51 +#define RX_LINK_BUFSIZE      512
  116.52 +
  116.53 +/*
  116.54 + * This implementation is for bootstrapping the code onto
  116.55 + * the present system.
  116.56 + *
  116.57 + * The low-level details of what we are actually reading
  116.58 + * from should be abstracted away.
  116.59 + */
  116.60 +static void read_data (int fd, input_id id, struct rx_layer *rx)
  116.61 +{
  116.62 +	struct rx_link   *rx_link = RX_LINK(rx);
  116.63 +	struct io_buf    *io_buf;
  116.64 +	ssize_t           n;
  116.65 +
  116.66 +	/* we're processing data, we'd better be enabled */
  116.67 +	assert (rx->enabled);
  116.68 +
  116.69 +	if (!(io_buf = io_buf_new (RX_LINK_BUFSIZE)))
  116.70 +	{
  116.71 +		gt_rx_stack_abort (rx->stack);
  116.72 +		return;
  116.73 +	}
  116.74 +
  116.75 +	if ((n = tcp_recv (rx_link->c, io_buf_write_ptr (io_buf), 
  116.76 +	                   RX_LINK_BUFSIZE)) <= 0)
  116.77 +	{
  116.78 +		if (IO_DEBUG)
  116.79 +		{
  116.80 +			if (n < 0)
  116.81 +				GT->DBGSOCK (GT, rx_link->c, "recv error: %s", GIFT_NETERROR());
  116.82 +			else
  116.83 +				GT->DBGSOCK (GT, rx_link->c, "recv error: socket closed");
  116.84 +		}
  116.85 +
  116.86 +		io_buf_free (io_buf);
  116.87 +		gt_rx_stack_abort (rx->stack);
  116.88 +		return;
  116.89 +	}
  116.90 +
  116.91 +	/* set the data as having been read */
  116.92 +	io_buf_push (io_buf, n);
  116.93 +
  116.94 +	/*
  116.95 +	 * Pass the data up the stack.
  116.96 +	 */
  116.97 +	gt_rx_layer_recv (rx, io_buf);
  116.98 +}
  116.99 +
 116.100 +#if 0
 116.101 +/*
 116.102 + * Receive data from the I/O source, and pass it up the stack
 116.103 + */
 116.104 +static void recv_data (struct io_source *ios, struct io_buf *io_buf)
 116.105 +{
 116.106 +	struct rx_layer   *rx;
 116.107 +	struct rx_link    *rx_link;
 116.108 +	ssize_t            n;
 116.109 +
 116.110 +    rx      = ios->recv_data;
 116.111 +	rx_link = RX_LINK(rx);
 116.112 +
 116.113 +	/*
 116.114 +	 * Pass the data to an upper layer.
 116.115 +	 */
 116.116 +	gt_rx_layer_recv (rx, io_buf);
 116.117 +
 116.118 +	/*
 116.119 +	 * ?? we have to free io_buf here ?? No.
 116.120 +	 * gtk-gnutella passes off responsibility to the upper layers,
 116.121 +	 * but why..
 116.122 +	 */
 116.123 +#if 0
 116.124 +	return n;
 116.125 +#endif
 116.126 +	/*
 116.127 +	 * Think i may understand why gtk-gnutella does it that way now:
 116.128 +	 * in the partial packet case there may be unread data on the packet,
 116.129 +	 * so we have to store that partial packet data in the intermediate
 116.130 +	 * layers.
 116.131 +	 *
 116.132 +	 * I still wonder if its possible to use a static buffer at each layer
 116.133 +	 * though...
 116.134 +	 */
 116.135 +}
 116.136 +#endif
 116.137 +
 116.138 +static void init_input (struct rx_layer *rx, struct rx_link *rx_link)
 116.139 +{
 116.140 +	assert (rx_link->id == 0);
 116.141 +	rx_link->id = input_add (rx_link->c->fd, rx, INPUT_READ,
 116.142 +	                         (InputCallback)read_data, 0);
 116.143 +}
 116.144 +
 116.145 +static void free_input (struct rx_layer *rx, struct rx_link *rx_link)
 116.146 +{
 116.147 +	/*
 116.148 +	 * This could be called multiple times on cleanup,
 116.149 +	 * so we don't assert the id is 0 here.
 116.150 +	 */
 116.151 +	if (rx_link->id)
 116.152 +	{
 116.153 +		input_remove (rx_link->id);
 116.154 +		rx_link->id = 0;
 116.155 +	}
 116.156 +}
 116.157 +
 116.158 +static void rx_link_enable (struct rx_layer *rx)
 116.159 +{
 116.160 +	struct rx_link *rx_link = RX_LINK(rx);
 116.161 +
 116.162 +#if 0
 116.163 +	/* set the callback for getting data */
 116.164 +	io_source_enable (IO_SOURCE(rx_link), IO_SOURCE_OP_RECV, recv_data, rx);
 116.165 +#endif
 116.166 +
 116.167 +	init_input (rx, rx_link);
 116.168 +}
 116.169 +
 116.170 +static void rx_link_disable (struct rx_layer *rx)
 116.171 +{
 116.172 +	struct rx_link *rx_link = RX_LINK(rx);
 116.173 +
 116.174 +#if 0
 116.175 +	io_source_disable (IO_SOURCE(rx_link), IO_SOURCE_OP_RECV);
 116.176 +#endif
 116.177 +	free_input (rx, rx_link);
 116.178 +}
 116.179 +
 116.180 +static BOOL rx_link_init (struct rx_layer *rx, void *udata)
 116.181 +{
 116.182 +	struct rx_link *rx_link;
 116.183 +	TCPC           *c = (TCPC *) udata;  /* ewwww */
 116.184 +
 116.185 +	if (!(rx_link = NEW (struct rx_link)))
 116.186 +		return FALSE;
 116.187 +
 116.188 +	/* store the connection which we get from the upper layer...gross */
 116.189 +	rx_link->c = c;
 116.190 +
 116.191 +	/* store our data in the rx structure */
 116.192 +	rx->udata = rx_link;
 116.193 +
 116.194 +	return TRUE;
 116.195 +}
 116.196 +
 116.197 +static void rx_link_destroy (struct rx_layer *rx)
 116.198 +{
 116.199 +	struct rx_link *rx_link = RX_LINK(rx);
 116.200 +
 116.201 +	/*
 116.202 +	 * rx_link_disable() should be called first
 116.203 +	 */
 116.204 +	assert (rx_link->id == 0);
 116.205 +
 116.206 +	/*
 116.207 +	 * We would free the connection here, but its shared with
 116.208 +	 * a GtNode that frees it also at the moment.
 116.209 +	 */
 116.210 +#if 0
 116.211 +	tcp_close (rx->c);
 116.212 +#endif
 116.213 +
 116.214 +#if 0
 116.215 +	io_source_free (rx_link->ios);
 116.216 +#endif
 116.217 +
 116.218 +	FREE (rx_link);
 116.219 +}
 116.220 +
 116.221 +/*****************************************************************************/
 116.222 +
 116.223 +struct rx_layer_ops gt_rx_link_ops =
 116.224 +{
 116.225 +	rx_link_init,
 116.226 +	rx_link_destroy,
 116.227 +	rx_link_enable,
 116.228 +	rx_link_disable,
 116.229 +	NULL,           /* rx_link_recv */
 116.230 +};
   117.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   117.2 +++ b/src/io/rx_link.h	Sat Feb 20 21:18:28 2010 -0800
   117.3 @@ -0,0 +1,26 @@
   117.4 +/*
   117.5 + * $Id: rx_link.h,v 1.3 2004/01/31 13:33:17 hipnod Exp $
   117.6 + *
   117.7 + * Copyright (C) 2003 giFT project (gift.sourceforge.net)
   117.8 + *
   117.9 + * This program is free software; you can redistribute it and/or modify it
  117.10 + * under the terms of the GNU General Public License as published by the
  117.11 + * Free Software Foundation; either version 2, or (at your option) any
  117.12 + * later version.
  117.13 + *
  117.14 + * This program is distributed in the hope that it will be useful, but
  117.15 + * WITHOUT ANY WARRANTY; without even the implied warranty of
  117.16 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
  117.17 + * General Public License for more details.
  117.18 + */
  117.19 +
  117.20 +#ifndef GIFT_GT_RX_LINK_H_
  117.21 +#define GIFT_GT_RX_LINK_H_
  117.22 +
  117.23 +/*****************************************************************************/
  117.24 +
  117.25 +extern struct rx_layer_ops gt_rx_link_ops;
  117.26 +
  117.27 +/*****************************************************************************/
  117.28 +
  117.29 +#endif /* GIFT_GT_RX_LINK_H_ */
   118.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   118.2 +++ b/src/io/rx_packet.c	Sat Feb 20 21:18:28 2010 -0800
   118.3 @@ -0,0 +1,289 @@
   118.4 +/*
   118.5 + * $Id: rx_packet.c,v 1.7 2004/02/15 04:53:38 hipnod Exp $
   118.6 + *
   118.7 + * Copyright (C) 2003 giFT project (gift.sourceforge.net)
   118.8 + *
   118.9 + * This program is free software; you can redistribute it and/or modify it
  118.10 + * under the terms of the GNU General Public License as published by the
  118.11 + * Free Software Foundation; either version 2, or (at your option) any
  118.12 + * later version.
  118.13 + *
  118.14 + * This program is distributed in the hope that it will be useful, but
  118.15 + * WITHOUT ANY WARRANTY; without even the implied warranty of
  118.16 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
  118.17 + * General Public License for more details.
  118.18 + */
  118.19 +
  118.20 +#include "gt_gnutella.h"
  118.21 +
  118.22 +#include "rx_stack.h"
  118.23 +#include "rx_layer.h"
  118.24 +
  118.25 +#include "gt_packet.h"
  118.26 +#include "rx_packet.h"
  118.27 +
  118.28 +/*****************************************************************************/
  118.29 +
  118.30 +struct rx_packet
  118.31 +{
  118.32 +	struct io_buf       *partial;
  118.33 +	rx_packet_handler_t  handler;
  118.34 +	void                *udata;
  118.35 +};
  118.36 +
  118.37 +/*****************************************************************************/
  118.38 +
  118.39 +#define RX_PACKET(rx) \
  118.40 +	((struct rx_packet *) ((rx)->udata))
  118.41 +
  118.42 +/*****************************************************************************/
  118.43 +
  118.44 +static void null_packet_handler (void *udata, GtPacket *packet)
  118.45 +{
  118.46 +	gt_packet_free (packet);
  118.47 +}
  118.48 +
  118.49 +static BOOL rx_packet_init (struct rx_layer *rx, void *udata)
  118.50 +{
  118.51 +	struct rx_packet *rx_packet;
  118.52 +
  118.53 +	if (!(rx_packet = NEW (struct rx_packet)))
  118.54 +		return FALSE;
  118.55 +
  118.56 +	rx->udata = rx_packet;
  118.57 +
  118.58 +	/* discard the packets received */
  118.59 +	rx_packet->handler = null_packet_handler;
  118.60 +	return TRUE;
  118.61 +}
  118.62 +
  118.63 +static void rx_packet_destroy (struct rx_layer *rx)
  118.64 +{
  118.65 +	struct rx_packet *rx_packet = RX_PACKET(rx);
  118.66 +
  118.67 +	io_buf_free (rx_packet->partial);
  118.68 +	FREE (rx_packet);
  118.69 +}
  118.70 +
  118.71 +static void rx_packet_disable (struct rx_layer *rx)
  118.72 +{
  118.73 +	/* NOP: lower layer will stop sending us data -- it'd better
  118.74 +	 * stop now */
  118.75 +}
  118.76 +
  118.77 +static void rx_packet_enable (struct rx_layer *rx)
  118.78 +{
  118.79 +	/* NOP: the lower layer will start sending us data again */
  118.80 +}
  118.81 +
  118.82 +/*****************************************************************************/
  118.83 +
  118.84 +static GtPacket *make_packet (struct rx_layer *rx, struct rx_packet *rx_packet,
  118.85 +                              size_t packet_size)
  118.86 +{
  118.87 +	GtPacket      *packet;
  118.88 +	struct io_buf *pbuf = rx_packet->partial;
  118.89 +
  118.90 +	assert (io_buf_len (pbuf) == packet_size);
  118.91 +	assert (packet_size < GT_PACKET_MAX);
  118.92 +
  118.93 +	/* construct a complete packet from the data in the binary buf */
  118.94 +	packet = gt_packet_unserialize (pbuf->data, packet_size);
  118.95 +
  118.96 +	/*
  118.97 +	 * TODO: gt_packet_unserialize() currently copies the data, but should
  118.98 +	 * really take ownership of the data in place.  That would also allow the
  118.99 +	 * null terminator in the io_buf to terminate the last string in the
 118.100 +	 * packet, if any.
 118.101 +	 */
 118.102 +	io_buf_free (pbuf);
 118.103 +	rx_packet->partial = NULL;
 118.104 +
 118.105 +	if (!packet)
 118.106 +	{
 118.107 +		gt_rx_stack_abort (rx->stack);
 118.108 +		return NULL;
 118.109 +	}
 118.110 +
 118.111 +	return packet;
 118.112 +}
 118.113 +
 118.114 +static BOOL fill_up_to (struct rx_layer *rx, struct io_buf *dst,
 118.115 +                        struct io_buf *src, size_t fill_size)
 118.116 +{
 118.117 +	size_t     new_len;
 118.118 +	size_t     old_len;
 118.119 +	size_t     len_to_read;
 118.120 +
 118.121 +	old_len = io_buf_len (dst);
 118.122 +	new_len = io_buf_len (src);
 118.123 +
 118.124 +	/* skip if we already have enough */
 118.125 +	if (old_len >= fill_size)
 118.126 +		return TRUE;
 118.127 +
 118.128 +	len_to_read = MIN (fill_size - old_len, new_len);
 118.129 +
 118.130 +	/* ensure the packet has enough room */
 118.131 +	if (!io_buf_resize (dst, old_len + len_to_read))
 118.132 +	{
 118.133 +		gt_rx_stack_abort (rx->stack);
 118.134 +		return FALSE;
 118.135 +	}
 118.136 +
 118.137 +	io_buf_copy (dst, src, len_to_read);
 118.138 +
 118.139 +	if (io_buf_len (dst) >= fill_size)
 118.140 +		return TRUE;
 118.141 +
 118.142 +	return FALSE;
 118.143 +}
 118.144 +
 118.145 +static BOOL fill_header (struct rx_layer *rx, struct rx_packet *rx_packet,
 118.146 +                         struct io_buf *io_buf)
 118.147 +{
 118.148 +	struct io_buf *dst = rx_packet->partial;
 118.149 +	struct io_buf *src = io_buf;
 118.150 +
 118.151 +	if (!fill_up_to (rx, dst, src, GNUTELLA_HDR_LEN))
 118.152 +	{
 118.153 +		/* this would fail if there was an alloc failure */
 118.154 +		assert (io_buf_read_avail (io_buf) == 0);
 118.155 +		return FALSE;
 118.156 +	}
 118.157 +
 118.158 +	return TRUE;
 118.159 +}
 118.160 +
 118.161 +/*
 118.162 + * We must read all the data the lower layer has sent and buffer
 118.163 + * partial packets, because otherwise we would poll the CPU if the
 118.164 + * packet were bigger than the buffer size of one of the layer
 118.165 + * layers under this one.
 118.166 + */
 118.167 +static BOOL read_packet (struct rx_layer *rx, struct rx_packet *rx_packet,
 118.168 +                         struct io_buf *io_buf, GtPacket **ret)
 118.169 +{
 118.170 +	uint32_t       payload_len;
 118.171 +	size_t         partial_len;
 118.172 +	uint32_t       packet_size;
 118.173 +	struct io_buf *partial     = rx_packet->partial;
 118.174 +	GtPacket      *pkt;
 118.175 +
 118.176 +	*ret = NULL;
 118.177 +
 118.178 +	partial_len = io_buf_len (partial);
 118.179 +	assert (partial_len >= GNUTELLA_HDR_LEN);
 118.180 +
 118.181 +	/*
 118.182 +	 * The partial packet is now at least 23 bytes.  Look in the header for
 118.183 +	 * the payload length so we know how much we need to read before the
 118.184 +	 * packet is complete.
 118.185 +	 */
 118.186 +	payload_len = get_payload_len (partial->data);
 118.187 +	packet_size = payload_len + GNUTELLA_HDR_LEN;
 118.188 +
 118.189 +	/*
 118.190 +	 * Check for wraparound, and reset the packet size to its payload len.
 118.191 +	 * Its likely we've experienced a protocol de-sync here.  Set the size so
 118.192 +	 * the connection will be closed.
 118.193 +	 */
 118.194 +	if (packet_size < GNUTELLA_HDR_LEN)
 118.195 +		packet_size = GT_PACKET_MAX;
 118.196 +
 118.197 +	if (packet_size >= GT_PACKET_MAX)
 118.198 +	{
 118.199 +		if (IO_DEBUG)
 118.200 +			GT->dbg (GT, "received too large packet(%d)", packet_size);
 118.201 +
 118.202 +		/* TODO: should send a BYE message here */
 118.203 +		gt_rx_stack_abort (rx->stack);
 118.204 +		return FALSE;
 118.205 +	}
 118.206 +
 118.207 +	if (!fill_up_to (rx, partial, io_buf, packet_size))
 118.208 +	{
 118.209 +		/* this would fail if there was an alloc failure */
 118.210 +		assert (io_buf_read_avail (io_buf) == 0);
 118.211 +		return FALSE;
 118.212 +	}
 118.213 +
 118.214 +	/* yay, read a packet */
 118.215 +	pkt = make_packet (rx, rx_packet, packet_size);
 118.216 +	*ret = pkt;
 118.217 +
 118.218 +	return (pkt == NULL ? FALSE : TRUE);
 118.219 +}
 118.220 +
 118.221 +/*
 118.222 + * Receive a message buffer from the lower layer, parse it into as many
 118.223 + * packets as it contains, and pass those to our handler function.
 118.224 + *
 118.225 + * This is meant to be the top layer of the rx stack only.
 118.226 + *
 118.227 + * TODO: A handler could be implemented as another layer, should think
 118.228 + * about this approach instead.
 118.229 + */
 118.230 +static void rx_packet_recv (struct rx_layer *rx, struct io_buf *io_buf)
 118.231 +{
 118.232 +	GtPacket          *packet = NULL;
 118.233 +	struct rx_packet  *rx_packet;
 118.234 +
 118.235 +	rx_packet = RX_PACKET(rx);
 118.236 +
 118.237 +	while (rx->enabled && io_buf_read_avail (io_buf) > 0)
 118.238 +	{
 118.239 +		/* allocate a new partial buffer, if one is not present yet */
 118.240 +		if (!rx_packet->partial &&
 118.241 +		    !(rx_packet->partial = io_buf_new (GNUTELLA_HDR_LEN)))
 118.242 +		{
 118.243 +			gt_rx_stack_abort (rx->stack);
 118.244 +			break;
 118.245 +		}
 118.246 +
 118.247 +		/* try to read the first 23 bytes */
 118.248 +		if (!fill_header (rx, rx_packet, io_buf))
 118.249 +			break;
 118.250 +
 118.251 +		/*
 118.252 +		 * Read the payload. If there arent enough bytes to complete the
 118.253 +		 * packet, we finish it later.
 118.254 +		 */
 118.255 +		if (!read_packet (rx, rx_packet, io_buf, &packet))
 118.256 +		{
 118.257 +			assert (packet == NULL);
 118.258 +			break;
 118.259 +		}
 118.260 +
 118.261 +		assert (packet != NULL);
 118.262 +		(*rx_packet->handler) (rx_packet->udata, packet);
 118.263 +
 118.264 +		/* freeing the packet here means the callback must make its own
 118.265 +		 * provisions for storing the packet's data */
 118.266 +		gt_packet_free (packet);
 118.267 +		packet = NULL;
 118.268 +	}
 118.269 +
 118.270 +	io_buf_free (io_buf);
 118.271 +}
 118.272 +
 118.273 +/*****************************************************************************/
 118.274 +
 118.275 +struct rx_layer_ops gt_rx_packet_ops =
 118.276 +{
 118.277 +	rx_packet_init,
 118.278 +	rx_packet_destroy,
 118.279 +	rx_packet_enable,
 118.280 +	rx_packet_disable,
 118.281 +	rx_packet_recv,
 118.282 +};
 118.283 +
 118.284 +void gt_rx_packet_set_handler (struct rx_layer *rx,
 118.285 +                               rx_packet_handler_t handler,
 118.286 +                               void *udata)
 118.287 +{
 118.288 +	struct rx_packet *rx_packet = RX_PACKET(rx);
 118.289 +
 118.290 +	rx_packet->handler = handler;
 118.291 +	rx_packet->udata   = udata;
 118.292 +}
   119.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   119.2 +++ b/src/io/rx_packet.h	Sat Feb 20 21:18:28 2010 -0800
   119.3 @@ -0,0 +1,32 @@
   119.4 +/*
   119.5 + * $Id: rx_packet.h,v 1.3 2004/01/31 13:33:17 hipnod Exp $
   119.6 + *
   119.7 + * Copyright (C) 2003 giFT project (gift.sourceforge.net)
   119.8 + *
   119.9 + * This program is free software; you can redistribute it and/or modify it
  119.10 + * under the terms of the GNU General Public License as published by the
  119.11 + * Free Software Foundation; either version 2, or (at your option) any
  119.12 + * later version.
  119.13 + *
  119.14 + * This program is distributed in the hope that it will be useful, but
  119.15 + * WITHOUT ANY WARRANTY; without even the implied warranty of
  119.16 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
  119.17 + * General Public License for more details.
  119.18 + */
  119.19 +
  119.20 +#ifndef GIFT_GT_IO_RX_PACKET_H_
  119.21 +#define GIFT_GT_IO_RX_PACKET_H_
  119.22 +
  119.23 +/*****************************************************************************/
  119.24 +
  119.25 +typedef void (*rx_packet_handler_t) (void *udata, struct gt_packet *packet);
  119.26 +
  119.27 +extern struct rx_layer_ops gt_rx_packet_ops;
  119.28 +
  119.29 +void             gt_rx_packet_set_handler (struct rx_layer *rx,
  119.30 +                                           rx_packet_handler_t handler,
  119.31 +                                           void *udata);
  119.32 +
  119.33 +/*****************************************************************************/
  119.34 +
  119.35 +#endif /* GIFT_GT_IO_RX_PACKET_H_ */
   120.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   120.2 +++ b/src/io/rx_stack.c	Sat Feb 20 21:18:28 2010 -0800
   120.3 @@ -0,0 +1,318 @@
   120.4 +/*
   120.5 + * $Id: rx_stack.c,v 1.8 2004/02/01 08:17:12 hipnod Exp $
   120.6 + *
   120.7 + * Copyright (C) 2003 giFT project (gift.sourceforge.net)
   120.8 + *
   120.9 + * This program is free software; you can redistribute it and/or modify it
  120.10 + * under the terms of the GNU General Public License as published by the
  120.11 + * Free Software Foundation; either version 2, or (at your option) any
  120.12 + * later version.
  120.13 + *
  120.14 + * This program is distributed in the hope that it will be useful, but
  120.15 + * WITHOUT ANY WARRANTY; without even the implied warranty of
  120.16 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
  120.17 + * General Public License for more details.
  120.18 + */
  120.19 +
  120.20 +#include "gt_gnutella.h"
  120.21 +#include "gt_node.h"
  120.22 +
  120.23 +#include "rx_stack.h"
  120.24 +#include "rx_layer.h"
  120.25 +#include "rx_link.h"
  120.26 +#include "rx_inflate.h"
  120.27 +#include "rx_packet.h"
  120.28 +
  120.29 +/*****************************************************************************/
  120.30 +
  120.31 +struct gt_rx_stack
  120.32 +{
  120.33 +	TCPC                  *c;
  120.34 +	BOOL                   inflated;
  120.35 +
  120.36 +	int                    depth;        /* how deep in the stack we have
  120.37 +	                                        currently called into the stack */
  120.38 +	BOOL                   aborted;      /* one of our layers bailed out */
  120.39 +	BOOL                   free_delayed; /* somebody called free during
  120.40 +	                                        message emission, and we delayed 
  120.41 +	                                        it for later */
  120.42 +	void                  *udata;
  120.43 +	struct rx_layer       *layers;
  120.44 +
  120.45 +	GtRxStackHandler       handler;
  120.46 +	GtRxStackCleanup       cleanup;
  120.47 +};
  120.48 +
  120.49 +static struct use_layer
  120.50 +{
  120.51 +	const char           *name;
  120.52 +	struct rx_layer_ops  *ops;
  120.53 +} layers[] =
  120.54 +{
  120.55 +	{ "rx_link",    &gt_rx_link_ops    },
  120.56 +	{ "rx_inflate", &gt_rx_inflate_ops },
  120.57 +	{ "rx_packet",  &gt_rx_packet_ops  },
  120.58 +};
  120.59 +
  120.60 +/*****************************************************************************/
  120.61 +
  120.62 +static void foreach_child (struct rx_layer *rx,
  120.63 +                           void (*exec)(struct rx_layer *rx, void *udata),
  120.64 +                           void *udata)
  120.65 +{
  120.66 +	struct rx_layer *next;
  120.67 +
  120.68 +	while (rx != NULL)
  120.69 +	{
  120.70 +		/* grab the next element first so the callback can call free */
  120.71 +		next = rx->lower;
  120.72 +
  120.73 +		exec (rx, udata);
  120.74 +
  120.75 +		rx = next;
  120.76 +	}
  120.77 +}
  120.78 +
  120.79 +static void disable_layer (struct rx_layer *rx, void *udata)
  120.80 +{
  120.81 +	gt_rx_layer_disable (rx);
  120.82 +}
  120.83 +
  120.84 +static void destroy_foreach (struct rx_layer *rx, void *udata)
  120.85 +{
  120.86 +	gt_rx_layer_free (rx);
  120.87 +}
  120.88 +
  120.89 +static void disable_all (GtRxStack *stack)
  120.90 +{
  120.91 +	struct rx_layer *layers = stack->layers;
  120.92 +
  120.93 +	/* we must be at the top layer already */
  120.94 +	assert (layers->upper == NULL);
  120.95 +
  120.96 +	foreach_child (layers, disable_layer, NULL);
  120.97 +}
  120.98 +
  120.99 +/*****************************************************************************/
 120.100 +
 120.101 +static struct rx_layer *push_layer (struct rx_layer *below,
 120.102 +                                    struct rx_layer *above)
 120.103 +{
 120.104 +	if (above)
 120.105 +		above->lower = below;
 120.106 +
 120.107 +	if (below)
 120.108 +		below->upper = above;
 120.109 +
 120.110 +	return above;
 120.111 +}
 120.112 +
 120.113 +static void free_all_layers (GtRxStack *stack)
 120.114 +{
 120.115 +	struct rx_layer *layers;
 120.116 +
 120.117 +	if (!stack)
 120.118 +		return;
 120.119 +
 120.120 +	layers = stack->layers;
 120.121 +
 120.122 +	if (!layers)
 120.123 +		return;
 120.124 +
 120.125 +	/* make sure we've stopped all processing on this layer */
 120.126 +	disable_all (stack);
 120.127 +
 120.128 +	/* call each layer's destroy method */
 120.129 +	foreach_child (layers, destroy_foreach, NULL);
 120.130 +}
 120.131 +
 120.132 +static struct rx_layer *alloc_layers (GtRxStack *stack, TCPC *c,
 120.133 +                                      BOOL rx_inflated)
 120.134 +{
 120.135 +	struct rx_layer  *layer     = NULL;
 120.136 +	struct rx_layer  *new_layer = NULL;
 120.137 +	void             *udata     = NULL;
 120.138 +	int               i;
 120.139 +
 120.140 +	for (i = 0; i < sizeof(layers) / sizeof(layers[0]); i++)
 120.141 +	{
 120.142 +		/* XXX */
 120.143 +		if (!strcmp (layers[i].name, "rx_link"))
 120.144 +			udata = c;
 120.145 +
 120.146 +		if (!strcmp (layers[i].name, "rx_inflate") && !rx_inflated)
 120.147 +			continue;
 120.148 +
 120.149 +		if (!(new_layer = gt_rx_layer_new (stack, layers[i].name,
 120.150 +		                                layers[i].ops, udata)))
 120.151 +		{
 120.152 +			foreach_child (layer, destroy_foreach, NULL);
 120.153 +			return NULL;
 120.154 +		}
 120.155 +
 120.156 +		layer = push_layer (layer, new_layer);
 120.157 +		udata = NULL;
 120.158 +	}
 120.159 +
 120.160 +	return layer;
 120.161 +}
 120.162 +
 120.163 +/*****************************************************************************/
 120.164 +
 120.165 +static void enable_layer (struct rx_layer *rx, void *udata)
 120.166 +{
 120.167 +	gt_rx_layer_enable (rx);
 120.168 +}
 120.169 +
 120.170 +GtRxStack *gt_rx_stack_new (GtNode *node, TCPC *c, BOOL rx_inflated)
 120.171 +{
 120.172 +	GtRxStack *stack;
 120.173 +	int        size;
 120.174 +
 120.175 +	if (!(stack = NEW (GtRxStack)))
 120.176 +		return NULL;
 120.177 +
 120.178 +	stack->c        = c;
 120.179 +	stack->inflated = rx_inflated;
 120.180 +
 120.181 +	if (!(stack->layers = alloc_layers (stack, c, rx_inflated)))
 120.182 +	{
 120.183 +		free (stack);
 120.184 +		return NULL;
 120.185 +	}
 120.186 +
 120.187 +	/* set the receive buf to a not large value */
 120.188 +	size = 4096;
 120.189 +
 120.190 +	if (setsockopt (c->fd, SOL_SOCKET, SO_RCVBUF, &size, sizeof (size)) != 0)
 120.191 +		GT->DBGSOCK (GT, c, "Error setting rcvbuf size: %s", GIFT_NETERROR());
 120.192 +
 120.193 +	/* enable each layer */
 120.194 +	foreach_child (stack->layers, enable_layer, NULL);
 120.195 +
 120.196 +	return stack;
 120.197 +}
 120.198 +
 120.199 +/*****************************************************************************/
 120.200 +
 120.201 +/* 
 120.202 + * Cleanup handling. This is a bit tricky, because both the owner of the
 120.203 + * stack and the stack itself may want to free the stack, and they both have
 120.204 + * to coordinate so only one of them does the free(). 
 120.205 + * 
 120.206 + * Also, the stack has to worry about the free happening whilst a message
 120.207 + * emission is taking place, and so has to unwind the stack to the top level
 120.208 + * to make sure it doesn't reference freed memory.
 120.209 + */
 120.210 +
 120.211 +static void free_stack (GtRxStack *stack)
 120.212 +{
 120.213 +	/*
 120.214 +	 * ->cleanup gets called from the lower layers, and only
 120.215 +	 * if something bad happened (socket close, etc).
 120.216 +	 */
 120.217 +	free_all_layers (stack);
 120.218 +	FREE (stack);
 120.219 +}
 120.220 +
 120.221 +void gt_rx_stack_free (GtRxStack *stack)
 120.222 +{
 120.223 +	if (!stack)
 120.224 +		return;
 120.225 +
 120.226 +	/*
 120.227 +	 * If we in the middle of a reception when someone calls this function
 120.228 +	 * [say by calling gt_node_disconenct()], we can't free right now
 120.229 +	 * because the data structures are still in use in the reception stack.
 120.230 +	 *
 120.231 +	 * So we queue the removal in that case, by setting free_delayed and
 120.232 +	 * freeing when the stack unwinds, just like when waiting to notify the
 120.233 +	 * stack's listener about gt_rx_stack_abort().
 120.234 +	 */
 120.235 +	if (stack->depth > 0)
 120.236 +	{
 120.237 +		/* we'll defer the real free until later */
 120.238 +		stack->free_delayed = TRUE;
 120.239 +
 120.240 +		/* we must stop processing */
 120.241 +		gt_rx_stack_abort (stack);
 120.242 +
 120.243 +		return;
 120.244 +	}
 120.245 +
 120.246 +	free_stack (stack);
 120.247 +}
 120.248 +
 120.249 +/* notify the user of the stack it's time to clean up this stack */
 120.250 +static void cleanup_notify (GtRxStack *stack)
 120.251 +{
 120.252 +	/*
 120.253 +	 * First, we check if our owner tried to call ->free on us already.
 120.254 +	 * If so, we don't notify them because they already are well aware we are
 120.255 +	 * on our way to oblivion.
 120.256 +	 */
 120.257 +	if (stack->free_delayed)
 120.258 +	{
 120.259 +		free_stack (stack);
 120.260 +		return;
 120.261 +	}
 120.262 +
 120.263 +	if (stack->aborted)
 120.264 +		stack->cleanup (stack->udata);
 120.265 +}
 120.266 +
 120.267 +void gt_rx_stack_recv_start (GtRxStack *stack)
 120.268 +{
 120.269 +	assert (stack->depth >= 0);
 120.270 +	stack->depth++;
 120.271 +}
 120.272 +
 120.273 +void gt_rx_stack_recv_end (GtRxStack *stack)
 120.274 +{
 120.275 +	assert (stack->depth > 0);
 120.276 +
 120.277 +	if (--stack->depth == 0)
 120.278 +		cleanup_notify (stack);
 120.279 +}
 120.280 +
 120.281 +/*
 120.282 + * RX layers call this function when something bad happens and they need
 120.283 + * to abort the stack processing.
 120.284 + *
 120.285 + * In other words, this is the "oh shit" function.
 120.286 + */
 120.287 +void gt_rx_stack_abort (GtRxStack *stack)
 120.288 +{
 120.289 +	disable_all (stack);
 120.290 +
 120.291 +	/* set the flag indicated this stack has been aborted while processing */
 120.292 +	stack->aborted = TRUE;
 120.293 +
 120.294 +	/*
 120.295 +	 * If we are in the middle of receiving some data, set stack->aborted
 120.296 +	 * so when the reception unwinds, we'll notify the owner of the
 120.297 +	 * stack's cleanup function.
 120.298 +	 */
 120.299 +	if (stack->depth > 0)
 120.300 +		return;
 120.301 +
 120.302 +	/* 
 120.303 +	 * This can happen from the bottom layer, if it hasn't passed any data to
 120.304 +	 * upper layers yet.  TODO: if the bottom layer was driven by the RX stack
 120.305 +	 * instead of rx_link, this wouldn't need to be here, i think..
 120.306 +	 */
 120.307 +	cleanup_notify (stack);
 120.308 +}
 120.309 +
 120.310 +void gt_rx_stack_set_handler (GtRxStack *stack, GtRxStackHandler handler,
 120.311 +                              GtRxStackCleanup cleanup, void *udata)
 120.312 +{
 120.313 +	stack->udata   = udata;
 120.314 +	stack->handler = handler;
 120.315 +	stack->cleanup = cleanup;
 120.316 +
 120.317 +	/*
 120.318 +	 * The topmost layer is rx_packet, so we can simply set the data.
 120.319 +	 */
 120.320 +	gt_rx_packet_set_handler (stack->layers, handler, udata);
 120.321 +}
   121.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   121.2 +++ b/src/io/rx_stack.h	Sat Feb 20 21:18:28 2010 -0800
   121.3 @@ -0,0 +1,57 @@
   121.4 +/*
   121.5 + * $Id: rx_stack.h,v 1.3 2003/09/19 00:10:30 hipnod Exp $
   121.6 + *
   121.7 + * Copyright (C) 2003 giFT project (gift.sourceforge.net)
   121.8 + *
   121.9 + * This program is free software; you can redistribute it and/or modify it
  121.10 + * under the terms of the GNU General Public License as published by the
  121.11 + * Free Software Foundation; either version 2, or (at your option) any
  121.12 + * later version.
  121.13 + *
  121.14 + * This program is distributed in the hope that it will be useful, but
  121.15 + * WITHOUT ANY WARRANTY; without even the implied warranty of
  121.16 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
  121.17 + * General Public License for more details.
  121.18 + */
  121.19 +
  121.20 +#ifndef GIFT_GT_RX_STACK_H_
  121.21 +#define GIFT_GT_RX_STACK_H_
  121.22 +
  121.23 +/*****************************************************************************/
  121.24 +
  121.25 +#include "gt_gnutella.h"
  121.26 +
  121.27 +/*****************************************************************************/
  121.28 +
  121.29 +#define IO_DEBUG             gt_config_get_int("io/debug=0")
  121.30 +
  121.31 +/*****************************************************************************/
  121.32 +
  121.33 +struct gt_rx_stack;
  121.34 +struct gt_node;
  121.35 +struct gt_packet;
  121.36 +
  121.37 +typedef struct gt_rx_stack GtRxStack;
  121.38 +
  121.39 +typedef void (*GtRxStackHandler) (void *udata, struct gt_packet *packet);
  121.40 +typedef void (*GtRxStackCleanup) (void *udata);
  121.41 +
  121.42 +/*****************************************************************************/
  121.43 +
  121.44 +GtRxStack     *gt_rx_stack_new          (struct gt_node *node, TCPC *c,
  121.45 +                                         BOOL rx_inflated);
  121.46 +void           gt_rx_stack_free         (GtRxStack *stack);
  121.47 +
  121.48 +void           gt_rx_stack_set_handler  (GtRxStack *stack,
  121.49 +                                         GtRxStackHandler handler,
  121.50 +                                         GtRxStackCleanup cleanup,
  121.51 +                                         void *udata);
  121.52 +
  121.53 +void           gt_rx_stack_recv_start   (GtRxStack *stack);
  121.54 +void           gt_rx_stack_recv_end     (GtRxStack *stack);
  121.55 +
  121.56 +void           gt_rx_stack_abort        (GtRxStack *stack);
  121.57 +
  121.58 +/*****************************************************************************/
  121.59 +
  121.60 +#endif /* GIFT_GT_RX_STACK_H_ */
   122.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   122.2 +++ b/src/io/tx_deflate.c	Sat Feb 20 21:18:28 2010 -0800
   122.3 @@ -0,0 +1,638 @@
   122.4 +/*
   122.5 + * $Id: tx_deflate.c,v 1.15 2004/05/02 08:55:00 hipnod Exp $
   122.6 + *
   122.7 + * Copyright (C) 2004 giFT project (gift.sourceforge.net)
   122.8 + *
   122.9 + * This program is free software; you can redistribute it and/or modify it
  122.10 + * under the terms of the GNU General Public License as published by the
  122.11 + * Free Software Foundation; either version 2, or (at your option) any
  122.12 + * later version.
  122.13 + *
  122.14 + * This program is distributed in the hope that it will be useful, but
  122.15 + * WITHOUT ANY WARRANTY; without even the implied warranty of
  122.16 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
  122.17 + * General Public License for more details.
  122.18 + */
  122.19 +
  122.20 +#include "gt_gnutella.h"
  122.21 +#include "gt_packet.h"       /* packet manipulation macros */
  122.22 +
  122.23 +#include "io/tx_stack.h"
  122.24 +#include "io/tx_layer.h"
  122.25 +#include "io/io_buf.h"
  122.26 +
  122.27 +#include <zlib.h>
  122.28 +
  122.29 +/*****************************************************************************/
  122.30 +
  122.31 +#define DEFLATE_DEBUG    0
  122.32 +
  122.33 +#if DEFLATE_DEBUG
  122.34 +#define DEFLATE_TRACEFN(tx) \
  122.35 +	GT->DBGSOCK (GT, tx->stack->c, "entered")
  122.36 +
  122.37 +#define DEFLATE_DUMP(tx_deflate) \
  122.38 +{ \
  122.39 +	if (DEFLATE_DEBUG) \
  122.40 +	{ \
  122.41 +		float percent = ((float)tx_deflate->nbytes_in - \
  122.42 +		                 tx_deflate->nbytes_out - tx_deflate->nbytes_unflushed) / \
  122.43 +		                 (float)tx_deflate->nbytes_in; \
  122.44 +\
  122.45 +		GT->DBGSOCK (GT, tx->stack->c, "in %lu out %lu flushed %lu unflushed %lu (flushing %d) " \
  122.46 +		             "ratio %.2f%% avg %.2f", \
  122.47 +		             (long)tx_deflate->nbytes_in, (long)tx_deflate->nbytes_out, \
  122.48 +		             (long)tx_deflate->nbytes_flushed, \
  122.49 +		             (long)tx_deflate->nbytes_unflushed, \
  122.50 +		             (long)tx_deflate->flushing, percent * 100.0, \
  122.51 +		             (double)tx_deflate->nbytes_out / \
  122.52 +		                     difftime (time (NULL), tx->stack->start_time)); \
  122.53 +	} \
  122.54 +}
  122.55 +#else /* !DEFLATE_DEBUG */
  122.56 +#define DEFLATE_TRACEFN(tx)
  122.57 +#define DEFLATE_DUMP(tx_deflate)
  122.58 +#endif /* DEFLATE_DEBUG */
  122.59 +
  122.60 +/*****************************************************************************/
  122.61 +
  122.62 +#define TX_DEFLATE_BUFSIZE  (1024 - 1)      /* -1 for auto-nullification */
  122.63 +
  122.64 +#define FLUSH_AFTER         (4096)          /* flush after this many bytes */
  122.65 +
  122.66 +#define NAGLE_TIMEOUT       (200 * MSEC)    /* 200 milliseconds */
  122.67 +
  122.68 +/*****************************************************************************/
  122.69 +
  122.70 +struct tx_deflate
  122.71 +{
  122.72 +	/* zlib data */
  122.73 +	z_stream       z;
  122.74 +
  122.75 +	/* compressed buffer */
  122.76 +	struct io_buf *buf;
  122.77 +
  122.78 +	/* Nagle timer that sends stored data after NAGLE_TIMEOUT milliseconds */
  122.79 +	timer_id       nagle_timer;
  122.80 +
  122.81 +	size_t         nbytes_in;        /* total uncompressed bytes  */
  122.82 +	size_t         nbytes_out;       /* total compressed bytes */
  122.83 +	size_t         nbytes_flushed;   /* total bytes written to lower layer */
  122.84 +	size_t         nbytes_unflushed; /* bytes currently waiting in z_stream */
  122.85 +
  122.86 +	/*
  122.87 +	 * Whether the zstream is currently being flushed, and so whether deflate
  122.88 +	 * must receive a Z_SYNC_FLUSH parameter to continue flushing.  The flush
  122.89 +	 * ends when deflate returns with avail_out > 0.
  122.90 +	 */
  122.91 +	BOOL           flushing;
  122.92 +
  122.93 +	/*
  122.94 +	 * When doing a flush, it's possible that there will be a partially
  122.95 +	 * filled buffer leftover.  If there's no new data that comes in, the data
  122.96 +	 * will be delayed again until more data comes from the upper layer.  This
  122.97 +	 * flag is set when this happens, so we know that we should flush the
  122.98 +	 * buffer to the lower layer as soon as possible, even if it isn't
  122.99 +	 * completely full.
 122.100 +	 */
 122.101 +	BOOL           delayed;
 122.102 +};
 122.103 +
 122.104 +/*****************************************************************************/
 122.105 +
 122.106 +static void start_nagle_timer (struct tx_layer *tx, struct tx_deflate *deflate);
 122.107 +static void stop_nagle_timer  (struct tx_layer *tx, struct tx_deflate *deflate);
 122.108 +
 122.109 +/*****************************************************************************/
 122.110 +
 122.111 +static void tx_deflate_enable (struct tx_layer *tx)
 122.112 +{
 122.113 +	/* TODO */
 122.114 +}
 122.115 +
 122.116 +static void tx_deflate_disable (struct tx_layer *tx)
 122.117 +{
 122.118 +	/* TODO */
 122.119 +}
 122.120 +
 122.121 +/*****************************************************************************/
 122.122 +
 122.123 +static void tx_deflate_toggle (struct tx_layer *tx, BOOL stop)
 122.124 +{
 122.125 +	/* nothing, we do not consume packets, only pass along */
 122.126 +}
 122.127 +
 122.128 +/*****************************************************************************/
 122.129 +
 122.130 +static BOOL alloc_buffer (struct tx_deflate *tx_deflate)
 122.131 +{
 122.132 +	if (tx_deflate->buf)
 122.133 +		return TRUE;
 122.134 +
 122.135 +	if (!(tx_deflate->buf = io_buf_new (TX_DEFLATE_BUFSIZE)))
 122.136 +		return FALSE;
 122.137 +
 122.138 +	return TRUE;
 122.139 +}
 122.140 +
 122.141 +static void finish_flush (struct tx_deflate *tx_deflate)
 122.142 +{
 122.143 +	tx_deflate->nbytes_unflushed = 0;
 122.144 +	tx_deflate->flushing         = FALSE;
 122.145 +}
 122.146 +
 122.147 +static tx_status_t flush_buffer (struct tx_layer *tx,
 122.148 +                                 struct tx_deflate *tx_deflate)
 122.149 +{
 122.150 +	tx_status_t ret;
 122.151 +	size_t      n;
 122.152 +
 122.153 +	DEFLATE_TRACEFN(tx);
 122.154 +
 122.155 +	n = io_buf_read_avail (tx_deflate->buf);
 122.156 +
 122.157 +	/*
 122.158 +	 * The buffer filled up.  Try to send again until the lower
 122.159 +	 * layer is saturated.
 122.160 +	 */
 122.161 +	ret = gt_tx_layer_queue (tx, tx_deflate->buf);
 122.162 +	assert (ret != TX_EMPTY);
 122.163 +
 122.164 +	if (ret == TX_ERROR || ret == TX_FULL)
 122.165 +		return ret;
 122.166 +
 122.167 +	tx_deflate->nbytes_flushed += n;
 122.168 +	assert (ret == TX_OK);
 122.169 +
 122.170 +	stop_nagle_timer (tx, tx_deflate);
 122.171 +
 122.172 +	tx_deflate->buf     = NULL;
 122.173 +	tx_deflate->delayed = FALSE;
 122.174 +
 122.175 +	return TX_OK;
 122.176 +}
 122.177 +
 122.178 +/*
 122.179 + * Try to flush the data inside the z_stream and send it to the layer beneath
 122.180 + * this one.
 122.181 + */
 122.182 +static tx_status_t flush_stream (struct tx_layer *tx,
 122.183 +                                 struct tx_deflate *tx_deflate)
 122.184 +{
 122.185 +	z_stream   *z   = &tx_deflate->z;
 122.186 +	tx_status_t ret;
 122.187 +	int         zret;
 122.188 +	size_t      wlen, old_avail;
 122.189 +
 122.190 +	DEFLATE_TRACEFN(tx);
 122.191 +
 122.192 +	if (!alloc_buffer (tx_deflate))
 122.193 +		return TX_ERROR;
 122.194 +
 122.195 +	old_avail = io_buf_write_avail (tx_deflate->buf);
 122.196 +
 122.197 +	z->avail_in  = 0;
 122.198 +	z->next_in   = NULL;  /* don't disrupt anything else */
 122.199 +	z->next_out  = io_buf_write_ptr (tx_deflate->buf);
 122.200 +	z->avail_out = old_avail;
 122.201 +
 122.202 +	zret = deflate (z, Z_SYNC_FLUSH);
 122.203 +
 122.204 +	/*
 122.205 +	 * If this is true we've already flushed all possible data.
 122.206 +	 */
 122.207 +	if (zret == Z_BUF_ERROR)
 122.208 +	{
 122.209 +		tx_deflate->flushing = FALSE;
 122.210 +
 122.211 +		/* send the stored data */
 122.212 +		if (io_buf_read_avail (tx_deflate->buf) > 0)
 122.213 +			return flush_buffer (tx, tx_deflate);
 122.214 +
 122.215 +		return TX_EMPTY;
 122.216 +	}
 122.217 +
 122.218 +	if (zret != Z_OK)
 122.219 +		return TX_ERROR;
 122.220 +
 122.221 +	wlen = old_avail - z->avail_out;
 122.222 +
 122.223 +	io_buf_push (tx_deflate->buf, wlen);
 122.224 +	tx_deflate->nbytes_out += wlen;
 122.225 +
 122.226 +	tx_deflate->flushing = TRUE;
 122.227 +
 122.228 +	/* if there is space, the flush completed successfully */
 122.229 +	if (z->avail_out > 0)
 122.230 +		finish_flush (tx_deflate);
 122.231 +
 122.232 +	if ((ret = flush_buffer (tx, tx_deflate) != TX_OK))
 122.233 +		return ret;
 122.234 +
 122.235 +	/* stop when the flush completes */
 122.236 +	if (!tx_deflate->flushing)
 122.237 +		return TX_OK;
 122.238 +
 122.239 +	/* tail recurse until the flush completes */
 122.240 +	return flush_stream (tx, tx_deflate);
 122.241 +}
 122.242 +
 122.243 +static BOOL deflate_nagle_timeout (struct tx_layer *tx)
 122.244 +{
 122.245 +	struct tx_deflate *tx_deflate = tx->udata;
 122.246 +	tx_status_t        ret;
 122.247 +
 122.248 +	DEFLATE_TRACEFN(tx);
 122.249 +
 122.250 +	/* this assertion means we have to disarm the timer when sending the
 122.251 +	 * buffer */
 122.252 +	assert (tx_deflate->buf != NULL);
 122.253 +
 122.254 +	ret = flush_stream (tx, tx_deflate);
 122.255 +
 122.256 +	/* no matter what, we disable the Nagle timer after this */
 122.257 +	stop_nagle_timer (tx, tx_deflate);
 122.258 +
 122.259 +	if (ret == TX_ERROR)
 122.260 +	{
 122.261 +		gt_tx_stack_abort (tx->stack);
 122.262 +		return FALSE;
 122.263 +	}
 122.264 +
 122.265 +	if (DEFLATE_DEBUG)
 122.266 +		GT->DBGSOCK (GT, tx->stack->c, "buffer delayed?: %d", tx_deflate->delayed);
 122.267 +
 122.268 +	return FALSE;
 122.269 +}
 122.270 +
 122.271 +static void start_nagle_timer (struct tx_layer *tx,
 122.272 +                               struct tx_deflate *tx_deflate)
 122.273 +{
 122.274 +	if (DEFLATE_DEBUG)
 122.275 +		GT->DBGSOCK (GT, tx->stack->c, "nagle timer=%d", tx_deflate->nagle_timer);
 122.276 +
 122.277 +	if (tx_deflate->nagle_timer != 0)
 122.278 +		return;
 122.279 +
 122.280 +	tx_deflate->nagle_timer = timer_add (NAGLE_TIMEOUT,
 122.281 +	                                     (TimerCallback)deflate_nagle_timeout,
 122.282 +	                                     tx);
 122.283 +}
 122.284 +
 122.285 +static void stop_nagle_timer (struct tx_layer *tx,
 122.286 +                              struct tx_deflate *tx_deflate)
 122.287 +{
 122.288 +	if (DEFLATE_DEBUG)
 122.289 +		GT->DBGSOCK (GT, tx->stack->c, "nagle timer=%d", tx_deflate->nagle_timer);
 122.290 +
 122.291 +	timer_remove_zero (&tx_deflate->nagle_timer);
 122.292 +}
 122.293 +
 122.294 +/*****************************************************************************/
 122.295 +
 122.296 +/*
 122.297 + * The upper layer has sent us a buffer to process.
 122.298 + */
 122.299 +static tx_status_t tx_deflate_queue (struct tx_layer *tx, struct io_buf *msg)
 122.300 +{
 122.301 +	struct tx_deflate *tx_deflate      = tx->udata;
 122.302 +	z_stream          *z               = &tx_deflate->z;
 122.303 +	BOOL               flush_completed = FALSE;
 122.304 +	int                ret;
 122.305 +
 122.306 +	DEFLATE_TRACEFN(tx);
 122.307 +
 122.308 +	/*
 122.309 +	 * Deflate the incoming message, adding it to the buffer.
 122.310 +	 *
 122.311 +	 * If our buffer is currently full, return TX_FULL.
 122.312 +	 */
 122.313 +
 122.314 +	if (!alloc_buffer (tx_deflate))
 122.315 +	{
 122.316 +		io_buf_free (msg);
 122.317 +		return TX_ERROR;
 122.318 +	}
 122.319 +
 122.320 +	z->next_in   = io_buf_read_ptr    (msg);
 122.321 +	z->avail_in  = io_buf_read_avail  (msg);
 122.322 +	z->next_out  = io_buf_write_ptr   (tx_deflate->buf);
 122.323 +	z->avail_out = io_buf_write_avail (tx_deflate->buf);
 122.324 +
 122.325 +	if (z->avail_out == 0)
 122.326 +		return TX_FULL;
 122.327 +
 122.328 +	while (io_buf_read_avail (msg) > 0 && z->avail_out > 0)
 122.329 +	{
 122.330 +		size_t rlen, wlen;
 122.331 +
 122.332 +		assert (z->next_in == io_buf_read_ptr (msg));
 122.333 +		assert (z->next_out == io_buf_write_ptr (tx_deflate->buf));
 122.334 +
 122.335 +		/* begin flushing after a certain amount */
 122.336 +		if (tx_deflate->nbytes_unflushed >= FLUSH_AFTER)
 122.337 +			tx_deflate->flushing = TRUE;
 122.338 +
 122.339 +		ret = deflate (z, tx_deflate->flushing ? Z_SYNC_FLUSH : 0);
 122.340 +
 122.341 +		if (ret != Z_OK)
 122.342 +		{
 122.343 +			GT->DBGFN (GT, "deflate: error %d", ret);
 122.344 +			io_buf_free (msg);
 122.345 +			return TX_ERROR;
 122.346 +		}
 122.347 +
 122.348 +		rlen = io_buf_read_avail (msg) - z->avail_in;
 122.349 +		wlen = io_buf_write_avail (tx_deflate->buf) - z->avail_out;
 122.350 +		assert (rlen > 0 || wlen > 0); /* hmm, is this true when flushing? */
 122.351 +#if 0
 122.352 +		assert (wlen > 0);
 122.353 +#endif
 122.354 +
 122.355 +		tx_deflate->nbytes_in        += rlen;
 122.356 +		tx_deflate->nbytes_unflushed += rlen;
 122.357 +		tx_deflate->nbytes_out       += wlen;
 122.358 +
 122.359 +		DEFLATE_DUMP(tx_deflate);
 122.360 +
 122.361 +		/* update the buffer lengths */
 122.362 +		io_buf_push (tx_deflate->buf, wlen);
 122.363 +		io_buf_pop  (msg, rlen);
 122.364 +
 122.365 +		if (z->avail_out == 0)
 122.366 +			break;
 122.367 +
 122.368 +		/*
 122.369 +		 * If we have available output space and no more input space,
 122.370 +		 * we know the flush completed, so unset flush mode.
 122.371 +		 *
 122.372 +		 * NOTE: there might be a bug here.  The flush may fit exactly
 122.373 +		 * everytime, causing us to never leave flush mode.  I think zlib may
 122.374 +		 * try to prevent this itself, though.
 122.375 +		 */
 122.376 +		if (tx_deflate->flushing && z->avail_in == 0)
 122.377 +		{
 122.378 +			flush_completed = TRUE;
 122.379 +			finish_flush (tx_deflate);
 122.380 +		}
 122.381 +	}
 122.382 +
 122.383 +	/*
 122.384 +	 * If we completed a flush, and the buffer isn't full, set the delayed
 122.385 +	 * flag so that service_deflate() will write the buffer immediately to
 122.386 +	 * reduce latency, as it has already endured a Nagle timeout period.
 122.387 +	 */
 122.388 +	if (flush_completed &&
 122.389 +	    io_buf_read_avail (tx_deflate->buf) < TX_DEFLATE_BUFSIZE)
 122.390 +	{
 122.391 +		if (DEFLATE_DEBUG)
 122.392 +		{
 122.393 +			GT->DBGSOCK (GT, tx->stack->c, "setting ->delayed flag on buf(%d)",
 122.394 +			           io_buf_read_avail (tx_deflate->buf));
 122.395 +		}
 122.396 +
 122.397 +		tx_deflate->delayed = TRUE;
 122.398 +	}
 122.399 +
 122.400 +	/*
 122.401 +	 * If the message buffer was only partially emptied, don't free
 122.402 +	 * it and let tx_layer.c know to handle it specially.
 122.403 +	 */
 122.404 +	if (io_buf_read_avail (msg) > 0)
 122.405 +		return TX_PARTIAL;
 122.406 +
 122.407 +	io_buf_free (msg);
 122.408 +
 122.409 +	return TX_OK;
 122.410 +}
 122.411 +
 122.412 +/*****************************************************************************/
 122.413 +
 122.414 +/*
 122.415 + * Get more data to write.
 122.416 + */
 122.417 +static tx_status_t get_buffers (struct tx_layer *tx,
 122.418 +                                struct tx_deflate *tx_deflate)
 122.419 +{
 122.420 +	if (tx_deflate->buf && io_buf_write_avail (tx_deflate->buf) == 0)
 122.421 +		return TX_OK;
 122.422 +
 122.423 +	return gt_tx_layer_ready (tx);
 122.424 +}
 122.425 +
 122.426 +/*
 122.427 + * This is the most complicated part of the whole stack:
 122.428 + *
 122.429 + * [1] Call upper layer's ready routine to grab a buffer (gt_tx_layer_ready).
 122.430 + *
 122.431 + * [2] That function will call tx_deflate_queue, which compresses the data to
 122.432 + *     a buffer, as many times as it can while there's more data to process.
 122.433 + *
 122.434 + * [3] If we didn't fill the buffer, or there was no data, return TX_EMPTY
 122.435 + *     telling the lower layer there is no data.
 122.436 + *
 122.437 + * [4] If there's no data in the upper layer, but we're in flush mode, call
 122.438 + *     flush_stream() to send whatever data is stored inside the z_stream,
 122.439 + *     and stop.
 122.440 + *
 122.441 + * [5] If we filled the buffer, or if we have a paritally filled buffer that
 122.442 + *     was delayed in deflate_nagle_timeout(), send it to the lower layer with
 122.443 + *     flush_buffer().  If the lower layer returns TX_FULL, stop and return
 122.444 + *     TX_OK.  Otherwise, continue by calling this function recursively.
 122.445 + *
 122.446 + *     NOTE: The buffer is filled in tx_deflate_queue but sent in this
 122.447 + *     function (or from the Nagle timer if the buffer isn't full).
 122.448 + *
 122.449 + * The caller of this function has to setup a Nagle timer if any data was
 122.450 + * written and TX_FULL was not encountered.
 122.451 + */
 122.452 +static tx_status_t service_deflate (struct tx_layer *tx,
 122.453 +                                    struct tx_deflate *tx_deflate)
 122.454 +{
 122.455 +	tx_status_t ret;
 122.456 +
 122.457 +	DEFLATE_TRACEFN(tx);
 122.458 +
 122.459 +	/* [1] + [2] */
 122.460 +	ret = get_buffers (tx, tx_deflate);
 122.461 +
 122.462 +	if (ret == TX_ERROR)
 122.463 +		return TX_ERROR;
 122.464 +
 122.465 +	/* [3] */
 122.466 +	if (ret == TX_EMPTY)
 122.467 +	{
 122.468 +		assert (ret == TX_EMPTY);
 122.469 +
 122.470 +		/* [4]: continue flush even if no data avail */
 122.471 +		if (tx_deflate->flushing)
 122.472 +			ret = flush_stream (tx, tx_deflate);
 122.473 +
 122.474 +		return ret;
 122.475 +	}
 122.476 +
 122.477 +	assert (tx_deflate->buf != NULL);
 122.478 +
 122.479 +	if (DEFLATE_DEBUG)
 122.480 +	{
 122.481 +		if (tx_deflate->delayed)
 122.482 +		{
 122.483 +			GT->DBGSOCK (GT, tx->stack->c, "flushing delayed buf(%d)",
 122.484 +			             io_buf_read_avail (tx_deflate->buf));
 122.485 +		}
 122.486 +	}
 122.487 +
 122.488 +	assert (ret == TX_OK);
 122.489 +
 122.490 +	/*
 122.491 +	 * [5]
 122.492 +	 *
 122.493 +	 * flush_buffer will stop the Nagle timer if the buffer was
 122.494 +	 * successfully sent.
 122.495 +	 *
 122.496 +	 * We must also flush the buffer if it contains partial data from a
 122.497 +	 * previous flush that was delayed in the Nagle timer due to having no
 122.498 +	 * space.
 122.499 +	 */
 122.500 +	if (tx_deflate->delayed || io_buf_write_avail (tx_deflate->buf) == 0)
 122.501 +		ret = flush_buffer (tx, tx_deflate);
 122.502 +
 122.503 +	if (ret != TX_OK)
 122.504 +		return ret;
 122.505 +
 122.506 +	/* tail recurse until the lower layer is saturated */
 122.507 +	return service_deflate (tx, tx_deflate);
 122.508 +}
 122.509 +
 122.510 +/*
 122.511 + * The lower layer is ready to write.
 122.512 + */
 122.513 +static tx_status_t tx_deflate_ready (struct tx_layer *tx)
 122.514 +{
 122.515 +	struct tx_deflate *tx_deflate  = tx->udata;
 122.516 +	size_t             old_flushed;
 122.517 +	tx_status_t        ret;
 122.518 +
 122.519 +	/* keep track of how much was previously flushed */
 122.520 +	old_flushed = tx_deflate->nbytes_flushed;
 122.521 +
 122.522 +	ret = service_deflate (tx, tx_deflate);
 122.523 +
 122.524 +	if (ret == TX_ERROR || ret == TX_FULL)
 122.525 +	{
 122.526 +		if (ret == TX_FULL)
 122.527 +		{
 122.528 +			/* flush buffer shouldve deactivated the Nagle timer */
 122.529 +			assert (tx_deflate->nagle_timer == 0);
 122.530 +
 122.531 +			/* we wrote something -- let caller know it's ok */
 122.532 +			ret = TX_OK;
 122.533 +		}
 122.534 +
 122.535 +		return ret;
 122.536 +	}
 122.537 +
 122.538 +	assert (ret == TX_OK || ret == TX_EMPTY);
 122.539 +
 122.540 +	/*
 122.541 +	 * If the lower layer was not saturated (evidenced by _not_ returning
 122.542 +	 * TX_FULL), and there is a partially completed buffer, the Nagle
 122.543 +	 * timer must be armed.  This ensures the data waiting in this layer will
 122.544 +	 * go out in a timely manner.  If the lower layer was saturated, we don't
 122.545 +	 * need to arm the timer because there is no buffer space to flush to
 122.546 +	 * anyway, and when the lower layer unsaturates it will reinvoke this
 122.547 +	 * layer to write more data.
 122.548 +	 *
 122.549 +	 * TODO: Still need to flush if there is some urgent data waiting.  So,
 122.550 +	 * should add a ->flush callback.
 122.551 +	 *
 122.552 +	 * XXX: Using tx_deflate->buf != NULL as a hacky way to recognize that
 122.553 +	 * some data was written to the z_stream.
 122.554 +	 */
 122.555 +	if (tx_deflate->buf != NULL)
 122.556 +		start_nagle_timer (tx, tx_deflate);
 122.557 +
 122.558 +	if (DEFLATE_DEBUG)
 122.559 +	{
 122.560 +		GT->DBGSOCK (GT, tx->stack->c, "buf waiting=[%d] ret=%s",
 122.561 +		             tx_deflate->buf ? io_buf_read_avail (tx_deflate->buf) : 0,
 122.562 +		             ret == TX_EMPTY ? "TX_EMPTY" : "TX_OK");
 122.563 +	}
 122.564 +
 122.565 +	DEFLATE_DUMP(tx_deflate);
 122.566 +
 122.567 +	/*
 122.568 +	 * For the return value from this function, decipher whether
 122.569 +	 * service_deflate() wrote some data.
 122.570 +	 *
 122.571 +	 * If nothing was written, then we should stop sending now, by returning
 122.572 +	 * TX_EMPTY.  That will remove the input in tx_link.c that's calling this
 122.573 +	 * layer, which kind of sucks, because this could be the case a lot of the
 122.574 +	 * time when the whole buffer hasn't been filled up, leading to a removing
 122.575 +	 * and adding the input a lot.
 122.576 +	 *
 122.577 +	 * Otherwise, return TX_OK if something was sent to the lower layer.
 122.578 +	 */
 122.579 +	if (old_flushed == tx_deflate->nbytes_flushed)
 122.580 +		return TX_EMPTY;
 122.581 +
 122.582 +	return TX_OK;
 122.583 +}
 122.584 +
 122.585 +/*****************************************************************************/
 122.586 +
 122.587 +static BOOL tx_deflate_init (struct tx_layer *tx)
 122.588 +{
 122.589 +	struct tx_deflate *tx_deflate;
 122.590 +
 122.591 +	if (!(tx_deflate = malloc (sizeof(*tx_deflate))))
 122.592 +		return FALSE;
 122.593 +
 122.594 +	/* zlib documents these variables as needing initialization before
 122.595 +	 * deflateInit() */
 122.596 +	tx_deflate->z.zalloc = Z_NULL;
 122.597 +	tx_deflate->z.zfree  = Z_NULL;
 122.598 +	tx_deflate->z.opaque = Z_NULL;
 122.599 +
 122.600 +	if (deflateInit (&tx_deflate->z, Z_DEFAULT_COMPRESSION) != Z_OK)
 122.601 +	{
 122.602 +		FREE (tx_deflate);
 122.603 +		return FALSE;
 122.604 +	}
 122.605 +
 122.606 +	tx_deflate->buf              = NULL;
 122.607 +	tx_deflate->nagle_timer      = 0;
 122.608 +	tx_deflate->nbytes_in        = 0;
 122.609 +	tx_deflate->nbytes_out       = 0;
 122.610 +	tx_deflate->nbytes_flushed   = 0;
 122.611 +	tx_deflate->nbytes_unflushed = 0;
 122.612 +	tx_deflate->flushing         = FALSE;
 122.613 +	tx_deflate->delayed          = FALSE;
 122.614 +
 122.615 +	tx->udata = tx_deflate;
 122.616 +	return TRUE;
 122.617 +}
 122.618 +
 122.619 +static void tx_deflate_destroy (struct tx_layer *tx)
 122.620 +{
 122.621 +	struct tx_deflate *tx_deflate = tx->udata;
 122.622 +
 122.623 +	io_buf_free (tx_deflate->buf);
 122.624 +	timer_remove (tx_deflate->nagle_timer);
 122.625 +
 122.626 +	deflateEnd (&tx_deflate->z);
 122.627 +	FREE (tx_deflate);
 122.628 +}
 122.629 +
 122.630 +/*****************************************************************************/
 122.631 +
 122.632 +struct tx_layer_ops gt_tx_deflate_ops =
 122.633 +{
 122.634 +	tx_deflate_init,
 122.635 +	tx_deflate_destroy,
 122.636 +	tx_deflate_toggle,
 122.637 +	tx_deflate_queue,
 122.638 +	tx_deflate_ready,
 122.639 +	tx_deflate_enable,
 122.640 +	tx_deflate_disable,
 122.641 +};
   123.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   123.2 +++ b/src/io/tx_layer.c	Sat Feb 20 21:18:28 2010 -0800
   123.3 @@ -0,0 +1,150 @@
   123.4 +/*
   123.5 + * $Id: tx_layer.c,v 1.7 2004/03/24 06:37:30 hipnod Exp $
   123.6 + *
   123.7 + * Copyright (C) 2003 giFT project (gift.sourceforge.net)
   123.8 + *
   123.9 + * This program is free software; you can redistribute it and/or modify it
  123.10 + * under the terms of the GNU General Public License as published by the
  123.11 + * Free Software Foundation; either version 2, or (at your option) any
  123.12 + * later version.
  123.13 + *
  123.14 + * This program is distributed in the hope that it will be useful, but
  123.15 + * WITHOUT ANY WARRANTY; without even the implied warranty of
  123.16 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
  123.17 + * General Public License for more details.
  123.18 + */
  123.19 +
  123.20 +#include "gt_gnutella.h"
  123.21 +
  123.22 +#include "io/tx_stack.h"
  123.23 +#include "io/tx_layer.h"
  123.24 +#include "io/io_buf.h"
  123.25 +
  123.26 +/*****************************************************************************/
  123.27 +
  123.28 +struct tx_layer *gt_tx_layer_new (GtTxStack *stack, const char *name,
  123.29 +                                  struct tx_layer_ops *ops)
  123.30 +{
  123.31 +	struct tx_layer *tx;
  123.32 +
  123.33 +	if (!(tx = NEW (struct tx_layer)))
  123.34 +		return NULL;
  123.35 +
  123.36 +	tx->ops         = ops;
  123.37 +	tx->name        = name;
  123.38 +	tx->stack       = stack;
  123.39 +	tx->partial_buf = NULL;
  123.40 +
  123.41 +	if (!ops->init (tx))
  123.42 +	{
  123.43 +		free (tx);
  123.44 +		return NULL;
  123.45 +	}
  123.46 +
  123.47 +	return tx;
  123.48 +}
  123.49 +
  123.50 +void gt_tx_layer_free (struct tx_layer *layer)
  123.51 +{
  123.52 +	if (!layer)
  123.53 +		return;
  123.54 +
  123.55 +	io_buf_free (layer->partial_buf);
  123.56 +
  123.57 +	layer->ops->destroy (layer);
  123.58 +
  123.59 +	FREE (layer);
  123.60 +}
  123.61 +
  123.62 +/*****************************************************************************/
  123.63 +
  123.64 +static tx_status_t queue_data (struct tx_layer *tx, struct io_buf *io_buf)
  123.65 +{
  123.66 +	tx_status_t ret;
  123.67 +
  123.68 +	ret = tx->ops->queue (tx, io_buf);
  123.69 +
  123.70 +	/*
  123.71 +	 * If the message didn't get completely written, buffer the partial
  123.72 +	 * message buffer until it's finished.
  123.73 +	 */
  123.74 +	if (ret == TX_PARTIAL)
  123.75 +	{
  123.76 +		assert (io_buf_read_avail (io_buf) > 0);
  123.77 +
  123.78 +		tx->partial_buf = io_buf;
  123.79 +		return TX_OK;
  123.80 +	}
  123.81 +
  123.82 +	return ret;
  123.83 +}
  123.84 +
  123.85 +/* send a message to the layer underneath this one */
  123.86 +tx_status_t gt_tx_layer_queue (struct tx_layer *tx, struct io_buf *io_buf)
  123.87 +{
  123.88 +	struct tx_layer *lower = tx->lower;
  123.89 +
  123.90 +	if (lower->partial_buf)
  123.91 +		return TX_FULL;
  123.92 +
  123.93 +	return queue_data (lower, io_buf);
  123.94 +}
  123.95 +
  123.96 +/* let upper layer know we're writable and get data from it */
  123.97 +tx_status_t gt_tx_layer_ready (struct tx_layer *tx)
  123.98 +{
  123.99 +	struct tx_layer *upper;
 123.100 +	tx_status_t      ret;
 123.101 +
 123.102 +	upper = tx->upper;
 123.103 +
 123.104 +	/*
 123.105 +	 * If there is a partially written buffer on the layer, try to finish it
 123.106 +	 * off before asking for more data by pretending the upper layer tried to
 123.107 +	 * write it.
 123.108 +	 *
 123.109 +	 * Doing this avoids a special case in each layer where a partial buffer
 123.110 +	 * is kept set aside and checked before calling gt_tx_layer_ready(), leading
 123.111 +	 * to less code.
 123.112 +	 */
 123.113 +	if (tx->partial_buf)
 123.114 +	{
 123.115 +		struct io_buf *io_buf = tx->partial_buf;
 123.116 +
 123.117 +		tx->partial_buf = NULL;
 123.118 +
 123.119 +		/* this ends up calling this layer's queue func */
 123.120 +		ret = queue_data (tx, io_buf);
 123.121 +
 123.122 +		/*
 123.123 +		 * Can't happen because layer wouldn't have invoked us.
 123.124 +		 */
 123.125 +		assert (ret != TX_FULL);
 123.126 +		assert (ret != TX_EMPTY);
 123.127 +
 123.128 +		/*
 123.129 +		 * Upper layer can't be safely invoked again, even if the partial
 123.130 +		 * buffer was completed, because we don't know if the lower layer has
 123.131 +		 * any more room.  So, the lower layer must reinvoke tx_layer_ready()
 123.132 +		 * to write more data.
 123.133 +		 */
 123.134 +		return ret;
 123.135 +	}
 123.136 +
 123.137 +	ret = upper->ops->ready (upper);
 123.138 +	assert (ret != TX_FULL);
 123.139 +
 123.140 +	return ret;
 123.141 +}
 123.142 +
 123.143 +/*****************************************************************************/
 123.144 +
 123.145 +void gt_tx_layer_enable (struct tx_layer *layer)
 123.146 +{
 123.147 +	layer->ops->enable (layer);
 123.148 +}
 123.149 +
 123.150 +void gt_tx_layer_disable (struct tx_layer *layer)
 123.151 +{
 123.152 +	layer->ops->disable (layer);
 123.153 +}
   124.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   124.2 +++ b/src/io/tx_layer.h	Sat Feb 20 21:18:28 2010 -0800
   124.3 @@ -0,0 +1,96 @@
   124.4 +/*
   124.5 + * $Id: tx_layer.h,v 1.5 2004/01/31 13:33:17 hipnod Exp $
   124.6 + *
   124.7 + * Copyright (C) 2003 giFT project (gift.sourceforge.net)
   124.8 + *
   124.9 + * This program is free software; you can redistribute it and/or modify it
  124.10 + * under the terms of the GNU General Public License as published by the
  124.11 + * Free Software Foundation; either version 2, or (at your option) any
  124.12 + * later version.
  124.13 + *
  124.14 + * This program is distributed in the hope that it will be useful, but
  124.15 + * WITHOUT ANY WARRANTY; without even the implied warranty of
  124.16 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
  124.17 + * General Public License for more details.
  124.18 + */
  124.19 +
  124.20 +#ifndef GIFT_GT_TX_LAYER_H_
  124.21 +#define GIFT_GT_TX_LAYER_H_
  124.22 +
  124.23 +/*****************************************************************************/
  124.24 +
  124.25 +struct tx_layer_ops;
  124.26 +struct tx_layer;
  124.27 +
  124.28 +struct io_buf;
  124.29 +struct gt_tx_stack;
  124.30 +
  124.31 +/*
  124.32 + * Return codes from the TX stack functions that lets the caller know
  124.33 + * what processing occured.
  124.34 + */
  124.35 +typedef enum tx_status
  124.36 +{
  124.37 +	TX_OK,
  124.38 +	TX_FULL,             /* lower layer became saturated */
  124.39 +	TX_EMPTY,            /* no waiting data */
  124.40 +	TX_PARTIAL,          /* buffer partially read */
  124.41 +	TX_ERROR,            /* general error */
  124.42 +} tx_status_t;
  124.43 +
  124.44 +struct tx_layer_ops
  124.45 +{
  124.46 +	BOOL        (*init)       (struct tx_layer *tx);
  124.47 +	void        (*destroy)    (struct tx_layer *tx);
  124.48 +
  124.49 +	/*
  124.50 +	 * If the layer is capable of consuming data (for example
  124.51 +	 * by sending it out on a connection), begin or stop flushing by obeying
  124.52 +	 * the 'stop' argument.  Only the bottommost layer in a stack
  124.53 +	 * should implement this.
  124.54 +	 */
  124.55 +	void        (*toggle)     (struct tx_layer *tx, BOOL stop);
  124.56 +
  124.57 +	/* upper layer has sent us a buffer */
  124.58 +	tx_status_t (*queue)      (struct tx_layer *tx, struct io_buf *io_buf);
  124.59 +
  124.60 +	/* lower layer wants us to send a buffer */
  124.61 +	tx_status_t (*ready)      (struct tx_layer *tx);   /* lower layer wants data */
  124.62 +
  124.63 +	/* enable/disable this layer completely */
  124.64 +	void        (*enable)     (struct tx_layer *tx);
  124.65 +	void        (*disable)    (struct tx_layer *tx);
  124.66 +};
  124.67 +
  124.68 +struct tx_layer
  124.69 +{
  124.70 +	void                *udata;
  124.71 +	struct tx_layer_ops *ops;
  124.72 +
  124.73 +	struct tx_layer     *upper;
  124.74 +	struct tx_layer     *lower;
  124.75 +
  124.76 +	/* leftovers from previous queue operations */
  124.77 +	struct io_buf       *partial_buf;
  124.78 +
  124.79 +	struct gt_tx_stack  *stack;
  124.80 +	const char          *name;
  124.81 +};
  124.82 +
  124.83 +/*****************************************************************************/
  124.84 +
  124.85 +struct tx_layer *gt_tx_layer_new      (struct gt_tx_stack *stack,
  124.86 +                                       const char *name,
  124.87 +                                       struct tx_layer_ops *ops);
  124.88 +void             gt_tx_layer_free     (struct tx_layer *layer);
  124.89 +
  124.90 +void             gt_tx_layer_enable   (struct tx_layer *layer);
  124.91 +void             gt_tx_layer_disable  (struct tx_layer *layer);
  124.92 +
  124.93 +tx_status_t      gt_tx_layer_queue    (struct tx_layer *layer,
  124.94 +                                       struct io_buf *buf);
  124.95 +tx_status_t      gt_tx_layer_ready    (struct tx_layer *layer);
  124.96 +
  124.97 +/*****************************************************************************/
  124.98 +
  124.99 +#endif /* GIFT_GT_TX_LAYER_H_ */
   125.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   125.2 +++ b/src/io/tx_link.c	Sat Feb 20 21:18:28 2010 -0800
   125.3 @@ -0,0 +1,279 @@
   125.4 +/*
   125.5 + * $Id: tx_link.c,v 1.10 2004/05/02 08:55:00 hipnod Exp $
   125.6 + *
   125.7 + * Copyright (C) 2003 giFT project (gift.sourceforge.net)
   125.8 + *
   125.9 + * This program is free software; you can redistribute it and/or modify it
  125.10 + * under the terms of the GNU General Public License as published by the
  125.11 + * Free Software Foundation; either version 2, or (at your option) any
  125.12 + * later version.
  125.13 + *
  125.14 + * This program is distributed in the hope that it will be useful, but
  125.15 + * WITHOUT ANY WARRANTY; without even the implied warranty of
  125.16 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
  125.17 + * General Public License for more details.
  125.18 + */
  125.19 +
  125.20 +#include "gt_gnutella.h"
  125.21 +
  125.22 +#include "io/tx_stack.h"
  125.23 +#include "io/tx_layer.h"
  125.24 +#include "io/io_buf.h"
  125.25 +
  125.26 +/*****************************************************************************/
  125.27 +
  125.28 +#define LINK_DEBUG 0
  125.29 +
  125.30 +/*****************************************************************************/
  125.31 +
  125.32 +struct tx_link
  125.33 +{
  125.34 +	input_id       id;
  125.35 +	struct io_buf *buf;
  125.36 +#if 0
  125.37 +	TCPC          *c;
  125.38 +#endif
  125.39 +};
  125.40 +
  125.41 +/*****************************************************************************/
  125.42 +
  125.43 +static void deactivate_queue    (struct tx_layer *tx);
  125.44 +static void activate_queue      (struct tx_layer *tx);
  125.45 +
  125.46 +/*****************************************************************************/
  125.47 +
  125.48 +static BOOL tx_link_init (struct tx_layer *tx)
  125.49 +{
  125.50 +	struct tx_link *tx_link;
  125.51 +
  125.52 +	if (!(tx_link = NEW (struct tx_link)))
  125.53 +		return FALSE;
  125.54 +
  125.55 +	tx_link->id  = 0;
  125.56 +	tx_link->buf = NULL;
  125.57 +
  125.58 +	/* store our layer-specific info in the toplevel layer */
  125.59 +	tx->udata = tx_link;
  125.60 +
  125.61 +	return TRUE;
  125.62 +}
  125.63 +
  125.64 +static void tx_link_destroy (struct tx_layer *tx)
  125.65 +{
  125.66 +	struct tx_link *tx_link = tx->udata;
  125.67 +
  125.68 +	input_remove (tx_link->id);
  125.69 +	tx_link->id = 0;
  125.70 +
  125.71 +	io_buf_free (tx_link->buf);
  125.72 +
  125.73 +	FREE (tx_link);
  125.74 +}
  125.75 +
  125.76 +/*****************************************************************************/
  125.77 +
  125.78 +static const char *tx_status_str (tx_status_t ret)
  125.79 +{
  125.80 +	switch (ret)
  125.81 +	{
  125.82 +	 case TX_EMPTY: return "TX_EMPTY";
  125.83 +	 case TX_FULL:  return "TX_FULL";
  125.84 +	 case TX_ERROR: return "TX_ERROR";
  125.85 +	 case TX_OK:    return "TX_OK";
  125.86 +	 case TX_PARTIAL: return "TX_PARTIAL";
  125.87 +	 default:       return "TX_UNKNOWN";
  125.88 +	}
  125.89 +}
  125.90 +
  125.91 +static tx_status_t request_more_data (struct tx_layer *tx)
  125.92 +{
  125.93 +	int ret;
  125.94 +
  125.95 +	/*
  125.96 +	 * Ask the layer above this one to send this layer data.
  125.97 +	 */
  125.98 +	if ((ret = gt_tx_layer_ready (tx)) == TX_ERROR)
  125.99 +		return TX_ERROR;
 125.100 +
 125.101 +	if (LINK_DEBUG)
 125.102 +		GT->DBGSOCK (GT, tx->stack->c, "ret=%s", tx_status_str (ret));
 125.103 +
 125.104 +	return ret;
 125.105 +}
 125.106 +
 125.107 +static tx_status_t tx_link_process (struct tx_layer *tx, struct io_buf *io_buf)
 125.108 +{
 125.109 +	uint8_t *ptr;
 125.110 +	size_t   len;
 125.111 +	int      n;
 125.112 +
 125.113 +	ptr = io_buf_read_ptr   (io_buf);
 125.114 +	len = io_buf_read_avail (io_buf);
 125.115 +
 125.116 +	/*
 125.117 +	 * gt_tx_stack_send() calls tcp_send() to send the data on the
 125.118 +	 * connection. This is done because no interface for passing parameters
 125.119 +	 * like a TCPC is exposed anywhere to users of GtTxStack.
 125.120 +	 */
 125.121 +	if ((n = gt_tx_stack_send (tx->stack, ptr, len)) <= 0)
 125.122 +		return TX_ERROR;
 125.123 +
 125.124 +	/*
 125.125 +	 * Pop whatever bytes were written off the buffer.  This may be less than
 125.126 +	 * the the whole buffer in the case of a short write.  In that case we
 125.127 +	 * don't remove the buffer, but continue writing it later.
 125.128 +	 */
 125.129 +	io_buf_pop (io_buf, n);
 125.130 +
 125.131 +	return TX_OK;
 125.132 +}
 125.133 +
 125.134 +/*
 125.135 + * The packet-sending input callback.
 125.136 + */
 125.137 +static void tx_link_send_data (int fd, input_id id, struct tx_layer *tx)
 125.138 +{
 125.139 +	struct tx_link *tx_link = tx->udata;
 125.140 +	struct io_buf  *io_buf;
 125.141 +	size_t          len;
 125.142 +
 125.143 +	/*
 125.144 +	 * If there's no data to write, request more from the upper layer.
 125.145 +	 */
 125.146 +	if (!(io_buf = tx_link->buf))
 125.147 +	{
 125.148 +		tx_status_t ret;
 125.149 +
 125.150 +		if ((ret = request_more_data (tx)) == TX_ERROR)
 125.151 +		{
 125.152 +			gt_tx_stack_abort (tx->stack);
 125.153 +			return;
 125.154 +		}
 125.155 +
 125.156 +		/* deactivate the queue until more data arrives */
 125.157 +		if (ret == TX_EMPTY)
 125.158 +		{
 125.159 +			if (LINK_DEBUG)
 125.160 +				GT->DBGSOCK (GT, tx->stack->c, "empty, deactivating");
 125.161 +
 125.162 +			assert (tx_link->buf == NULL);
 125.163 +			deactivate_queue (tx);
 125.164 +			return;
 125.165 +		}
 125.166 +
 125.167 +		/* upper layer must have called our queue function */
 125.168 +		assert (tx_link->buf != NULL);
 125.169 +		io_buf = tx_link->buf;
 125.170 +
 125.171 +		/* fall through and send the buffer */
 125.172 +	}
 125.173 +
 125.174 +	len = io_buf_read_avail (io_buf);
 125.175 +
 125.176 +	/*
 125.177 +	 * It is safe to abort the tx-stack if we encountered an error because
 125.178 +	 * there are no other callers into it currently.
 125.179 +	 */
 125.180 +	if (tx_link_process (tx, io_buf) == TX_ERROR)
 125.181 +	{
 125.182 +		gt_tx_stack_abort (tx->stack);
 125.183 +		return;
 125.184 +	}
 125.185 +
 125.186 +	if (io_buf_read_avail (io_buf) > 0)
 125.187 +	{
 125.188 +		assert (io_buf_read_avail (io_buf) < len);
 125.189 +		return;
 125.190 +	}
 125.191 +
 125.192 +	/*
 125.193 +	 * The complete buffer was written.  This input callback will continue
 125.194 +	 * grabbing data from the upper layer until gt_tx_layer_ready() returns
 125.195 +	 * TX_EMPTY or TX_ERROR.
 125.196 +	 */
 125.197 +	io_buf_free (io_buf);
 125.198 +	tx_link->buf = NULL;
 125.199 +}
 125.200 +
 125.201 +static void activate_queue (struct tx_layer *tx)
 125.202 +{
 125.203 +	struct tx_link *tx_link = tx->udata;
 125.204 +
 125.205 +	/* skip if input already active */
 125.206 +	if (tx_link->id)
 125.207 +		return;
 125.208 +
 125.209 +	tx_link->id = input_add (tx->stack->c->fd, tx, INPUT_WRITE,
 125.210 +	                         (InputCallback)tx_link_send_data, 0);
 125.211 +}
 125.212 +
 125.213 +static void deactivate_queue (struct tx_layer *tx)
 125.214 +{
 125.215 +	struct tx_link *tx_link = tx->udata;
 125.216 +
 125.217 +	if (!tx_link->id)
 125.218 +		return;
 125.219 +
 125.220 +	input_remove (tx_link->id);
 125.221 +	tx_link->id = 0;
 125.222 +}
 125.223 +
 125.224 +/* begin or end consuming data in this layer */
 125.225 +static void tx_link_toggle (struct tx_layer *tx, BOOL stop)
 125.226 +{
 125.227 +	if (stop)
 125.228 +		deactivate_queue (tx);
 125.229 +	else
 125.230 +		activate_queue (tx);
 125.231 +}
 125.232 +
 125.233 +/*****************************************************************************/
 125.234 +
 125.235 +static tx_status_t tx_link_queue (struct tx_layer *tx, struct io_buf *io_buf)
 125.236 +{
 125.237 +	struct tx_link *tx_link = tx->udata;
 125.238 +
 125.239 +	if (tx_link->buf != NULL)
 125.240 +	{
 125.241 +		/* this layer is "saturated" with its single packet */
 125.242 +		return TX_FULL;
 125.243 +	}
 125.244 +
 125.245 +	tx_link->buf = io_buf;
 125.246 +	activate_queue (tx);
 125.247 +
 125.248 +	/* TODO: need to change this if we change to writing as much
 125.249 +	 * as possible synchronously instead of one message from the handler */
 125.250 +	return TX_OK;
 125.251 +}
 125.252 +
 125.253 +static tx_status_t tx_link_ready (struct tx_layer *tx)
 125.254 +{
 125.255 +	abort (); /* can't handle layers underneath us */
 125.256 +	return TX_ERROR;
 125.257 +}
 125.258 +
 125.259 +/*****************************************************************************/
 125.260 +
 125.261 +static void tx_link_enable (struct tx_layer *tx)
 125.262 +{
 125.263 +	activate_queue (tx);
 125.264 +}
 125.265 +
 125.266 +static void tx_link_disable (struct tx_layer *tx)
 125.267 +{
 125.268 +	deactivate_queue (tx);
 125.269 +}
 125.270 +
 125.271 +/*****************************************************************************/
 125.272 +
 125.273 +struct tx_layer_ops gt_tx_link_ops =
 125.274 +{
 125.275 +	tx_link_init,
 125.276 +	tx_link_destroy,
 125.277 +	tx_link_toggle,
 125.278 +	tx_link_queue,
 125.279 +	tx_link_ready,
 125.280 +	tx_link_enable,
 125.281 +	tx_link_disable,
 125.282 +};
   126.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   126.2 +++ b/src/io/tx_link.h	Sat Feb 20 21:18:28 2010 -0800
   126.3 @@ -0,0 +1,20 @@
   126.4 +/*
   126.5 + * $Id: tx_link.h,v 1.2 2003/09/17 17:44:11 hipnod Exp $
   126.6 + *
   126.7 + * Copyright (C) 2003 giFT project (gift.sourceforge.net)
   126.8 + *
   126.9 + * This program is free software; you can redistribute it and/or modify it
  126.10 + * under the terms of the GNU General Public License as published by the
  126.11 + * Free Software Foundation; either version 2, or (at your option) any
  126.12 + * later version.
  126.13 + *
  126.14 + * This program is distributed in the hope that it will be useful, but
  126.15 + * WITHOUT ANY WARRANTY; without even the implied warranty of
  126.16 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
  126.17 + * General Public License for more details.
  126.18 + */
  126.19 +
  126.20 +#ifndef GIFT_GT_TX_LINK_H_
  126.21 +#define GIFT_GT_TX_LINK_H_
  126.22 +
  126.23 +#endif /* GIFT_GT_TX_LINK_H_ */
   127.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   127.2 +++ b/src/io/tx_packet.c	Sat Feb 20 21:18:28 2010 -0800
   127.3 @@ -0,0 +1,415 @@
   127.4 +/*
   127.5 + * $Id: tx_packet.c,v 1.10 2005/01/04 14:59:23 mkern Exp $
   127.6 + *
   127.7 + * Copyright (C) 2004 giFT project (gift.sourceforge.net)
   127.8 + *
   127.9 + * This program is free software; you can redistribute it and/or modify it
  127.10 + * under the terms of the GNU General Public License as published by the
  127.11 + * Free Software Foundation; either version 2, or (at your option) any
  127.12 + * later version.
  127.13 + *
  127.14 + * This program is distributed in the hope that it will be useful, but
  127.15 + * WITHOUT ANY WARRANTY; without even the implied warranty of
  127.16 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
  127.17 + * General Public License for more details.
  127.18 + */
  127.19 +
  127.20 +#include "gt_gnutella.h"
  127.21 +#include "gt_packet.h"       /* packet manipulation macros */
  127.22 +
  127.23 +#include "io/tx_stack.h"
  127.24 +#include "io/tx_layer.h"
  127.25 +#include "io/io_buf.h"
  127.26 +
  127.27 +/*****************************************************************************/
  127.28 +
  127.29 +#define TX_PACKET_DEBUG    0
  127.30 +
  127.31 +/*****************************************************************************/
  127.32 +
  127.33 +/*
  127.34 + * Relative packet priority ratios.  These control how many packets of a
  127.35 + * certain type are sent prior to looking for other types.  For each type we
  127.36 + * maintain an independent FIFO queue.  Each time a packet can be sent, each
  127.37 + * queue is checked.
  127.38 + *
  127.39 + * Packets in a queue will be sent while the ratio is greater than zero, and
  127.40 + * there are no higher priority packets waiting.  Once there are no queues
  127.41 + * with both waiting packets and a non-zero ratio, the queue priority ratios
  127.42 + * are reset so that more packets can be sent.  This process continues until
  127.43 + * the lower layer becomes saturated.
  127.44 + *
  127.45 + * Note that it is bad idea to reset the priority ratios only when all the
  127.46 + * ratios are zero, because this could lead to starvation for some packet
  127.47 + * types.
  127.48 + *
  127.49 + * Pushes have the highest priorty of normal messages.  Also, there is a
  127.50 + * special 'urgent' queue that has higher priority, that includes replies to
  127.51 + * keepalive pings and other important high-priority messages.
  127.52 + */
  127.53 +#define URGENT_RATIO  INT_MAX
  127.54 +#define PUSH_RATIO    5
  127.55 +#define QHIT_RATIO    4
  127.56 +#define QUERY_RATIO   3
  127.57 +#define PONG_RATIO    2
  127.58 +#define PING_RATIO    1
  127.59 +#define MISC_RATIO    1
  127.60 +
  127.61 +#define NR_QUEUES    (7)
  127.62 +
  127.63 +/*****************************************************************************/
  127.64 +
  127.65 +struct packet_queue
  127.66 +{
  127.67 +	gt_packet_type_t msg_type;
  127.68 +	size_t           ratio;        /* how many packets left on this turn? */
  127.69 +	size_t           bytes_queued; /* total bytes queued */
  127.70 +	List            *queue;
  127.71 +};
  127.72 +
  127.73 +struct tx_packet
  127.74 +{
  127.75 +	struct packet_queue queues[NR_QUEUES];
  127.76 +	int                 total_pkts;         /* used to quickly test if empty */
  127.77 +};
  127.78 +
  127.79 +/*****************************************************************************/
  127.80 +/* DEBUGGING/TRACING */
  127.81 +
  127.82 +#if TX_PACKET_DEBUG
  127.83 +/* ripped from gt_packet.c */
  127.84 +static const char *packet_command_str (uint8_t cmd)
  127.85 +{
  127.86 +	static char buf[16];
  127.87 +
  127.88 +	switch (cmd)
  127.89 +	{
  127.90 +	 case GT_MSG_PING:        return "PING";
  127.91 +	 case GT_MSG_PING_REPLY:  return "PONG";
  127.92 +	 case GT_MSG_BYE:         return "BYE";
  127.93 +	 case GT_MSG_QUERY_ROUTE: return "QROUTE";
  127.94 +	 case GT_MSG_VENDOR:      return "VMSG";
  127.95 +	 case GT_MSG_VENDOR_STD:  return "VMSG-S";
  127.96 +	 case GT_MSG_PUSH:        return "PUSH";
  127.97 +	 case GT_MSG_QUERY:       return "QUERY";
  127.98 +	 case GT_MSG_QUERY_REPLY: return "HITS";
  127.99 +
 127.100 +	 default:
 127.101 +		snprintf (buf, sizeof (buf), "[<%02hx>]", cmd);
 127.102 +		return buf;
 127.103 +	}
 127.104 +}
 127.105 +
 127.106 +static void dump_packet (struct io_buf *buf, String *str)
 127.107 +{
 127.108 +	uint8_t cmd = get_command (buf->data);
 127.109 +	string_appendf (str, "%s,", packet_command_str (cmd));
 127.110 +}
 127.111 +
 127.112 +static void trace_queue_list (List *queue, String *str)
 127.113 +{
 127.114 +	list_foreach (queue, (ListForeachFunc)dump_packet, str);
 127.115 +}
 127.116 +#endif /* TX_PACKET_DEBUG */
 127.117 +
 127.118 +static void trace_queue (struct tx_layer *tx, const char *id)
 127.119 +{
 127.120 +#if TX_PACKET_DEBUG
 127.121 +	struct tx_packet *tx_packet = tx->udata;
 127.122 +	int i;
 127.123 +	String *s;
 127.124 +	TCPC *c;
 127.125 +
 127.126 +	if (!(s = string_new (NULL, 0, 0, TRUE)))
 127.127 +		return;
 127.128 +
 127.129 +	c = tx->stack->c;
 127.130 +	string_appendf (s, "{%s totalpkts=%d ", id, tx_packet->total_pkts);
 127.131 +
 127.132 +	for (i = 0; i < NR_QUEUES; i++)
 127.133 +		trace_queue_list (tx_packet->queues[i].queue, s);
 127.134 +
 127.135 +	string_append (s, "}");
 127.136 +
 127.137 +	GT->DBGSOCK (GT, c, "%s", s->str);
 127.138 +	string_free (s);
 127.139 +#endif
 127.140 +}
 127.141 +
 127.142 +/*****************************************************************************/
 127.143 +
 127.144 +/* return the queue on which this message should go */
 127.145 +static size_t get_queue (struct io_buf *msg)
 127.146 +{
 127.147 +	uint8_t cmd;
 127.148 +
 127.149 +	cmd = get_command (msg->data);
 127.150 +
 127.151 +	switch (cmd)
 127.152 +	{
 127.153 +	 default:
 127.154 +		abort ();
 127.155 +
 127.156 +	 case GT_MSG_VENDOR:
 127.157 +	 case GT_MSG_VENDOR_STD:
 127.158 +	 case GT_MSG_QUERY_ROUTE:
 127.159 +		return 6;
 127.160 +
 127.161 +	 case GT_MSG_PING:
 127.162 +		{
 127.163 +			/* queue keep-alive pings in the urgent queue */
 127.164 +			if (get_ttl (msg->data) == 1 && get_hops (msg->data) == 0)
 127.165 +				return 0;
 127.166 +		}
 127.167 +		return 5;
 127.168 +
 127.169 +	 case GT_MSG_PING_REPLY:
 127.170 +		{
 127.171 +			/*
 127.172 +			 * Queue replies to keep-alive ping in the urgent queue.
 127.173 +			 *
 127.174 +			 * This allows the remote end to starve it's own connection
 127.175 +			 * with a series of keep-alive pings.  Only flow-control
 127.176 +			 * can handle this.
 127.177 +			 */
 127.178 +			if (get_ttl (msg->data) == 1 && get_hops (msg->data) == 0)
 127.179 +				return 0;
 127.180 +		}
 127.181 +		return 4;
 127.182 +
 127.183 +	 case GT_MSG_QUERY:
 127.184 +		{
 127.185 +			/* make queries from this node more important */
 127.186 +			if (get_ttl (msg->data) == 1 && get_hops (msg->data) == 0)
 127.187 +				return 1;
 127.188 +		}
 127.189 +		return 3;
 127.190 +
 127.191 +	 case GT_MSG_QUERY_REPLY:
 127.192 +		return 2;
 127.193 +
 127.194 +	 case GT_MSG_PUSH:
 127.195 +		return 1;
 127.196 +
 127.197 +	 case GT_MSG_BYE:
 127.198 +		return 0;
 127.199 +	}
 127.200 +
 127.201 +	abort ();
 127.202 +}
 127.203 +
 127.204 +static void enqueue_packet (struct packet_queue *pkt_queue, struct io_buf *msg)
 127.205 +{
 127.206 +	pkt_queue->queue = list_append (pkt_queue->queue, msg);
 127.207 +}
 127.208 +
 127.209 +/*
 127.210 + * Called from upper layer when it wants to send us a message buffer.
 127.211 + */
 127.212 +static tx_status_t tx_packet_queue (struct tx_layer *tx, struct io_buf *io_buf)
 127.213 +{
 127.214 +	struct tx_packet *tx_packet = tx->udata;
 127.215 +	size_t queue_nr;
 127.216 +
 127.217 +	queue_nr = get_queue (io_buf);
 127.218 +
 127.219 +	assert (queue_nr < NR_QUEUES);
 127.220 +	enqueue_packet (&tx_packet->queues[queue_nr], io_buf);
 127.221 +
 127.222 +	tx_packet->total_pkts++;
 127.223 +	assert (tx_packet->total_pkts > 0);
 127.224 +
 127.225 +	trace_queue (tx, "*0*");
 127.226 +
 127.227 +	return TX_OK;
 127.228 +}
 127.229 +
 127.230 +/*****************************************************************************/
 127.231 +
 127.232 +static void set_queue (struct packet_queue *queue, gt_packet_type_t msg_type,
 127.233 +                       size_t prio)
 127.234 +{
 127.235 +	queue->msg_type = msg_type;
 127.236 +	queue->ratio    = prio;
 127.237 +}
 127.238 +
 127.239 +static void reset_ratios (struct packet_queue *queue, size_t len)
 127.240 +{
 127.241 +	set_queue (&queue[0], 0xff,               URGENT_RATIO);
 127.242 +	set_queue (&queue[1], GT_MSG_PUSH,        PUSH_RATIO);
 127.243 +	set_queue (&queue[2], GT_MSG_QUERY_REPLY, QHIT_RATIO);
 127.244 +	set_queue (&queue[3], GT_MSG_QUERY,       QUERY_RATIO);
 127.245 +	set_queue (&queue[4], GT_MSG_PING_REPLY,  PONG_RATIO);
 127.246 +	set_queue (&queue[5], GT_MSG_PING,        PING_RATIO);
 127.247 +	set_queue (&queue[6], 0xff,               MISC_RATIO);
 127.248 +}
 127.249 +
 127.250 +/*****************************************************************************/
 127.251 +
 127.252 +/*
 127.253 + * Try to send a single message buffer from the packet queue to the lower
 127.254 + * layer.  If the lower layer has become saturated, return FALSE.
 127.255 + *
 127.256 + * The lower layer takes responsibility for the messages sent to it in
 127.257 + * entirety in gt_tx_layer_queue() unless it is full.  In that case it
 127.258 + * returns TX_FULL.
 127.259 + */
 127.260 +static tx_status_t shift_queue (struct tx_layer *tx,
 127.261 +                                struct tx_packet *tx_packet,
 127.262 +                                struct packet_queue *pkt_queue)
 127.263 +{
 127.264 +	List          *msg_l;
 127.265 +	struct io_buf *msg;
 127.266 +	tx_status_t    ret;
 127.267 +
 127.268 +	msg_l = list_nth (pkt_queue->queue, 0);
 127.269 +	msg   = msg_l->data;
 127.270 +
 127.271 +	ret = gt_tx_layer_queue (tx, msg);
 127.272 +
 127.273 +	if (ret != TX_OK)
 127.274 +	{
 127.275 +		assert (ret != TX_EMPTY); /* impossible to be empty */
 127.276 +		return ret;
 127.277 +	}
 127.278 +
 127.279 +	/* shift this packet off the queue */
 127.280 +	pkt_queue->queue = list_remove_link (pkt_queue->queue, msg_l);
 127.281 +
 127.282 +	tx_packet->total_pkts--;
 127.283 +	assert (tx_packet->total_pkts >= 0);
 127.284 +
 127.285 +	if (TX_PACKET_DEBUG)
 127.286 +		trace_queue (tx, "*2*");
 127.287 +
 127.288 +	return ret;
 127.289 +}
 127.290 +
 127.291 +static tx_status_t service_queues (struct tx_layer *layer,
 127.292 +                                   struct tx_packet *tx_packet)
 127.293 +{
 127.294 +	int         i;
 127.295 +	tx_status_t ret;
 127.296 +
 127.297 +	for (i = 0; i < NR_QUEUES; i++)
 127.298 +	{
 127.299 +		struct packet_queue *pkt_queue  = &tx_packet->queues[i];
 127.300 +
 127.301 +		/* skip if ratio is small */
 127.302 +		while (pkt_queue->ratio > 0 && pkt_queue->queue != NULL)
 127.303 +		{
 127.304 +			ret = shift_queue (layer, tx_packet, pkt_queue);
 127.305 +			pkt_queue->ratio--;
 127.306 +
 127.307 +			if (ret == TX_FULL)
 127.308 +				return TX_OK;
 127.309 +
 127.310 +			if (ret != TX_OK)
 127.311 +				return ret;
 127.312 +		}
 127.313 +	}
 127.314 +
 127.315 +	/* reset the ratios to write more data */
 127.316 +	reset_ratios (tx_packet->queues, NR_QUEUES);
 127.317 +
 127.318 +	/* we wrote something, so return ok */
 127.319 +	if (tx_packet->total_pkts == 0)
 127.320 +		return TX_OK;
 127.321 +
 127.322 +	/* tail recurse until lower layer is saturated */
 127.323 +	return service_queues (layer, tx_packet);
 127.324 +}
 127.325 +
 127.326 +/*
 127.327 + * Gets called when the lower layer is writable.
 127.328 + */
 127.329 +static tx_status_t tx_packet_ready (struct tx_layer *tx)
 127.330 +{
 127.331 +	struct tx_packet *tx_packet = tx->udata;
 127.332 +
 127.333 +	if (tx_packet->total_pkts == 0)
 127.334 +		return TX_EMPTY;
 127.335 +
 127.336 +	if (TX_PACKET_DEBUG)
 127.337 +		trace_queue (tx, "*1*");
 127.338 +
 127.339 +	return service_queues (tx, tx_packet);
 127.340 +}
 127.341 +
 127.342 +/*****************************************************************************/
 127.343 +
 127.344 +static BOOL tx_packet_init (struct tx_layer *tx)
 127.345 +{
 127.346 +	struct tx_packet *tx_packet;
 127.347 +	int               i;
 127.348 +
 127.349 +	if (!(tx_packet = malloc (sizeof (struct tx_packet))))
 127.350 +		return FALSE;
 127.351 +
 127.352 +	tx_packet->total_pkts = 0;
 127.353 +
 127.354 +	for (i = 0; i < NR_QUEUES; i++)
 127.355 +	{
 127.356 +		tx_packet->queues[i].queue        = NULL;
 127.357 +		tx_packet->queues[i].bytes_queued = 0;
 127.358 +	}
 127.359 +
 127.360 +	reset_ratios (tx_packet->queues, NR_QUEUES);
 127.361 +
 127.362 +	tx->udata = tx_packet;
 127.363 +
 127.364 +	return TRUE;
 127.365 +}
 127.366 +
 127.367 +static BOOL free_io_buf (struct io_buf *io_buf, void *udata)
 127.368 +{
 127.369 +	io_buf_free (io_buf);
 127.370 +	return TRUE;
 127.371 +}
 127.372 +
 127.373 +static void flush_packets (struct packet_queue *pkt_queue)
 127.374 +{
 127.375 +	list_foreach_remove (pkt_queue->queue, (ListForeachFunc)free_io_buf, NULL);
 127.376 +	pkt_queue = NULL;
 127.377 +}
 127.378 +
 127.379 +static void tx_packet_destroy (struct tx_layer *tx)
 127.380 +{
 127.381 +	struct tx_packet *tx_packet = tx->udata;
 127.382 +	int i;
 127.383 +
 127.384 +	for (i = 0; i < NR_QUEUES; i++)
 127.385 +		flush_packets (&tx_packet->queues[i]);
 127.386 +
 127.387 +	FREE (tx_packet);
 127.388 +}
 127.389 +
 127.390 +static void tx_packet_consume (struct tx_layer *tx, BOOL stop)
 127.391 +{
 127.392 +	/* nothing */
 127.393 +}
 127.394 +
 127.395 +/*****************************************************************************/
 127.396 +
 127.397 +static void tx_packet_enable (struct tx_layer *tx)
 127.398 +{
 127.399 +	/* TODO */
 127.400 +}
 127.401 +
 127.402 +static void tx_packet_disable (struct tx_layer *tx)
 127.403 +{
 127.404 +	/* TODO */
 127.405 +}
 127.406 +
 127.407 +/*****************************************************************************/
 127.408 +
 127.409 +struct tx_layer_ops gt_tx_packet_ops =
 127.410 +{
 127.411 +	tx_packet_init,
 127.412 +	tx_packet_destroy,
 127.413 +	tx_packet_consume,
 127.414 +	tx_packet_queue,
 127.415 +	tx_packet_ready,
 127.416 +	tx_packet_enable,
 127.417 +	tx_packet_disable,
 127.418 +};
   128.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   128.2 +++ b/src/io/tx_stack.c	Sat Feb 20 21:18:28 2010 -0800
   128.3 @@ -0,0 +1,255 @@
   128.4 +/*
   128.5 + * $Id: tx_stack.c,v 1.12 2004/04/17 06:07:33 hipnod Exp $
   128.6 + *
   128.7 + * Copyright (C) 2003 giFT project (gift.sourceforge.net)
   128.8 + *
   128.9 + * This program is free software; you can redistribute it and/or modify it
  128.10 + * under the terms of the GNU General Public License as published by the
  128.11 + * Free Software Foundation; either version 2, or (at your option) any
  128.12 + * later version.
  128.13 + *
  128.14 + * This program is distributed in the hope that it will be useful, but
  128.15 + * WITHOUT ANY WARRANTY; without even the implied warranty of
  128.16 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
  128.17 + * General Public License for more details.
  128.18 + */
  128.19 +
  128.20 +#include "gt_gnutella.h"
  128.21 +#include "gt_packet.h"               /* gt_packet_log XXX */
  128.22 +
  128.23 +#include "io/tx_stack.h"
  128.24 +#include "io/tx_layer.h"
  128.25 +#include "io/io_buf.h"
  128.26 +
  128.27 +/*****************************************************************************/
  128.28 +
  128.29 +extern struct tx_layer_ops gt_tx_packet_ops;
  128.30 +extern struct tx_layer_ops gt_tx_deflate_ops;
  128.31 +extern struct tx_layer_ops gt_tx_link_ops;
  128.32 +
  128.33 +/*****************************************************************************/
  128.34 +
  128.35 +static struct use_tx_layer
  128.36 +{
  128.37 +	const char          *name;
  128.38 +	struct tx_layer_ops *ops;
  128.39 +} tx_layers[] =
  128.40 +{
  128.41 +	{ "tx_link",    &gt_tx_link_ops,   },
  128.42 +	{ "tx_deflate", &gt_tx_deflate_ops },
  128.43 +	{ "tx_packet",  &gt_tx_packet_ops  },
  128.44 +};
  128.45 +
  128.46 +/*****************************************************************************/
  128.47 +
  128.48 +static void foreach_tx_child (struct tx_layer *tx, 
  128.49 +                              void (*exec) (struct tx_layer *tx))
  128.50 +{
  128.51 +	struct tx_layer *next;
  128.52 +
  128.53 +	while (tx != NULL)
  128.54 +	{
  128.55 +		/* grab the next element first so the callback can call free */
  128.56 +		next = tx->lower;
  128.57 +
  128.58 +		exec (tx);
  128.59 +
  128.60 +		tx = next;
  128.61 +	}
  128.62 +}
  128.63 +
  128.64 +static struct tx_layer *tx_push_layer (struct tx_layer *below, 
  128.65 +                                       struct tx_layer *above)
  128.66 +{
  128.67 +	if (above)
  128.68 +		above->lower = below;
  128.69 +
  128.70 +	if (below)
  128.71 +		below->upper = above;
  128.72 +
  128.73 +	return above;
  128.74 +}
  128.75 +
  128.76 +static void destroy_tx (struct tx_layer *tx)
  128.77 +{
  128.78 +	gt_tx_layer_free (tx);
  128.79 +}
  128.80 +
  128.81 +static void disable_tx (struct tx_layer *tx)
  128.82 +{
  128.83 +	gt_tx_layer_disable (tx);
  128.84 +}
  128.85 +
  128.86 +static void disable_all_tx_layers (struct tx_layer *layers)
  128.87 +{
  128.88 +	if (!layers)
  128.89 +		return;
  128.90 +
  128.91 +	assert (layers->upper == NULL);
  128.92 +
  128.93 +	foreach_tx_child (layers, disable_tx);
  128.94 +}
  128.95 +
  128.96 +static void free_all_tx_layers (struct tx_layer *layers)
  128.97 +{
  128.98 +	if (!layers)
  128.99 +		return;
 128.100 +
 128.101 +	disable_all_tx_layers (layers);
 128.102 +	foreach_tx_child (layers, destroy_tx);
 128.103 +}
 128.104 +
 128.105 +static struct tx_layer *alloc_tx_layers (GtTxStack *stack, BOOL tx_deflated)
 128.106 +{
 128.107 +	struct tx_layer *new_layer;
 128.108 +	struct tx_layer *layer      = NULL;
 128.109 +	int i;
 128.110 +
 128.111 +	for (i = 0; i < sizeof(tx_layers) / sizeof(tx_layers[0]); i++)
 128.112 +	{
 128.113 +		if (!strcmp (tx_layers[i].name, "tx_deflate") && !tx_deflated)
 128.114 +			continue;
 128.115 +
 128.116 +		if (!(new_layer = gt_tx_layer_new (stack, tx_layers[i].name, 
 128.117 +		                                   tx_layers[i].ops)))
 128.118 +		{
 128.119 +			foreach_tx_child (layer, destroy_tx);
 128.120 +			return NULL;
 128.121 +		}
 128.122 +
 128.123 +		layer = tx_push_layer (layer, new_layer);
 128.124 +	}
 128.125 +
 128.126 +	return layer;
 128.127 +}
 128.128 +
 128.129 +GtTxStack *gt_tx_stack_new (TCPC *c, BOOL tx_deflated)
 128.130 +{
 128.131 +	struct gt_tx_stack *stack;
 128.132 +	int                 size;
 128.133 +
 128.134 +	if (!(stack = NEW (struct gt_tx_stack)))
 128.135 +		return NULL;
 128.136 +
 128.137 +	if (!(stack->layers = alloc_tx_layers (stack, tx_deflated)))
 128.138 +	{
 128.139 +		free (stack);
 128.140 +		return NULL;
 128.141 +	}
 128.142 +
 128.143 +	/* set the send buffer to a not too high value */
 128.144 +	size = 256;
 128.145 +
 128.146 +	if (setsockopt (c->fd, SOL_SOCKET, SO_SNDBUF, &size, sizeof (size)) != 0)
 128.147 +		GT->DBGSOCK (GT, c, "Error setting sndbuf size: %s", GIFT_NETERROR());
 128.148 +
 128.149 +	stack->c             = c;
 128.150 +	stack->start_time    = time (NULL);
 128.151 +
 128.152 +	return stack;
 128.153 +}
 128.154 +
 128.155 +/*****************************************************************************/
 128.156 +
 128.157 +void gt_tx_stack_free (GtTxStack *stack)
 128.158 +{
 128.159 +	if (!stack)
 128.160 +		return;
 128.161 +
 128.162 +	free_all_tx_layers (stack->layers);
 128.163 +	FREE (stack);
 128.164 +}
 128.165 +
 128.166 +void gt_tx_stack_abort (GtTxStack *stack)
 128.167 +{
 128.168 +	stack->cleanup (stack, stack->udata);
 128.169 +}
 128.170 +
 128.171 +/*****************************************************************************/
 128.172 +
 128.173 +static void activate_tx (struct tx_layer *tx)
 128.174 +{
 128.175 +	tx->ops->toggle (tx, FALSE);
 128.176 +}
 128.177 +
 128.178 +/*
 128.179 + * Start sending data down the stack.  Called asynchronously by the topmost
 128.180 + * layer.
 128.181 + */
 128.182 +void gt_tx_stack_activate (GtTxStack *stack)
 128.183 +{
 128.184 +	foreach_tx_child (stack->layers, activate_tx);
 128.185 +}
 128.186 +
 128.187 +static void deactivate_tx (struct tx_layer *tx)
 128.188 +{
 128.189 +	tx->ops->toggle (tx, TRUE);
 128.190 +}
 128.191 +
 128.192 +void gt_tx_stack_deactivate (GtTxStack *stack)
 128.193 +{
 128.194 +	foreach_tx_child (stack->layers, deactivate_tx);
 128.195 +}
 128.196 +
 128.197 +/*****************************************************************************/
 128.198 +
 128.199 +BOOL gt_tx_stack_queue (GtTxStack *stack, const uint8_t *data, size_t len)
 128.200 +{
 128.201 +	struct io_buf   *io_buf;
 128.202 +	struct tx_layer *tx;
 128.203 +	uint8_t         *ptr;
 128.204 +	tx_status_t      ret;
 128.205 +	GtPacket         pkt;
 128.206 +
 128.207 +	if (!(io_buf = io_buf_new (len)))
 128.208 +		return FALSE;
 128.209 +
 128.210 +	ptr = io_buf_write_ptr (io_buf);
 128.211 +
 128.212 +	memcpy (ptr, data, len);
 128.213 +	io_buf_push (io_buf, len);
 128.214 +
 128.215 +	tx = stack->layers;
 128.216 +
 128.217 +	/* send the data on its way down the stack */
 128.218 +	if ((ret = tx->ops->queue (tx, io_buf)) != TX_OK)
 128.219 +	{
 128.220 +		GT->DBGSOCK (GT, stack->c, "bad txstatus: %d", ret);
 128.221 +		gt_tx_stack_abort (stack);
 128.222 +		return FALSE;
 128.223 +	}
 128.224 +
 128.225 +	pkt.data = (unsigned char *)data;
 128.226 +	pkt.len  = len;
 128.227 +
 128.228 +	gt_packet_log (&pkt, stack->c, TRUE);
 128.229 +
 128.230 +	/*
 128.231 +	 * Activate the stack if not active already. NOTE: this actually
 128.232 +	 * sucks bad when using compression because we end up enabling, then
 128.233 +	 * disabling right away until some data is compressed by nagle timer.
 128.234 +	 */
 128.235 +	gt_tx_stack_activate (stack);
 128.236 +
 128.237 +	return TRUE;
 128.238 +}
 128.239 +
 128.240 +int gt_tx_stack_send (GtTxStack *stack, const uint8_t *data, size_t len)
 128.241 +{
 128.242 +	int   ret;
 128.243 +
 128.244 +	/* check if the file descriptor has an error */
 128.245 +	if (net_sock_error (stack->c->fd))
 128.246 +		return -1;
 128.247 +
 128.248 +	ret = tcp_send (stack->c, (unsigned char *)data, len);
 128.249 +
 128.250 +	return ret;
 128.251 +}
 128.252 +
 128.253 +void gt_tx_stack_set_handler (GtTxStack *stack, GtTxStackCleanup cleanup, 
 128.254 +                              void *udata)
 128.255 +{
 128.256 +	stack->cleanup = cleanup;
 128.257 +	stack->udata   = udata;
 128.258 +}
   129.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   129.2 +++ b/src/io/tx_stack.h	Sat Feb 20 21:18:28 2010 -0800
   129.3 @@ -0,0 +1,58 @@
   129.4 +/*
   129.5 + * $Id: tx_stack.h,v 1.6 2004/04/17 06:07:33 hipnod Exp $
   129.6 + *
   129.7 + * Copyright (C) 2003 giFT project (gift.sourceforge.net)
   129.8 + *
   129.9 + * This program is free software; you can redistribute it and/or modify it
  129.10 + * under the terms of the GNU General Public License as published by the
  129.11 + * Free Software Foundation; either version 2, or (at your option) any
  129.12 + * later version.
  129.13 + *
  129.14 + * This program is distributed in the hope that it will be useful, but
  129.15 + * WITHOUT ANY WARRANTY; without even the implied warranty of
  129.16 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
  129.17 + * General Public License for more details.
  129.18 + */
  129.19 +
  129.20 +#ifndef GIFT_GT_TX_STACK_H_
  129.21 +#define GIFT_GT_TX_STACK_H_
  129.22 +
  129.23 +/*****************************************************************************/
  129.24 +
  129.25 +typedef struct gt_tx_stack GtTxStack;
  129.26 +
  129.27 +typedef void (*GtTxStackCleanup) (GtTxStack *stack, void *udata);
  129.28 +
  129.29 +struct gt_tx_stack
  129.30 +{
  129.31 +	struct tx_layer  *layers;
  129.32 +	GtTxStackCleanup  cleanup;
  129.33 +
  129.34 +	TCPC             *c;
  129.35 +	void             *udata;
  129.36 +
  129.37 +	time_t            start_time;
  129.38 +};
  129.39 +
  129.40 +/*****************************************************************************/
  129.41 +
  129.42 +GtTxStack     *gt_tx_stack_new          (TCPC *c, BOOL tx_deflated);
  129.43 +void           gt_tx_stack_free         (GtTxStack *stack);
  129.44 +
  129.45 +void           gt_tx_stack_abort        (GtTxStack *stack);
  129.46 +
  129.47 +void           gt_tx_stack_set_handler  (GtTxStack *stack,
  129.48 +                                         GtTxStackCleanup cleanup, 
  129.49 +                                         void *udata);
  129.50 +
  129.51 +BOOL           gt_tx_stack_queue        (GtTxStack *stack, const uint8_t *data,
  129.52 +                                         size_t len);
  129.53 +
  129.54 +/* used by tx_link to send data on the connection...argh, i can't
  129.55 + * come up with a good interface for this */
  129.56 +int            gt_tx_stack_send         (GtTxStack *stack, const uint8_t *data,
  129.57 +                                         size_t len);
  129.58 +
  129.59 +/*****************************************************************************/
  129.60 +
  129.61 +#endif /* GIFT_GT_TX_STACK_H_ */
   130.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   130.2 +++ b/src/message/Makefile.am	Sat Feb 20 21:18:28 2010 -0800
   130.3 @@ -0,0 +1,25 @@
   130.4 +# $Id: Makefile.am,v 1.4 2004/01/07 07:24:43 hipnod Exp $
   130.5 +
   130.6 +AM_CFLAGS = \
   130.7 +	$(LIBXML2_CFLAGS) \
   130.8 +	$(GNUTELLA_CFLAGS)
   130.9 +
  130.10 +INCLUDES = \
  130.11 +	-I$(top_srcdir)/src
  130.12 +
  130.13 +noinst_LTLIBRARIES = \
  130.14 +	libgt_message.la
  130.15 +
  130.16 +libgt_message_la_SOURCES = \
  130.17 +	bye.c            \
  130.18 +	gt_message.c     \
  130.19 +	gt_message.h     \
  130.20 +	msg_handler.h    \
  130.21 +	ping.c           \
  130.22 +	ping_reply.c     \
  130.23 +	push.c           \
  130.24 +	query.c          \
  130.25 +	query_reply.c    \
  130.26 +	query_route.c    \
  130.27 +	vendor.c
  130.28 +
   131.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   131.2 +++ b/src/message/Makefile.in	Sat Feb 20 21:18:28 2010 -0800
   131.3 @@ -0,0 +1,460 @@
   131.4 +# Makefile.in generated by automake 1.7.9 from Makefile.am.
   131.5 +# @configure_input@
   131.6 +
   131.7 +# Copyright 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003
   131.8 +# Free Software Foundation, Inc.
   131.9 +# This Makefile.in is free software; the Free Software Foundation
  131.10 +# gives unlimited permission to copy and/or distribute it,
  131.11 +# with or without modifications, as long as this notice is preserved.
  131.12 +
  131.13 +# This program is distributed in the hope that it will be useful,
  131.14 +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
  131.15 +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
  131.16 +# PARTICULAR PURPOSE.
  131.17 +
  131.18 +@SET_MAKE@
  131.19 +
  131.20 +# $Id: Makefile.am,v 1.4 2004/01/07 07:24:43 hipnod Exp $
  131.21 +
  131.22 +srcdir = @srcdir@
  131.23 +top_srcdir = @top_srcdir@
  131.24 +VPATH = @srcdir@
  131.25 +pkgdatadir = $(datadir)/@PACKAGE@
  131.26 +pkglibdir = $(libdir)/@PACKAGE@
  131.27 +pkgincludedir = $(includedir)/@PACKAGE@
  131.28 +top_builddir = ../..
  131.29 +
  131.30 +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
  131.31 +INSTALL = @INSTALL@
  131.32 +install_sh_DATA = $(install_sh) -c -m 644
  131.33 +install_sh_PROGRAM = $(install_sh) -c
  131.34 +install_sh_SCRIPT = $(install_sh) -c
  131.35 +INSTALL_HEADER = $(INSTALL_DATA)
  131.36 +transform = $(program_transform_name)
  131.37 +NORMAL_INSTALL = :
  131.38 +PRE_INSTALL = :
  131.39 +POST_INSTALL = :
  131.40 +NORMAL_UNINSTALL = :
  131.41 +PRE_UNINSTALL = :
  131.42 +POST_UNINSTALL = :
  131.43 +host_triplet = @host@
  131.44 +ACLOCAL = @ACLOCAL@
  131.45 +AMDEP_FALSE = @AMDEP_FALSE@
  131.46 +AMDEP_TRUE = @AMDEP_TRUE@
  131.47 +AMTAR = @AMTAR@
  131.48 +AR = @AR@
  131.49 +AUTOCONF = @AUTOCONF@
  131.50 +AUTOHEADER = @AUTOHEADER@
  131.51 +AUTOMAKE = @AUTOMAKE@
  131.52 +AWK = @AWK@
  131.53 +CC = @CC@
  131.54 +CCDEPMODE = @CCDEPMODE@
  131.55 +CFLAGS = @CFLAGS@
  131.56 +CPP = @CPP@
  131.57 +CPPFLAGS = @CPPFLAGS@
  131.58 +CXX = @CXX@
  131.59 +CXXCPP = @CXXCPP@
  131.60 +CXXDEPMODE = @CXXDEPMODE@
  131.61 +CXXFLAGS = @CXXFLAGS@
  131.62 +CYGPATH_W = @CYGPATH_W@
  131.63 +DEFS = @DEFS@
  131.64 +DEPDIR = @DEPDIR@
  131.65 +ECHO = @ECHO@
  131.66 +ECHO_C = @ECHO_C@
  131.67 +ECHO_N = @ECHO_N@
  131.68 +ECHO_T = @ECHO_T@
  131.69 +EGREP = @EGREP@
  131.70 +EXEEXT = @EXEEXT@
  131.71 +F77 = @F77@
  131.72 +FFLAGS = @FFLAGS@
  131.73 +GNUTELLA_CFLAGS = @GNUTELLA_CFLAGS@
  131.74 +GNUTELLA_LIBS = @GNUTELLA_LIBS@
  131.75 +INSTALL_DATA = @INSTALL_DATA@
  131.76 +INSTALL_PROGRAM = @INSTALL_PROGRAM@
  131.77 +INSTALL_SCRIPT = @INSTALL_SCRIPT@
  131.78 +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
  131.79 +LDFLAGS = @LDFLAGS@
  131.80 +LIBOBJS = @LIBOBJS@
  131.81 +LIBS = @LIBS@
  131.82 +LIBTOOL = @LIBTOOL@
  131.83 +LIBXML2_CFLAGS = @LIBXML2_CFLAGS@
  131.84 +LIBXML2_LIBS = @LIBXML2_LIBS@
  131.85 +LN_S = @LN_S@
  131.86 +LTLIBOBJS = @LTLIBOBJS@
  131.87 +MAINT = @MAINT@
  131.88 +MAINTAINER_MODE_FALSE = @MAINTAINER_MODE_FALSE@
  131.89 +MAINTAINER_MODE_TRUE = @MAINTAINER_MODE_TRUE@
  131.90 +MAKEINFO = @MAKEINFO@
  131.91 +OBJEXT = @OBJEXT@
  131.92 +PACKAGE = @PACKAGE@
  131.93 +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
  131.94 +PACKAGE_NAME = @PACKAGE_NAME@
  131.95 +PACKAGE_STRING = @PACKAGE_STRING@
  131.96 +PACKAGE_TARNAME = @PACKAGE_TARNAME@
  131.97 +PACKAGE_VERSION = @PACKAGE_VERSION@
  131.98 +PATH_SEPARATOR = @PATH_SEPARATOR@
  131.99 +PKG_CONFIG = @PKG_CONFIG@
 131.100 +PLUGIN_LDFLAGS = @PLUGIN_LDFLAGS@
 131.101 +RANLIB = @RANLIB@
 131.102 +SET_MAKE = @SET_MAKE@
 131.103 +SHELL = @SHELL@
 131.104 +STRIP = @STRIP@
 131.105 +USE_ZLIB = @USE_ZLIB@
 131.106 +VERSION = @VERSION@
 131.107 +XML2_CONFIG = @XML2_CONFIG@
 131.108 +ac_ct_AR = @ac_ct_AR@
 131.109 +ac_ct_CC = @ac_ct_CC@
 131.110 +ac_ct_CXX = @ac_ct_CXX@
 131.111 +ac_ct_F77 = @ac_ct_F77@
 131.112 +ac_ct_RANLIB = @ac_ct_RANLIB@
 131.113 +ac_ct_STRIP = @ac_ct_STRIP@
 131.114 +am__fastdepCC_FALSE = @am__fastdepCC_FALSE@
 131.115 +am__fastdepCC_TRUE = @am__fastdepCC_TRUE@
 131.116 +am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@
 131.117 +am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@
 131.118 +am__include = @am__include@
 131.119 +am__leading_dot = @am__leading_dot@
 131.120 +am__quote = @am__quote@
 131.121 +bindir = @bindir@
 131.122 +build = @build@
 131.123 +build_alias = @build_alias@
 131.124 +build_cpu = @build_cpu@
 131.125 +build_os = @build_os@
 131.126 +build_vendor = @build_vendor@
 131.127 +datadir = @datadir@
 131.128 +exec_prefix = @exec_prefix@
 131.129 +host = @host@
 131.130 +host_alias = @host_alias@
 131.131 +host_cpu = @host_cpu@
 131.132 +host_os = @host_os@
 131.133 +host_vendor = @host_vendor@
 131.134 +includedir = @includedir@
 131.135 +infodir = @infodir@
 131.136 +install_sh = @install_sh@
 131.137 +libdir = @libdir@
 131.138 +libexecdir = @libexecdir@
 131.139 +localstatedir = @localstatedir@
 131.140 +mandir = @mandir@
 131.141 +oldincludedir = @oldincludedir@
 131.142 +prefix = @prefix@
 131.143 +program_transform_name = @program_transform_name@
 131.144 +sbindir = @sbindir@
 131.145 +sharedstatedir = @sharedstatedir@
 131.146 +sysconfdir = @sysconfdir@
 131.147 +target_alias = @target_alias@
 131.148 +
 131.149 +AM_CFLAGS = \
 131.150 +	$(LIBXML2_CFLAGS) \
 131.151 +	$(GNUTELLA_CFLAGS)
 131.152 +
 131.153 +
 131.154 +INCLUDES = \
 131.155 +	-I$(top_srcdir)/src
 131.156 +
 131.157 +
 131.158 +noinst_LTLIBRARIES = \
 131.159 +	libgt_message.la
 131.160 +
 131.161 +
 131.162 +libgt_message_la_SOURCES = \
 131.163 +	bye.c            \
 131.164 +	gt_message.c     \
 131.165 +	gt_message.h     \
 131.166 +	msg_handler.h    \
 131.167 +	ping.c           \
 131.168 +	ping_reply.c     \
 131.169 +	push.c           \
 131.170 +	query.c          \
 131.171 +	query_reply.c    \
 131.172 +	query_route.c    \
 131.173 +	vendor.c
 131.174 +
 131.175 +subdir = src/message
 131.176 +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
 131.177 +mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
 131.178 +CONFIG_HEADER = $(top_builddir)/config.h
 131.179 +CONFIG_CLEAN_FILES =
 131.180 +LTLIBRARIES = $(noinst_LTLIBRARIES)
 131.181 +
 131.182 +libgt_message_la_LDFLAGS =
 131.183 +libgt_message_la_LIBADD =
 131.184 +am_libgt_message_la_OBJECTS = bye.lo gt_message.lo ping.lo ping_reply.lo \
 131.185 +	push.lo query.lo query_reply.lo query_route.lo vendor.lo
 131.186 +libgt_message_la_OBJECTS = $(am_libgt_message_la_OBJECTS)
 131.187 +
 131.188 +DEFAULT_INCLUDES =  -I. -I$(srcdir) -I$(top_builddir)
 131.189 +depcomp = $(SHELL) $(top_srcdir)/depcomp
 131.190 +am__depfiles_maybe = depfiles
 131.191 +@AMDEP_TRUE@DEP_FILES = ./$(DEPDIR)/bye.Plo ./$(DEPDIR)/gt_message.Plo \
 131.192 +@AMDEP_TRUE@	./$(DEPDIR)/ping.Plo ./$(DEPDIR)/ping_reply.Plo \
 131.193 +@AMDEP_TRUE@	./$(DEPDIR)/push.Plo ./$(DEPDIR)/query.Plo \
 131.194 +@AMDEP_TRUE@	./$(DEPDIR)/query_reply.Plo \
 131.195 +@AMDEP_TRUE@	./$(DEPDIR)/query_route.Plo ./$(DEPDIR)/vendor.Plo
 131.196 +COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
 131.197 +	$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
 131.198 +LTCOMPILE = $(LIBTOOL) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) \
 131.199 +	$(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
 131.200 +CCLD = $(CC)
 131.201 +LINK = $(LIBTOOL) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
 131.202 +	$(AM_LDFLAGS) $(LDFLAGS) -o $@
 131.203 +DIST_SOURCES = $(libgt_message_la_SOURCES)
 131.204 +DIST_COMMON = $(srcdir)/Makefile.in Makefile.am
 131.205 +SOURCES = $(libgt_message_la_SOURCES)
 131.206 +
 131.207 +all: all-am
 131.208 +
 131.209 +.SUFFIXES:
 131.210 +.SUFFIXES: .c .lo .o .obj
 131.211 +$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ Makefile.am  $(top_srcdir)/configure.ac $(ACLOCAL_M4)
 131.212 +	cd $(top_srcdir) && \
 131.213 +	  $(AUTOMAKE) --gnu  src/message/Makefile
 131.214 +Makefile: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.in  $(top_builddir)/config.status
 131.215 +	cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)
 131.216 +
 131.217 +clean-noinstLTLIBRARIES:
 131.218 +	-test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES)
 131.219 +	@list='$(noinst_LTLIBRARIES)'; for p in $$list; do \
 131.220 +	  dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \
 131.221 +	  test "$$dir" = "$$p" && dir=.; \
 131.222 +	  echo "rm -f \"$${dir}/so_locations\""; \
 131.223 +	  rm -f "$${dir}/so_locations"; \
 131.224 +	done
 131.225 +libgt_message.la: $(libgt_message_la_OBJECTS) $(libgt_message_la_DEPENDENCIES) 
 131.226 +	$(LINK)  $(libgt_message_la_LDFLAGS) $(libgt_message_la_OBJECTS) $(libgt_message_la_LIBADD) $(LIBS)
 131.227 +
 131.228 +mostlyclean-compile:
 131.229 +	-rm -f *.$(OBJEXT) core *.core
 131.230 +
 131.231 +distclean-compile:
 131.232 +	-rm -f *.tab.c
 131.233 +
 131.234 +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/bye.Plo@am__quote@
 131.235 +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gt_message.Plo@am__quote@
 131.236 +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ping.Plo@am__quote@
 131.237 +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ping_reply.Plo@am__quote@
 131.238 +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/push.Plo@am__quote@
 131.239 +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/query.Plo@am__quote@
 131.240 +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/query_reply.Plo@am__quote@
 131.241 +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/query_route.Plo@am__quote@
 131.242 +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/vendor.Plo@am__quote@
 131.243 +
 131.244 +.c.o:
 131.245 +@am__fastdepCC_TRUE@	if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" \
 131.246 +@am__fastdepCC_TRUE@	  -c -o $@ `test -f '$<' || echo '$(srcdir)/'`$<; \
 131.247 +@am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; \
 131.248 +@am__fastdepCC_TRUE@	else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; \
 131.249 +@am__fastdepCC_TRUE@	fi
 131.250 +@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
 131.251 +@AMDEP_TRUE@@am__fastdepCC_FALSE@	depfile='$(DEPDIR)/$*.Po' tmpdepfile='$(DEPDIR)/$*.TPo' @AMDEPBACKSLASH@
 131.252 +@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 131.253 +@am__fastdepCC_FALSE@	$(COMPILE) -c `test -f '$<' || echo '$(srcdir)/'`$<
 131.254 +
 131.255 +.c.obj:
 131.256 +@am__fastdepCC_TRUE@	if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" \
 131.257 +@am__fastdepCC_TRUE@	  -c -o $@ `if test -f '$<'; then $(CYGPATH_W) '$<'; else $(CYGPATH_W) '$(srcdir)/$<'; fi`; \
 131.258 +@am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; \
 131.259 +@am__fastdepCC_TRUE@	else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; \
 131.260 +@am__fastdepCC_TRUE@	fi
 131.261 +@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
 131.262 +@AMDEP_TRUE@@am__fastdepCC_FALSE@	depfile='$(DEPDIR)/$*.Po' tmpdepfile='$(DEPDIR)/$*.TPo' @AMDEPBACKSLASH@
 131.263 +@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 131.264 +@am__fastdepCC_FALSE@	$(COMPILE) -c `if test -f '$<'; then $(CYGPATH_W) '$<'; else $(CYGPATH_W) '$(srcdir)/$<'; fi`
 131.265 +
 131.266 +.c.lo:
 131.267 +@am__fastdepCC_TRUE@	if $(LTCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" \
 131.268 +@am__fastdepCC_TRUE@	  -c -o $@ `test -f '$<' || echo '$(srcdir)/'`$<; \
 131.269 +@am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Plo"; \
 131.270 +@am__fastdepCC_TRUE@	else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; \
 131.271 +@am__fastdepCC_TRUE@	fi
 131.272 +@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
 131.273 +@AMDEP_TRUE@@am__fastdepCC_FALSE@	depfile='$(DEPDIR)/$*.Plo' tmpdepfile='$(DEPDIR)/$*.TPlo' @AMDEPBACKSLASH@
 131.274 +@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 131.275 +@am__fastdepCC_FALSE@	$(LTCOMPILE) -c -o $@ `test -f '$<' || echo '$(srcdir)/'`$<
 131.276 +
 131.277 +mostlyclean-libtool:
 131.278 +	-rm -f *.lo
 131.279 +
 131.280 +clean-libtool:
 131.281 +	-rm -rf .libs _libs
 131.282 +
 131.283 +distclean-libtool:
 131.284 +	-rm -f libtool
 131.285 +uninstall-info-am:
 131.286 +
 131.287 +ETAGS = etags
 131.288 +ETAGSFLAGS =
 131.289 +
 131.290 +CTAGS = ctags
 131.291 +CTAGSFLAGS =
 131.292 +
 131.293 +tags: TAGS
 131.294 +
 131.295 +ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
 131.296 +	list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
 131.297 +	unique=`for i in $$list; do \
 131.298 +	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
 131.299 +	  done | \
 131.300 +	  $(AWK) '    { files[$$0] = 1; } \
 131.301 +	       END { for (i in files) print i; }'`; \
 131.302 +	mkid -fID $$unique
 131.303 +
 131.304 +TAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
 131.305 +		$(TAGS_FILES) $(LISP)
 131.306 +	tags=; \
 131.307 +	here=`pwd`; \
 131.308 +	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
 131.309 +	unique=`for i in $$list; do \
 131.310 +	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
 131.311 +	  done | \
 131.312 +	  $(AWK) '    { files[$$0] = 1; } \
 131.313 +	       END { for (i in files) print i; }'`; \
 131.314 +	test -z "$(ETAGS_ARGS)$$tags$$unique" \
 131.315 +	  || $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
 131.316 +	     $$tags $$unique
 131.317 +
 131.318 +ctags: CTAGS
 131.319 +CTAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
 131.320 +		$(TAGS_FILES) $(LISP)
 131.321 +	tags=; \
 131.322 +	here=`pwd`; \
 131.323 +	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
 131.324 +	unique=`for i in $$list; do \
 131.325 +	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
 131.326 +	  done | \
 131.327 +	  $(AWK) '    { files[$$0] = 1; } \
 131.328 +	       END { for (i in files) print i; }'`; \
 131.329 +	test -z "$(CTAGS_ARGS)$$tags$$unique" \
 131.330 +	  || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
 131.331 +	     $$tags $$unique
 131.332 +
 131.333 +GTAGS:
 131.334 +	here=`$(am__cd) $(top_builddir) && pwd` \
 131.335 +	  && cd $(top_srcdir) \
 131.336 +	  && gtags -i $(GTAGS_ARGS) $$here
 131.337 +
 131.338 +distclean-tags:
 131.339 +	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
 131.340 +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
 131.341 +
 131.342 +top_distdir = ../..
 131.343 +distdir = $(top_distdir)/$(PACKAGE)-$(VERSION)
 131.344 +
 131.345 +distdir: $(DISTFILES)
 131.346 +	@srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \
 131.347 +	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \
 131.348 +	list='$(DISTFILES)'; for file in $$list; do \
 131.349 +	  case $$file in \
 131.350 +	    $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \
 131.351 +	    $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \
 131.352 +	  esac; \
 131.353 +	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
 131.354 +	  dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \
 131.355 +	  if test "$$dir" != "$$file" && test "$$dir" != "."; then \
 131.356 +	    dir="/$$dir"; \
 131.357 +	    $(mkinstalldirs) "$(distdir)$$dir"; \
 131.358 +	  else \
 131.359 +	    dir=''; \
 131.360 +	  fi; \
 131.361 +	  if test -d $$d/$$file; then \
 131.362 +	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
 131.363 +	      cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
 131.364 +	    fi; \
 131.365 +	    cp -pR $$d/$$file $(distdir)$$dir || exit 1; \
 131.366 +	  else \
 131.367 +	    test -f $(distdir)/$$file \
 131.368 +	    || cp -p $$d/$$file $(distdir)/$$file \
 131.369 +	    || exit 1; \
 131.370 +	  fi; \
 131.371 +	done
 131.372 +check-am: all-am
 131.373 +check: check-am
 131.374 +all-am: Makefile $(LTLIBRARIES)
 131.375 +
 131.376 +installdirs:
 131.377 +install: install-am
 131.378 +install-exec: install-exec-am
 131.379 +install-data: install-data-am
 131.380 +uninstall: uninstall-am
 131.381 +
 131.382 +install-am: all-am
 131.383 +	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
 131.384 +
 131.385 +installcheck: installcheck-am
 131.386 +install-strip:
 131.387 +	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
 131.388 +	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
 131.389 +	  `test -z '$(STRIP)' || \
 131.390 +	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
 131.391 +mostlyclean-generic:
 131.392 +
 131.393 +clean-generic:
 131.394 +
 131.395 +distclean-generic:
 131.396 +	-rm -f $(CONFIG_CLEAN_FILES)
 131.397 +
 131.398 +maintainer-clean-generic:
 131.399 +	@echo "This command is intended for maintainers to use"
 131.400 +	@echo "it deletes files that may require special tools to rebuild."
 131.401 +clean: clean-am
 131.402 +
 131.403 +clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \
 131.404 +	mostlyclean-am
 131.405 +
 131.406 +distclean: distclean-am
 131.407 +	-rm -rf ./$(DEPDIR)
 131.408 +	-rm -f Makefile
 131.409 +distclean-am: clean-am distclean-compile distclean-generic \
 131.410 +	distclean-libtool distclean-tags
 131.411 +
 131.412 +dvi: dvi-am
 131.413 +
 131.414 +dvi-am:
 131.415 +
 131.416 +info: info-am
 131.417 +
 131.418 +info-am:
 131.419 +
 131.420 +install-data-am:
 131.421 +
 131.422 +install-exec-am:
 131.423 +
 131.424 +install-info: install-info-am
 131.425 +
 131.426 +install-man:
 131.427 +
 131.428 +installcheck-am:
 131.429 +
 131.430 +maintainer-clean: maintainer-clean-am
 131.431 +	-rm -rf ./$(DEPDIR)
 131.432 +	-rm -f Makefile
 131.433 +maintainer-clean-am: distclean-am maintainer-clean-generic
 131.434 +
 131.435 +mostlyclean: mostlyclean-am
 131.436 +
 131.437 +mostlyclean-am: mostlyclean-compile mostlyclean-generic \
 131.438 +	mostlyclean-libtool
 131.439 +
 131.440 +pdf: pdf-am
 131.441 +
 131.442 +pdf-am:
 131.443 +
 131.444 +ps: ps-am
 131.445 +
 131.446 +ps-am:
 131.447 +
 131.448 +uninstall-am: uninstall-info-am
 131.449 +
 131.450 +.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
 131.451 +	clean-libtool clean-noinstLTLIBRARIES ctags distclean \
 131.452 +	distclean-compile distclean-generic distclean-libtool \
 131.453 +	distclean-tags distdir dvi dvi-am info info-am install \
 131.454 +	install-am install-data install-data-am install-exec \
 131.455 +	install-exec-am install-info install-info-am install-man \
 131.456 +	install-strip installcheck installcheck-am installdirs \
 131.457 +	maintainer-clean maintainer-clean-generic mostlyclean \
 131.458 +	mostlyclean-compile mostlyclean-generic mostlyclean-libtool pdf \
 131.459 +	pdf-am ps ps-am tags uninstall uninstall-am uninstall-info-am
 131.460 +
 131.461 +# Tell versions [3.59,3.63) of GNU make to not export all variables.
 131.462 +# Otherwise a system limit (for SysV at least) may be exceeded.
 131.463 +.NOEXPORT:
   132.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   132.2 +++ b/src/message/bye.c	Sat Feb 20 21:18:28 2010 -0800
   132.3 @@ -0,0 +1,40 @@
   132.4 +/*
   132.5 + * $Id: bye.c,v 1.2 2004/01/07 07:27:18 hipnod Exp $
   132.6 + *
   132.7 + * Copyright (C) 2001-2003 giFT project (gift.sourceforge.net)
   132.8 + *
   132.9 + * This program is free software; you can redistribute it and/or modify it
  132.10 + * under the terms of the GNU General Public License as published by the
  132.11 + * Free Software Foundation; either version 2, or (at your option) any
  132.12 + * later version.
  132.13 + *
  132.14 + * This program is distributed in the hope that it will be useful, but
  132.15 + * WITHOUT ANY WARRANTY; without even the implied warranty of
  132.16 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
  132.17 + * General Public License for more details.
  132.18 + */
  132.19 +
  132.20 +#include "gt_gnutella.h"
  132.21 +#include "message/msg_handler.h"
  132.22 +
  132.23 +/* sent upon connection-close by some nodes */
  132.24 +GT_MSG_HANDLER(gt_msg_bye)
  132.25 +{
  132.26 +	uint16_t  code;
  132.27 +	char     *reason;
  132.28 +
  132.29 +	code   = gt_packet_get_uint16 (packet);
  132.30 +	reason = gt_packet_get_str    (packet);
  132.31 +
  132.32 +	/* log the message and code and be done with it */
  132.33 +	if (MSG_DEBUG)
  132.34 +	{
  132.35 +		GT->DBGFN (GT, "%s:%hu sent bye packet: code %hu, reason: %s",
  132.36 +		           net_ip_str (GT_NODE(c)->ip), GT_NODE(c)->gt_port,
  132.37 +		           code, reason);
  132.38 +	}
  132.39 +
  132.40 +	/* we incur the TIME_WAIT penalty instead of the remote node if we
  132.41 +	 * close before they do */
  132.42 +	gt_node_disconnect (c);
  132.43 +}
   133.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   133.2 +++ b/src/message/gt_message.c	Sat Feb 20 21:18:28 2010 -0800
   133.3 @@ -0,0 +1,251 @@
   133.4 +/*
   133.5 + * $Id: gt_message.c,v 1.6 2004/01/07 07:24:43 hipnod Exp $
   133.6 + *
   133.7 + * Copyright (C) 2001-2003 giFT project (gift.sourceforge.net)
   133.8 + *
   133.9 + * This program is free software; you can redistribute it and/or modify it
  133.10 + * under the terms of the GNU General Public License as published by the
  133.11 + * Free Software Foundation; either version 2, or (at your option) any
  133.12 + * later version.
  133.13 + *
  133.14 + * This program is distributed in the hope that it will be useful, but
  133.15 + * WITHOUT ANY WARRANTY; without even the implied warranty of
  133.16 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
  133.17 + * General Public License for more details.
  133.18 + */
  133.19 +
  133.20 +#include "gt_gnutella.h"
  133.21 +#include "msg_handler.h"
  133.22 +
  133.23 +#include "gt_netorg.h"
  133.24 +#include "gt_connect.h"
  133.25 +
  133.26 +#include "gt_utils.h"
  133.27 +
  133.28 +#include "io/rx_stack.h"               /* gt_rx_stack_new */
  133.29 +#include "io/tx_stack.h"               /* gt_tx_stack_new */
  133.30 +
  133.31 +#include "gt_message.h"
  133.32 +
  133.33 +/*****************************************************************************/
  133.34 +
  133.35 +extern void gt_vmsg_send_supported (GtNode *node);   /* vendor.c */
  133.36 +
  133.37 +/*****************************************************************************/
  133.38 +
  133.39 +extern GT_MSG_HANDLER(gt_msg_ping);
  133.40 +extern GT_MSG_HANDLER(gt_msg_ping_reply);
  133.41 +extern GT_MSG_HANDLER(gt_msg_bye);
  133.42 +extern GT_MSG_HANDLER(gt_msg_push);
  133.43 +extern GT_MSG_HANDLER(gt_msg_query_route);
  133.44 +extern GT_MSG_HANDLER(gt_msg_query);
  133.45 +extern GT_MSG_HANDLER(gt_msg_query_reply);
  133.46 +extern GT_MSG_HANDLER(gt_msg_vendor);
  133.47 +
  133.48 +static struct msg_handler
  133.49 +{
  133.50 +	uint8_t command;
  133.51 +	GtMessageHandler func;
  133.52 +}
  133.53 +msg_handler_table[] =
  133.54 +{
  133.55 +	/* table listed not in numerical order, but by frequency of messages */
  133.56 +	{ GT_MSG_QUERY,        gt_msg_query       },
  133.57 +	{ GT_MSG_QUERY_REPLY,  gt_msg_query_reply },
  133.58 +	{ GT_MSG_PING_REPLY,   gt_msg_ping_reply  },
  133.59 +	{ GT_MSG_PING,         gt_msg_ping        },
  133.60 +	{ GT_MSG_PUSH,         gt_msg_push        },
  133.61 +	{ GT_MSG_QUERY_ROUTE,  gt_msg_query_route },
  133.62 +	{ GT_MSG_VENDOR,       gt_msg_vendor      },
  133.63 +	{ GT_MSG_VENDOR_STD,   gt_msg_vendor      }, /* same as non-standard */
  133.64 +	{ GT_MSG_BYE,          gt_msg_bye         },
  133.65 +	{ 0x00,                NULL               }
  133.66 +};
  133.67 +
  133.68 +/*****************************************************************************/
  133.69 +
  133.70 +static BOOL handle_message (TCPC *c, GtPacket *packet)
  133.71 +{
  133.72 +	struct msg_handler *handler;
  133.73 +	uint8_t command;
  133.74 +
  133.75 +	if (!packet)
  133.76 +		return FALSE;
  133.77 +
  133.78 +	command = gt_packet_command (packet);
  133.79 +
  133.80 +	/* locate the handler */
  133.81 +	for (handler = msg_handler_table; handler->func; handler++)
  133.82 +	{
  133.83 +		if (command == handler->command)
  133.84 +		{
  133.85 +			handler->func (GT_NODE(c), c, packet);
  133.86 +			return TRUE;
  133.87 +		}
  133.88 +	}
  133.89 +
  133.90 +	GIFT_ERROR (("[%s] found no handler for cmd %hx, payload %hx",
  133.91 +				 net_ip_str (GT_NODE(c)->ip), command,
  133.92 +				 gt_packet_payload_len (packet)));
  133.93 +
  133.94 +	return FALSE;
  133.95 +}
  133.96 +
  133.97 +static void cleanup_node_rx (GtNode *node)
  133.98 +{
  133.99 +	TCPC    *c = GT_CONN(node);
 133.100 +
 133.101 +	assert (GT_NODE(c) == node);
 133.102 +	gt_node_disconnect (c);
 133.103 +}
 133.104 +
 133.105 +/* TODO: make this the same type as cleanup_node_rx */
 133.106 +static void cleanup_node_tx (GtTxStack *stack, GtNode *node)
 133.107 +{
 133.108 +	TCPC *c = GT_CONN(node);
 133.109 +
 133.110 +	assert (GT_NODE(c) == node);
 133.111 +	gt_node_disconnect (c);
 133.112 +}
 133.113 +
 133.114 +static void recv_packet (GtNode *node, GtPacket *packet)
 133.115 +{
 133.116 +	assert (packet != NULL);
 133.117 +
 133.118 +	gt_packet_log (packet, GT_CONN(node), FALSE);
 133.119 +	(void)handle_message (node->c, packet);
 133.120 +}
 133.121 +
 133.122 +/* Find out what our IP is */
 133.123 +static in_addr_t get_self_ip (TCPC *c)
 133.124 +{
 133.125 +	in_addr_t our_ip;
 133.126 +	char     *ip_str;
 133.127 +
 133.128 +	if ((ip_str = dataset_lookupstr (GT_NODE(c)->hdr, "remote-ip")))
 133.129 +	{
 133.130 +		/*
 133.131 +		 * Since we may be firewalled, we may not know what our ip is.  So set
 133.132 +		 * the ip from what the other node thinks it is.
 133.133 +		 *
 133.134 +		 * Doing this allows you to setup port forwarding on a firewall
 133.135 +		 * and accept incoming connections.
 133.136 +		 */
 133.137 +		our_ip = net_ip (ip_str);
 133.138 +	}
 133.139 +	else
 133.140 +	{
 133.141 +		struct sockaddr_in saddr;
 133.142 +		int    len = sizeof (saddr);
 133.143 +
 133.144 +		if (getsockname (c->fd, (struct sockaddr *)&saddr, &len) == 0)
 133.145 +			our_ip = saddr.sin_addr.s_addr;
 133.146 +		else
 133.147 +			our_ip = net_ip ("127.0.0.1");
 133.148 +	}
 133.149 +
 133.150 +	return our_ip;
 133.151 +}
 133.152 +
 133.153 +/*
 133.154 + * Begin a node connection with the peer on the specified TCPC.
 133.155 + *
 133.156 + * We arrive here from either an incoming or outgoing connection.
 133.157 + * This is the entrance point to the main packet-reading loop.
 133.158 + *
 133.159 + * After setting up the connection, we send the node a ping.
 133.160 + * If it doesn't respond after a timeout, we will destroy the
 133.161 + * connection.
 133.162 + */
 133.163 +void gnutella_start_connection (int fd, input_id id, TCPC *c)
 133.164 +{
 133.165 +	GtPacket    *ping;
 133.166 +	GtNode      *node;
 133.167 +
 133.168 +	node = GT_NODE(c);
 133.169 +	assert (GT_CONN(node) == c);
 133.170 +
 133.171 +	/* remove the old input handler first -- need to before sending data */
 133.172 +	input_remove (id);
 133.173 +
 133.174 +	if (net_sock_error (c->fd))
 133.175 +	{
 133.176 +		if (HANDSHAKE_DEBUG)
 133.177 +			gt_node_error (c, NULL);
 133.178 +
 133.179 +		gt_node_disconnect (c);
 133.180 +		return;
 133.181 +	}
 133.182 +
 133.183 +	/* if this is the crawler, disconnect */
 133.184 +	if (dataset_lookupstr (GT_NODE(c)->hdr, "crawler"))
 133.185 +	{
 133.186 +		if (HANDSHAKE_DEBUG)
 133.187 +			GT->DBGSOCK (GT, c, "closing crawler connection");
 133.188 +
 133.189 +		gt_node_disconnect (c);
 133.190 +		return;
 133.191 +	}
 133.192 +
 133.193 +	if (!(node->rx_stack = gt_rx_stack_new (node, c, node->rx_inflated)))
 133.194 +	{
 133.195 +		if (HANDSHAKE_DEBUG)
 133.196 +			GT->DBGSOCK (GT, c, "error allocating rx_stack");
 133.197 +
 133.198 +		gt_node_disconnect (c);
 133.199 +		return;
 133.200 +	}
 133.201 +
 133.202 +	if (!(node->tx_stack = gt_tx_stack_new (c, node->tx_deflated)))
 133.203 +	{
 133.204 +		if (HANDSHAKE_DEBUG)
 133.205 +			GT->DBGSOCK (GT, c, "error allocating tx stack");
 133.206 +
 133.207 +		gt_node_disconnect (c);
 133.208 +		return;
 133.209 +	}
 133.210 +
 133.211 +	/* determine the other node's opinion of our IP address */
 133.212 +	node->my_ip = get_self_ip (c);
 133.213 +
 133.214 +	/* determine the other ends port */
 133.215 +	peer_addr (c->fd, NULL, &node->peer_port);
 133.216 +
 133.217 +	if (HANDSHAKE_DEBUG)
 133.218 +	{
 133.219 +		GT->DBGSOCK (GT, c, "self IP=[%s]", net_ip_str (node->my_ip));
 133.220 +		GT->DBGSOCK (GT, c, "peer port=%hu", node->peer_port);
 133.221 +	}
 133.222 +
 133.223 +	if (!(ping = gt_packet_new (GT_MSG_PING, 1, NULL)))
 133.224 +	{
 133.225 +		gt_node_disconnect (c);
 133.226 +		return;
 133.227 +	}
 133.228 +
 133.229 +	/* set the state as intermediately connecting and mark the node connected
 133.230 +	 * only when it replies to our ping */
 133.231 +	gt_node_state_set (node, GT_NODE_CONNECTING_2);
 133.232 +
 133.233 +	/* give the connection some more time */
 133.234 +	gnutella_set_handshake_timeout (c, TIMEOUT_3 * SECONDS);
 133.235 +
 133.236 +	/*
 133.237 +	 * Setup our packet handlers, for both receiving and sending packets.
 133.238 +	 */
 133.239 +	gt_rx_stack_set_handler (node->rx_stack,
 133.240 +	                         (GtRxStackHandler)recv_packet,
 133.241 +	                         (GtRxStackCleanup)cleanup_node_rx,
 133.242 +	                         node);
 133.243 +
 133.244 +	gt_tx_stack_set_handler (node->tx_stack,
 133.245 +	                         (GtTxStackCleanup)cleanup_node_tx,
 133.246 +	                         node);
 133.247 +
 133.248 +	/* send first ping */
 133.249 +	gt_packet_send (c, ping);
 133.250 +	gt_packet_free (ping);
 133.251 +
 133.252 +	/* send MessagesSupported Vendor message, if this node supports it */
 133.253 +	gt_vmsg_send_supported (node);
 133.254 +}
   134.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   134.2 +++ b/src/message/gt_message.h	Sat Feb 20 21:18:28 2010 -0800
   134.3 @@ -0,0 +1,31 @@
   134.4 +/*
   134.5 + * $Id: gt_message.h,v 1.3 2004/03/24 06:21:13 hipnod Exp $
   134.6 + *
   134.7 + * Copyright (C) 2001-2003 giFT project (gift.sourceforge.net)
   134.8 + *
   134.9 + * This program is free software; you can redistribute it and/or modify it
  134.10 + * under the terms of the GNU General Public License as published by the
  134.11 + * Free Software Foundation; either version 2, or (at your option) any
  134.12 + * later version.
  134.13 + *
  134.14 + * This program is distributed in the hope that it will be useful, but
  134.15 + * WITHOUT ANY WARRANTY; without even the implied warranty of
  134.16 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
  134.17 + * General Public License for more details.
  134.18 + */
  134.19 +
  134.20 +#ifndef GIFT_GT_MESSAGE_H_
  134.21 +#define GIFT_GT_MESSAGE_H_
  134.22 +
  134.23 +/*****************************************************************************/
  134.24 +
  134.25 +void gnutella_start_connection (int fd, input_id id, TCPC *c);
  134.26 +
  134.27 +/*****************************************************************************/
  134.28 +
  134.29 +/* HACK: this isn't available in libgift, but giftd */
  134.30 +extern unsigned long upload_availability (void);
  134.31 +
  134.32 +/*****************************************************************************/
  134.33 +
  134.34 +#endif /* GIFT_GT_MESSAGE_H_ */
   135.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   135.2 +++ b/src/message/msg_handler.h	Sat Feb 20 21:18:28 2010 -0800
   135.3 @@ -0,0 +1,71 @@
   135.4 +/*
   135.5 + * $Id: msg_handler.h,v 1.3 2004/01/07 07:24:43 hipnod Exp $
   135.6 + *
   135.7 + * Copyright (C) 2001-2003 giFT project (gift.sourceforge.net)
   135.8 + *
   135.9 + * This program is free software; you can redistribute it and/or modify it
  135.10 + * under the terms of the GNU General Public License as published by the
  135.11 + * Free Software Foundation; either version 2, or (at your option) any
  135.12 + * later version.
  135.13 + *
  135.14 + * This program is distributed in the hope that it will be useful, but
  135.15 + * WITHOUT ANY WARRANTY; without even the implied warranty of
  135.16 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
  135.17 + * General Public License for more details.
  135.18 + */
  135.19 +
  135.20 +#ifndef GIFT_GT_MSG_HANDLER_H_
  135.21 +#define GIFT_GT_MSG_HANDLER_H_
  135.22 +
  135.23 +/*****************************************************************************/
  135.24 +
  135.25 +#define MSG_DEBUG             gt_config_get_int("message/debug=0")
  135.26 +
  135.27 +/*****************************************************************************/
  135.28 +
  135.29 +/* Erm, ugly node state encoded in a query-hit */
  135.30 +typedef enum gt_eqhd_type1
  135.31 +{
  135.32 +	EQHD1_EMPTY       = 0x00,  /* no flags set */
  135.33 +	EQHD1_PUSH_FLAG   = 0x01,  /* send a push request for this result */
  135.34 +	EQHD1_HAS_BAD     = 0x02,  /* bad flag in qhd[2] is signficant,always 0? */
  135.35 +	EQHD1_HAS_BUSY    = 0x04,  /* busy ... */
  135.36 +	EQHD1_HAS_STABLE  = 0x08,  /* stable ... */
  135.37 +	EQHD1_HAS_SPEED   = 0x10,  /* speed ... */
  135.38 +	EQHD1_HAS_GGEP    = 0x20,  /* query-hit has GGEP encoded block */
  135.39 +} gt_eqhd1_t;
  135.40 +
  135.41 +typedef enum gt_eqhd_type2
  135.42 +{
  135.43 +	EQHD2_EMPTY       = 0x00,  /* no flags set */
  135.44 +	EQHD2_HAS_PUSH    = 0x01,  /* set if push flag is significant */
  135.45 +	EQHD2_BAD_FLAG    = 0x02,  /* always 0? */
  135.46 +	EQHD2_BUSY_FLAG   = 0x04,  /* set if for no availability */
  135.47 +	EQHD2_STABLE_FLAG = 0x08,  /* set if transmitted an upload */
  135.48 +	EQHD2_SPEED_FLAG  = 0x10,  /* if set, speed is max attained upload speed */
  135.49 +	EQHD2_HAS_GGEP    = 0x20,  /* packet has GGEP */
  135.50 +} gt_eqhd2_t;
  135.51 +
  135.52 +/*****************************************************************************/
  135.53 +
  135.54 +#include "gt_node.h"
  135.55 +#include "gt_packet.h"
  135.56 +
  135.57 +#include "message/gt_message.h"
  135.58 +
  135.59 +/*****************************************************************************/
  135.60 +
  135.61 +/*
  135.62 + * A message handler function.
  135.63 + */
  135.64 +typedef void (*GtMessageHandler) (GtNode *node, TCPC *c, GtPacket *packet);
  135.65 +
  135.66 +#define MSG_HANDLER_ARG_NAMES \
  135.67 +	node, c, packet
  135.68 +
  135.69 +#define GT_MSG_HANDLER(func) \
  135.70 +	void func (GtNode *node, TCPC *c, GtPacket *packet)
  135.71 +
  135.72 +/*****************************************************************************/
  135.73 +
  135.74 +#endif /* GIFT_GT_MSG_HANDLER_H_ */
   136.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   136.2 +++ b/src/message/ping.c	Sat Feb 20 21:18:28 2010 -0800
   136.3 @@ -0,0 +1,196 @@
   136.4 +/*
   136.5 + * $Id: ping.c,v 1.4 2004/03/05 17:49:40 hipnod Exp $
   136.6 + *
   136.7 + * Copyright (C) 2001-2003 giFT project (gift.sourceforge.net)
   136.8 + *
   136.9 + * This program is free software; you can redistribute it and/or modify it
  136.10 + * under the terms of the GNU General Public License as published by the
  136.11 + * Free Software Foundation; either version 2, or (at your option) any
  136.12 + * later version.
  136.13 + *
  136.14 + * This program is distributed in the hope that it will be useful, but
  136.15 + * WITHOUT ANY WARRANTY; without even the implied warranty of
  136.16 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
  136.17 + * General Public License for more details.
  136.18 + */
  136.19 +
  136.20 +#include "gt_gnutella.h"
  136.21 +#include "message/msg_handler.h"
  136.22 +
  136.23 +#include "gt_node_list.h"
  136.24 +#include "gt_bind.h"
  136.25 +#include "gt_netorg.h"
  136.26 +
  136.27 +#include "gt_stats.h"
  136.28 +#include "gt_share.h"
  136.29 +
  136.30 +/******************************************************************************/
  136.31 +
  136.32 +BOOL gt_is_pow2 (uint32_t num)
  136.33 +{
  136.34 +	return BOOL_EXPR (num > 0 && (num & (num-1)) == 0);
  136.35 +}
  136.36 +
  136.37 +static uint32_t get_shared_size (unsigned long size_mb)
  136.38 +{
  136.39 +	uint32_t size_kb;
  136.40 +
  136.41 +	size_kb = size_mb * 1024;
  136.42 +
  136.43 +	if (GT_SELF->klass & GT_NODE_ULTRA)
  136.44 +		/* TODO: round up to nearest power of two >= 8 here */;
  136.45 +	else if (gt_is_pow2 (size_kb))
  136.46 +		size_kb += 5; /* unmakes all powers of two, including 1 */
  136.47 +
  136.48 +	return size_kb;
  136.49 +}
  136.50 +
  136.51 +/* reply to a ping packet */
  136.52 +static void ping_reply_self (GtPacket *packet, TCPC *c)
  136.53 +{
  136.54 +	unsigned long  files, size_kb;
  136.55 +	double         size_mb;
  136.56 +	GtPacket      *reply;
  136.57 +
  136.58 +	share_index (&files, &size_mb);
  136.59 +	size_kb = get_shared_size (size_mb);
  136.60 +
  136.61 +	if (!(reply = gt_packet_reply (packet, GT_MSG_PING_REPLY)))
  136.62 +		return;
  136.63 +
  136.64 +	gt_packet_put_port   (reply, GT_SELF->gt_port);
  136.65 +	gt_packet_put_ip     (reply, GT_NODE(c)->my_ip);
  136.66 +	gt_packet_put_uint32 (reply, (uint32_t)files);
  136.67 +	gt_packet_put_uint32 (reply, (uint32_t)size_kb);
  136.68 +
  136.69 +	if (gt_packet_error (reply))
  136.70 +	{
  136.71 +		gt_packet_free (reply);
  136.72 +		return;
  136.73 +	}
  136.74 +
  136.75 +	gt_packet_send (c, reply);
  136.76 +	gt_packet_free (reply);
  136.77 +}
  136.78 +
  136.79 +/* send info about node dst to node c */
  136.80 +static TCPC *send_status (TCPC *c, GtNode *node, void **data)
  136.81 +{
  136.82 +	GtPacket   *pkt = (GtPacket *)   data[0];
  136.83 +	TCPC       *dst = (TCPC *)       data[1];
  136.84 +	GtPacket   *reply;
  136.85 +
  136.86 +	/* don't send a ping for the node itself */
  136.87 +	if (c == dst)
  136.88 +		return NULL;
  136.89 +
  136.90 +	if (!(reply = gt_packet_reply (pkt, GT_MSG_PING_REPLY)))
  136.91 +		return NULL;
  136.92 +
  136.93 +	gt_packet_put_port   (reply, node->gt_port);
  136.94 +	gt_packet_put_ip     (reply, node->ip);
  136.95 +	gt_packet_put_uint32 (reply, node->files);
  136.96 +	gt_packet_put_uint32 (reply, node->size_kb);
  136.97 +
  136.98 +	/* set the number of hops travelled to 1 */
  136.99 +	gt_packet_set_hops (reply, 1);
 136.100 +
 136.101 +	if (gt_packet_error (reply))
 136.102 +	{
 136.103 +		gt_packet_free (reply);
 136.104 +		return NULL;
 136.105 +	}
 136.106 +
 136.107 +	gt_packet_send (dst, reply);
 136.108 +	gt_packet_free (reply);
 136.109 +
 136.110 +	return NULL;
 136.111 +}
 136.112 +
 136.113 +static void handle_crawler_ping (GtPacket *packet, TCPC *c)
 136.114 +{
 136.115 +	void *data[2];
 136.116 +
 136.117 +	data[0] = packet;
 136.118 +	data[1] = c;
 136.119 +
 136.120 +	/* reply ourselves */
 136.121 +	ping_reply_self (packet, c);
 136.122 +
 136.123 +	/* send pings from connected hosts */
 136.124 +	gt_conn_foreach (GT_CONN_FOREACH(send_status), data,
 136.125 +	                 GT_NODE_NONE, GT_NODE_CONNECTED, 0);
 136.126 +}
 136.127 +
 136.128 +static BOOL need_connections (void)
 136.129 +{
 136.130 +	BOOL am_ultrapeer;
 136.131 +
 136.132 +	am_ultrapeer = GT_SELF->klass & GT_NODE_ULTRA;
 136.133 +
 136.134 +	/* send a pong if we need connections, but do this
 136.135 +	 * only if this is a search node: leaves shouldnt send pongs */
 136.136 +	if (gt_conn_need_connections (GT_NODE_ULTRA) > 0 && am_ultrapeer)
 136.137 +		return TRUE;
 136.138 +
 136.139 +	/* pretend we need connections temporarily even if we don't in order to
 136.140 +	 * figure out whether we are firewalled or not */
 136.141 +	if (gt_uptime () < 10 * EMINUTES && GT_SELF->firewalled)
 136.142 +		return TRUE;
 136.143 +
 136.144 +	return FALSE;
 136.145 +}
 136.146 +
 136.147 +GT_MSG_HANDLER(gt_msg_ping)
 136.148 +{
 136.149 +	time_t   last_ping_time, now;
 136.150 +	uint8_t  ttl, hops;
 136.151 +
 136.152 +	now = time (NULL);
 136.153 +
 136.154 +	ttl  = gt_packet_ttl (packet);
 136.155 +	hops = gt_packet_hops (packet);
 136.156 +
 136.157 +	last_ping_time = GT_NODE(c)->last_ping_time;
 136.158 +	GT_NODE(c)->last_ping_time = now;
 136.159 +
 136.160 +	if ((ttl == 1 && (hops == 0 || hops == 1))    /* tests if host is up */
 136.161 +	 || GT_NODE(c)->state == GT_NODE_CONNECTING_2 /* need to reply */
 136.162 +	 || need_connections ())                      /* we need connections */
 136.163 +	{
 136.164 +		ping_reply_self (packet, c);
 136.165 +
 136.166 +		if (ttl == 1)
 136.167 +			return;
 136.168 +	}
 136.169 +	else if (ttl == 2 && hops == 0)
 136.170 +	{
 136.171 +		/* crawler ping: respond with all connected nodes */
 136.172 +		handle_crawler_ping (packet, c);
 136.173 +		return;
 136.174 +	}
 136.175 +
 136.176 +	/* dont re-broadcast pings from search nodes if we are not one */
 136.177 +	if ((GT_NODE(c)->klass & GT_NODE_ULTRA) && !(GT_SELF->klass & GT_NODE_ULTRA))
 136.178 +	   return;
 136.179 +
 136.180 +#if 0
 136.181 +	/* notify this host when the pong cache gets full */
 136.182 +	pong_cache_waiter_add (c, packet);
 136.183 +#endif
 136.184 +
 136.185 +	/* dont accept pings too often */
 136.186 +	if (now - last_ping_time < 30 * ESECONDS)
 136.187 +		return;
 136.188 +
 136.189 +#if 0
 136.190 +	if (!pong_cache_reply (c, packet))
 136.191 +	{
 136.192 +		/* refill the pong cache */
 136.193 +		pong_cache_refill ();
 136.194 +		return;
 136.195 +	}
 136.196 +
 136.197 +	pong_cache_waiter_remove (c);
 136.198 +#endif
 136.199 +}
   137.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   137.2 +++ b/src/message/ping_reply.c	Sat Feb 20 21:18:28 2010 -0800
   137.3 @@ -0,0 +1,156 @@
   137.4 +/*
   137.5 + * $Id: ping_reply.c,v 1.7 2005/01/04 15:00:52 mkern Exp $
   137.6 + *
   137.7 + * Copyright (C) 2001-2003 giFT project (gift.sourceforge.net)
   137.8 + *
   137.9 + * This program is free software; you can redistribute it and/or modify it
  137.10 + * under the terms of the GNU General Public License as published by the
  137.11 + * Free Software Foundation; either version 2, or (at your option) any
  137.12 + * later version.
  137.13 + *
  137.14 + * This program is distributed in the hope that it will be useful, but
  137.15 + * WITHOUT ANY WARRANTY; without even the implied warranty of
  137.16 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
  137.17 + * General Public License for more details.
  137.18 + */
  137.19 +
  137.20 +#include "gt_gnutella.h"
  137.21 +#include "message/msg_handler.h"
  137.22 +
  137.23 +#include "gt_node_cache.h"
  137.24 +#include "gt_connect.h"
  137.25 +#include "gt_bind.h"
  137.26 +
  137.27 +#include "gt_search.h"
  137.28 +#include "gt_share_state.h"
  137.29 +#include "gt_query_route.h"
  137.30 +#include "gt_stats.h"
  137.31 +
  137.32 +/*****************************************************************************/
  137.33 +
  137.34 +extern BOOL gt_is_pow2 (uint32_t num);   /* ping.c */
  137.35 +
  137.36 +/*****************************************************************************/
  137.37 +
  137.38 +/*
  137.39 + * Update the port on the first pong or when the pong contains a different
  137.40 + * pong.
  137.41 + */
  137.42 +static void update_port (GtNode *node, in_port_t new_port)
  137.43 +{
  137.44 +	/* update the port */
  137.45 +	node->gt_port = new_port;
  137.46 +
  137.47 +	/*
  137.48 +	 * Test if the node is connectable.  This will play with the node's
  137.49 +	 * ->verified and ->firewalled bits.
  137.50 +	 *
  137.51 +	 * This is only important if this node is running as an ultrapeer, because
  137.52 +	 * it lets us know whether we should route queries from firewalled peers
  137.53 +	 * to the remote node.
  137.54 +	 */
  137.55 +	if (GT_SELF->klass & GT_NODE_ULTRA)
  137.56 +		gt_connect_test (node, node->gt_port);
  137.57 +}
  137.58 +
  137.59 +/*
  137.60 + * Transition the node into state 'connected', and do various things.  This
  137.61 + * has become a bit crufty and miscellaneous.  TODO: change this to a callback
  137.62 + * registration system in gt_node.c, register the callbacks in gt_gnutella.c
  137.63 + */
  137.64 +static BOOL complete_connection (GtNode *node)
  137.65 +{
  137.66 +	/* mark this node as now connected */
  137.67 +	gt_node_state_set (node, GT_NODE_CONNECTED);
  137.68 +
  137.69 +	/* submit the routing table */
  137.70 +	if ((node->klass & GT_NODE_ULTRA) &&
  137.71 +	    !(GT_SELF->klass & GT_NODE_ULTRA))
  137.72 +	{
  137.73 +		query_route_table_submit (GT_CONN(node));
  137.74 +	}
  137.75 +
  137.76 +	/* submit unfinished searches soon */
  137.77 +	gt_searches_submit (GT_CONN(node), 30 * SECONDS);
  137.78 +
  137.79 +	/* let the bind subsystem send a ConnectBack for tracking firewalled
  137.80 +	 * status */
  137.81 +	gt_bind_completed_connection (node);
  137.82 +
  137.83 +	if (!(node->share_state = gt_share_state_new ()))
  137.84 +		return FALSE;
  137.85 +
  137.86 +	gt_share_state_update (node);
  137.87 +
  137.88 +	return TRUE;
  137.89 +}
  137.90 +
  137.91 +GT_MSG_HANDLER(gt_msg_ping_reply)
  137.92 +{
  137.93 +	in_port_t       port;
  137.94 +	in_addr_t       ip;
  137.95 +	uint32_t        files;
  137.96 +	uint32_t        size_kb;
  137.97 +	gt_node_class_t klass;
  137.98 +
  137.99 +	port    = gt_packet_get_port   (packet);
 137.100 +	ip      = gt_packet_get_ip     (packet);
 137.101 +	files   = gt_packet_get_uint32 (packet);
 137.102 +	size_kb = gt_packet_get_uint32 (packet);
 137.103 +
 137.104 +	/* this will keep the node from being disconnected by idle-check loop */
 137.105 +	if (node->pings_with_noreply > 0)
 137.106 +		node->pings_with_noreply = 0;
 137.107 +
 137.108 +	/* update stats and port */
 137.109 +	if (gt_packet_ttl (packet) == 1 && gt_packet_hops (packet) == 0)
 137.110 +	{
 137.111 +		/* check if this is the first ping response on this connection */
 137.112 +		if (node->state == GT_NODE_CONNECTING_2)
 137.113 +		{
 137.114 +			if (!complete_connection (node))
 137.115 +			{
 137.116 +				gt_node_disconnect (c);
 137.117 +				return;
 137.118 +			}
 137.119 +		}
 137.120 +
 137.121 +		if (ip == node->ip)
 137.122 +		{
 137.123 +			if (node->gt_port != port || !node->verified)
 137.124 +				update_port (node, port);
 137.125 +
 137.126 +			/* update stats information */
 137.127 +			node->size_kb = size_kb;
 137.128 +			node->files   = files;
 137.129 +
 137.130 +			/* don't add this node to the cache */
 137.131 +			return;
 137.132 +		}
 137.133 +
 137.134 +		/*
 137.135 +		 * Morpheus nodes send pongs for other nodes with Hops=1.  If
 137.136 +		 * the IP doesn't equal the observed IP, then add the node to the
 137.137 +		 * node cache.  This may create problems with trying to connect twice
 137.138 +		 * to some users, though.
 137.139 +		 */
 137.140 +	}
 137.141 +
 137.142 +	/* add this node to the cache */
 137.143 +	klass = GT_NODE_LEAF;
 137.144 +
 137.145 +	/* LimeWire marks ultrapeer pongs by making files size a power of two */
 137.146 +	if (size_kb >= 8 && gt_is_pow2 (size_kb))
 137.147 +		klass = GT_NODE_ULTRA;
 137.148 +
 137.149 +	/* don't register this node if its local and the peer isnt */
 137.150 +	if (gt_is_local_ip (ip, node->ip))
 137.151 +		return;
 137.152 +
 137.153 +	/* keep track of stats from pongs */
 137.154 +	gt_stats_accumulate (ip, port, node->ip, files, size_kb);
 137.155 +
 137.156 +	/* TODO: check uptime GGEP extension and add it here */
 137.157 +	gt_node_cache_add_ipv4 (ip, port, klass, time (NULL), 0, node->ip);
 137.158 +	gt_node_cache_trace ();
 137.159 +}
   138.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   138.2 +++ b/src/message/push.c	Sat Feb 20 21:18:28 2010 -0800
   138.3 @@ -0,0 +1,216 @@
   138.4 +/*
   138.5 + * $Id: push.c,v 1.3 2004/03/24 06:36:12 hipnod Exp $
   138.6 + *
   138.7 + * Copyright (C) 2001-2003 giFT project (gift.sourceforge.net)
   138.8 + *
   138.9 + * This program is free software; you can redistribute it and/or modify it
  138.10 + * under the terms of the GNU General Public License as published by the
  138.11 + * Free Software Foundation; either version 2, or (at your option) any
  138.12 + * later version.
  138.13 + *
  138.14 + * This program is distributed in the hope that it will be useful, but
  138.15 + * WITHOUT ANY WARRANTY; without even the implied warranty of
  138.16 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
  138.17 + * General Public License for more details.
  138.18 + */
  138.19 +
  138.20 +#include "gt_gnutella.h"
  138.21 +#include "msg_handler.h"
  138.22 +
  138.23 +#include "gt_accept.h"
  138.24 +#include "gt_share_file.h"
  138.25 +#include "gt_share.h"
  138.26 +
  138.27 +/*****************************************************************************/
  138.28 +
  138.29 +typedef struct giv_connect
  138.30 +{
  138.31 +	uint32_t   index;
  138.32 +	char      *filename;
  138.33 +} giv_connect_t;
  138.34 +
  138.35 +/*****************************************************************************/
  138.36 +
  138.37 +static giv_connect_t *giv_connect_alloc (uint32_t index, const char *filename)
  138.38 +{
  138.39 +	giv_connect_t *giv;
  138.40 +
  138.41 +	if (!(giv = malloc (sizeof(giv_connect_t))))
  138.42 +		return NULL;
  138.43 +
  138.44 +	if (filename)
  138.45 +		giv->filename = STRDUP (filename);
  138.46 +	else
  138.47 +		giv->filename = NULL;
  138.48 +
  138.49 +	giv->index = index;
  138.50 +
  138.51 +	return giv;
  138.52 +}
  138.53 +
  138.54 +static void giv_connect_free (giv_connect_t *giv)
  138.55 +{
  138.56 +	if (!giv)
  138.57 +		return;
  138.58 +
  138.59 +	free (giv->filename);
  138.60 +	free (giv);
  138.61 +}
  138.62 +
  138.63 +static char *giv_connect_str (giv_connect_t *giv)
  138.64 +{
  138.65 +	String *s;
  138.66 +
  138.67 +	if (!(s = string_new (NULL, 0, 0, TRUE)))
  138.68 +		return NULL;
  138.69 +
  138.70 +	string_append  (s, "GIV ");
  138.71 +	string_appendf (s, "%u:", giv->index);
  138.72 +	string_appendf (s, "%s/", gt_guid_str (GT_SELF_GUID));
  138.73 +
  138.74 +	if (giv->filename && !string_isempty (giv->filename))
  138.75 +		string_append (s, giv->filename);
  138.76 +
  138.77 +	string_append (s, "\n\n");
  138.78 +
  138.79 +	return string_free_keep (s);
  138.80 +}
  138.81 +
  138.82 +/*****************************************************************************/
  138.83 +
  138.84 +static void handle_giv_connect (int fd, input_id id, TCPC *c,
  138.85 +                                giv_connect_t *giv)
  138.86 +{
  138.87 +	char *str;
  138.88 +	int   ret;
  138.89 +
  138.90 +	if (MSG_DEBUG)
  138.91 +		GT->DBGFN (GT, "entered");
  138.92 +
  138.93 +	if (net_sock_error (fd))
  138.94 +	{
  138.95 +		if (MSG_DEBUG)
  138.96 +			GT->DBGFN (GT, "error connecting back: %s", GIFT_NETERROR ());
  138.97 +
  138.98 +		tcp_close (c);
  138.99 +		return;
 138.100 +	}
 138.101 +
 138.102 +	/* restore the index */
 138.103 +	c->udata = NULL;
 138.104 +	str = giv_connect_str (giv);
 138.105 +
 138.106 +	if (MSG_DEBUG)
 138.107 +		GT->DBGSOCK (GT, c, "sending GIV response: %s", str);
 138.108 +
 138.109 +	ret = tcp_send (c, str, strlen (str));
 138.110 +	free (str);
 138.111 +
 138.112 +	if (ret <= 0)
 138.113 +	{
 138.114 +		if (MSG_DEBUG)
 138.115 +			GT->DBGFN (GT, "error sending: %s", GIFT_NETERROR ());
 138.116 +
 138.117 +		tcp_close (c);
 138.118 +		return;
 138.119 +	}
 138.120 +
 138.121 +	/* use this connection for something */
 138.122 +	input_remove (id);
 138.123 +	input_add (c->fd, c, INPUT_READ,
 138.124 +	           (InputCallback)gt_handshake_dispatch_incoming, TIMEOUT_DEF);
 138.125 +}
 138.126 +
 138.127 +static void giv_connect (int fd, input_id id, TCPC *c)
 138.128 +{
 138.129 +	giv_connect_t *giv;
 138.130 +
 138.131 +	giv = c->udata;
 138.132 +	handle_giv_connect (fd, id, c, giv);
 138.133 +
 138.134 +	giv_connect_free (giv);
 138.135 +}
 138.136 +
 138.137 +static void gt_giv_request (GtNode *src, uint32_t index, in_addr_t ip,
 138.138 +                            in_port_t port, uint8_t hops)
 138.139 +{
 138.140 +	giv_connect_t *giv;
 138.141 +	char          *filename = NULL;
 138.142 +	Share         *share;
 138.143 +	GtShare       *gt_share;
 138.144 +	TCPC          *c;
 138.145 +
 138.146 +	if (MSG_DEBUG)
 138.147 +		GT->DBGFN (GT, "entered");
 138.148 +
 138.149 +	/* if the pushed IP address is local, forget about it */
 138.150 +	if (gt_is_local_ip (ip, src->ip))
 138.151 +		return;
 138.152 +
 138.153 +	/* special case: if the node we got the giv from is local
 138.154 +	 * and the giv is from them (hops=0), don't connect to the
 138.155 +	 * external address but the internal */
 138.156 +	if (hops == 0 && gt_is_local_ip (src->ip, ip))
 138.157 +		ip = src->ip;
 138.158 +
 138.159 +	/*
 138.160 +	 * Look for the index in the local shared database, if it is found
 138.161 +	 * keep track of the filename.
 138.162 +	 */
 138.163 +	if ((share = gt_share_local_lookup_by_index (index, NULL)) != NULL &&
 138.164 +	    (gt_share = share_get_udata (share, GT->name)) != NULL)
 138.165 +	{
 138.166 +		filename = gt_share->filename;
 138.167 +	}
 138.168 +
 138.169 +	if (!(giv = giv_connect_alloc (index, filename)))
 138.170 +		return;
 138.171 +
 138.172 +	if (!(c = tcp_open (ip, port, FALSE)))
 138.173 +	{
 138.174 +		giv_connect_free (giv);
 138.175 +		return;
 138.176 +	}
 138.177 +
 138.178 +	c->udata = giv;
 138.179 +
 138.180 +	input_add (c->fd, c, INPUT_WRITE,
 138.181 +	           (InputCallback)giv_connect, TIMEOUT_DEF);
 138.182 +}
 138.183 +
 138.184 +GT_MSG_HANDLER(gt_msg_push)
 138.185 +{
 138.186 +	gt_guid_t  *client_guid;
 138.187 +	uint32_t    index;
 138.188 +	uint32_t    ip;
 138.189 +	uint16_t    port;
 138.190 +	uint8_t     hops;
 138.191 +
 138.192 +	if (MSG_DEBUG)
 138.193 +		GT->DBGFN (GT, "entered");
 138.194 +
 138.195 +	client_guid = gt_packet_get_ustr   (packet, 16);
 138.196 +	index       = gt_packet_get_uint32 (packet);
 138.197 +	ip          = gt_packet_get_ip     (packet);
 138.198 +	port        = gt_packet_get_port   (packet);
 138.199 +
 138.200 +	hops = gt_packet_hops (packet);
 138.201 +
 138.202 +	if (MSG_DEBUG)
 138.203 +	{
 138.204 +		GT->DBGSOCK (GT, c, "client_guid=%s index=%d ip=%s port=%hu",
 138.205 +		             gt_guid_str (client_guid), index, net_ip_str (ip), port);
 138.206 +	}
 138.207 +
 138.208 +	if (gt_guid_cmp (client_guid, GT_SELF_GUID) == 0)
 138.209 +	{
 138.210 +		/* TODO: we should not respond if we get a lot of these */
 138.211 +		gt_giv_request (GT_NODE(c), index, ip, port, hops);
 138.212 +		return;
 138.213 +	}
 138.214 +
 138.215 +#if 0
 138.216 +	if ((dst_c = push_cache_lookup (client->guid)))
 138.217 +		gt_route_forward_packet (dst_c, packet);
 138.218 +#endif
 138.219 +}
   139.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   139.2 +++ b/src/message/query.c	Sat Feb 20 21:18:28 2010 -0800
   139.3 @@ -0,0 +1,529 @@
   139.4 +/*
   139.5 + * $Id: query.c,v 1.10 2004/06/04 15:44:59 hipnod Exp $
   139.6 + *
   139.7 + * Copyright (C) 2001-2003 giFT project (gift.sourceforge.net)
   139.8 + *
   139.9 + * This program is free software; you can redistribute it and/or modify it
  139.10 + * under the terms of the GNU General Public License as published by the
  139.11 + * Free Software Foundation; either version 2, or (at your option) any
  139.12 + * later version.
  139.13 + *
  139.14 + * This program is distributed in the hope that it will be useful, but
  139.15 + * WITHOUT ANY WARRANTY; without even the implied warranty of
  139.16 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
  139.17 + * General Public License for more details.
  139.18 + */
  139.19 +
  139.20 +#include "gt_gnutella.h"
  139.21 +#include "message/msg_handler.h"
  139.22 +
  139.23 +#include "sha1.h"
  139.24 +#include "xml.h"
  139.25 +
  139.26 +#include "gt_share.h"
  139.27 +#include "gt_share_file.h"
  139.28 +#include "gt_share_state.h"
  139.29 +
  139.30 +#include "gt_search.h"
  139.31 +#include "gt_search_exec.h"
  139.32 +#include "gt_urn.h"
  139.33 +
  139.34 +#include "transfer/push_proxy.h"
  139.35 +
  139.36 +/*****************************************************************************/
  139.37 +
  139.38 +#define LOG_RESULT_PACKETS    gt_config_get_int("search/log_result_packets=0")
  139.39 +
  139.40 +/*****************************************************************************/
  139.41 +
  139.42 +typedef struct gt_search_reply
  139.43 +{
  139.44 +	uint8_t     ttl;
  139.45 +	uint8_t     results;  /* number of results on the current packet */
  139.46 +	GtPacket   *packet;   /* the current packet to stack results on */
  139.47 +	gt_guid_t  *guid;
  139.48 +} gt_search_reply_t;
  139.49 +
  139.50 +/*****************************************************************************/
  139.51 +
  139.52 +/* cache of recent queries TODO: flush this on plugin unload */
  139.53 +static Dataset    *query_cache    = NULL;
  139.54 +
  139.55 +/* flushes the old cache entries */
  139.56 +static timer_id    flush_timer    = 0;
  139.57 +
  139.58 +/*****************************************************************************/
  139.59 +
  139.60 +static BOOL is_printable (const char *s)
  139.61 +{
  139.62 +	while (*s)
  139.63 +	{
  139.64 +		if (!isprint (*s))
  139.65 +			return FALSE;
  139.66 +
  139.67 +		s++;
  139.68 +	}
  139.69 +
  139.70 +	return TRUE;
  139.71 +}
  139.72 +
  139.73 +static void parse_text_meta (const char *data, Dataset **meta)
  139.74 +{
  139.75 +	int      rate, freq, min, sec;
  139.76 +	int      n;
  139.77 +	char    *lower;
  139.78 +
  139.79 +	if (!data)
  139.80 +		return;
  139.81 +
  139.82 +	/* only ASCII strings are plaintext metadata */
  139.83 +	if (!is_printable (data))
  139.84 +		return;
  139.85 +
  139.86 +	/* skip strings that start with "urn:", we know what those are */
  139.87 +	if (!strncasecmp (data, "urn:", 4))
  139.88 +		return;
  139.89 +
  139.90 +	if (!(lower = STRDUP (data)))
  139.91 +		return;
  139.92 +
  139.93 +	string_lower (lower);
  139.94 +	n = sscanf (lower, "%d kbps %d khz %d:%d", &rate, &freq, &min, &sec);
  139.95 +
  139.96 +	/* try again with a slightly different format if it failed */
  139.97 +	if (n != 4)
  139.98 +		n = sscanf (lower, "%d kbps(vbr) %d khz %d:%d", &rate, &freq, &min, &sec);
  139.99 +
 139.100 +	free (lower);
 139.101 +
 139.102 +	if (n != 4)
 139.103 +	{
 139.104 +#if 0
 139.105 +		static int warned = 0;
 139.106 +
 139.107 +		if (warned++ < 4)
 139.108 +			GT->DBGFN (GT, "unknown plaintext metadata?: %s", data);
 139.109 +#endif
 139.110 +
 139.111 +		return;
 139.112 +	}
 139.113 +
 139.114 +	/* XXX: actually this should be META_DEBUG */
 139.115 +	if (XML_DEBUG)
 139.116 +		GT->DBGFN (GT, "parsed %d kbps %d khz %d:%d", rate, freq, min, sec);
 139.117 +
 139.118 +	dataset_insertstr (meta, "bitrate",   stringf ("%li", rate * 1000));
 139.119 +	dataset_insertstr (meta, "frequency", stringf ("%u", freq * 1000));
 139.120 +	dataset_insertstr (meta, "duration",  stringf ("%i", min * 60 + sec));
 139.121 +}
 139.122 +
 139.123 +void gt_parse_extended_data (char *ext_block, gt_urn_t **r_urn,
 139.124 +                             Dataset **r_meta)
 139.125 +{
 139.126 +	gt_urn_t  *urn = NULL;
 139.127 +	char      *ext;
 139.128 +
 139.129 +	if (r_urn)
 139.130 +		*r_urn = NULL;
 139.131 +	if (r_meta)
 139.132 +		*r_meta = NULL;
 139.133 +
 139.134 +	if (!ext_block)
 139.135 +		return;
 139.136 +
 139.137 +	/*
 139.138 +	 * 0x1c is the separator character for so-called "GEM"
 139.139 +	 * (Gnutella-Extension Mechanism) extensions.
 139.140 +	 */
 139.141 +	while ((ext = string_sep (&ext_block, "\x1c")))
 139.142 +	{
 139.143 +		if (string_isempty (ext))
 139.144 +			break;
 139.145 +
 139.146 +		if (r_urn && (urn = gt_urn_parse (ext)))
 139.147 +		{
 139.148 +			free (*r_urn);
 139.149 +			*r_urn = urn;
 139.150 +		}
 139.151 +
 139.152 +		if (r_meta)
 139.153 +		{
 139.154 +			parse_text_meta (ext, r_meta);
 139.155 +			gt_xml_parse (ext, r_meta);
 139.156 +		}
 139.157 +	}
 139.158 +}
 139.159 +
 139.160 +static BOOL append_result (GtPacket *packet, FileShare *file)
 139.161 +{
 139.162 +	GtShare    *share;
 139.163 +	Hash       *hash;
 139.164 +
 139.165 +	if (!(share = share_get_udata (file, GT->name)))
 139.166 +		return FALSE;
 139.167 +
 139.168 +	/* search results
 139.169 +	 * format: <index#> <file size> <file name> <extra data(include hash)> */
 139.170 +	gt_packet_put_uint32 (packet, share->index);
 139.171 +	gt_packet_put_uint32 (packet, file->size);
 139.172 +	gt_packet_put_str    (packet, share->filename);
 139.173 +
 139.174 +	/*
 139.175 +	 * This is the information that goes "between the nulls" in a
 139.176 +	 * query hit. The first null comes after the filename.
 139.177 +	 *
 139.178 +	 * This is a bit specific and icky. It should be abstracted away.
 139.179 +	 */
 139.180 +	if ((hash = share_get_hash (file, "SHA1")))
 139.181 +	{
 139.182 +		char *sha1;
 139.183 +
 139.184 +		assert (hash->len == SHA1_BINSIZE);
 139.185 +
 139.186 +		if ((sha1 = sha1_string (hash->data)))
 139.187 +		{
 139.188 +			char  buf[128];
 139.189 +			int   len;
 139.190 +
 139.191 +			/* make the hash be uppercase */
 139.192 +			string_upper (sha1);
 139.193 +
 139.194 +			len = strlen (sha1);
 139.195 +			assert (len == SHA1_STRLEN);
 139.196 +
 139.197 +			snprintf (buf, sizeof (buf) - 1, "urn:sha1:%s", sha1);
 139.198 +			len += strlen ("urn:sha1:");
 139.199 +
 139.200 +			gt_packet_put_ustr (packet, buf, len);
 139.201 +			free (sha1);
 139.202 +		}
 139.203 +	}
 139.204 +
 139.205 +	/* put the second null there */
 139.206 +	gt_packet_put_uint8 (packet, 0);
 139.207 +
 139.208 +	if (gt_packet_error (packet))
 139.209 +	{
 139.210 +		gt_packet_free (packet);
 139.211 +		return FALSE;
 139.212 +	}
 139.213 +
 139.214 +	return TRUE;
 139.215 +}
 139.216 +
 139.217 +/* add a trailer to the packets */
 139.218 +static void transmit_results (TCPC *c, GtPacket *packet, uint8_t hits)
 139.219 +{
 139.220 +	gt_eqhd1_t eqhd1 = EQHD1_EMPTY;
 139.221 +	gt_eqhd2_t eqhd2 = EQHD2_EMPTY;
 139.222 +	uint8_t   *ggep;
 139.223 +	size_t     ggep_len;
 139.224 +
 139.225 +	/* set the push bit as significant */
 139.226 +	eqhd2 |= EQHD2_HAS_PUSH;
 139.227 +	/* set the busy bit as significant */
 139.228 + 	eqhd1 |= EQHD1_HAS_BUSY;
 139.229 +
 139.230 +	/*
 139.231 +	 * We shouldnt mark ourselves firewalled if the destination is
 139.232 +	 * a local ip address and ttl == 1. However, for greater TTLs,
 139.233 +	 * there's no knowing if we should mark it or not...
 139.234 +	 */
 139.235 +	if (GT_SELF->firewalled)
 139.236 +		eqhd1 |= EQHD1_PUSH_FLAG;
 139.237 +
 139.238 +	if (upload_availability () == 0)
 139.239 +		eqhd2 |= EQHD2_BUSY_FLAG;
 139.240 +
 139.241 +	/* add the query hit descriptor
 139.242 +	 * <vendor id> <length> <qhd_data1> <qhd_data2> <private_data> */
 139.243 +	gt_packet_put_ustr   (packet, (const unsigned char *)"GIFT", 4);
 139.244 +	gt_packet_put_uint8  (packet, 2);
 139.245 +	gt_packet_put_uint8  (packet, eqhd1);
 139.246 +	gt_packet_put_uint8  (packet, eqhd2);
 139.247 +
 139.248 +	/* append GGEP block (only contains PUSH proxies for now) */
 139.249 +	if (gt_push_proxy_get_ggep_block (&ggep, &ggep_len))
 139.250 +	    gt_packet_put_ustr (packet, ggep, ggep_len);
 139.251 +
 139.252 +	/* client identifier */
 139.253 +	gt_packet_put_ustr (packet, GT_SELF_GUID, 16);
 139.254 +
 139.255 +	if (gt_packet_error (packet))
 139.256 +	{
 139.257 +		gt_packet_free (packet);
 139.258 +		return;
 139.259 +	}
 139.260 +
 139.261 +#if 0
 139.262 +	GT->DBGFN (GT, "packet before twiddling result number: (will twiddle %i)", hits);
 139.263 +	TRACE_MEM (packet->data, packet->len);
 139.264 +#endif
 139.265 +
 139.266 +	/* rewind the packet to the search hit count and replace the hitcount
 139.267 +	 * it is the first byte after the header
 139.268 +	 * XXX: this should use a facility of gt_packet */
 139.269 +	packet->data[GNUTELLA_HDR_LEN] = hits;
 139.270 +
 139.271 +#if 0
 139.272 +	GT->DBGFN (GT, "packet after twiddling:");
 139.273 +	TRACE_MEM (packet->data, packet->len);
 139.274 +#endif
 139.275 +
 139.276 +	if (LOG_RESULT_PACKETS)
 139.277 +		GT->dbg (GT, "transmitting %i", hits);
 139.278 +
 139.279 +	/* send the reply along the path to the node that queried us */
 139.280 +	gt_packet_send (c, packet);
 139.281 +	gt_packet_free (packet);
 139.282 +}
 139.283 +
 139.284 +static BOOL query_request_result (TCPC *c, FileShare *file,
 139.285 +                                  gt_search_reply_t *reply)
 139.286 +{
 139.287 +	GtPacket *packet;
 139.288 +
 139.289 +	if (!file)
 139.290 +	{
 139.291 +		/* send any remaining data */
 139.292 +		if (reply->packet)
 139.293 +			transmit_results (c, reply->packet, reply->results);
 139.294 +
 139.295 +		return FALSE;
 139.296 +	}
 139.297 +
 139.298 +	packet = reply->packet;
 139.299 +
 139.300 +	if (packet)
 139.301 +	{
 139.302 +		/* send the packet if the max results per packet is reached
 139.303 +		 * or the size of the packet is large */
 139.304 +		if (reply->results == 255 || gt_packet_payload_len (packet) > 2000)
 139.305 +		{
 139.306 +			transmit_results (c, packet, reply->results);
 139.307 +
 139.308 +			reply->packet  = NULL;
 139.309 +			reply->results = 0;
 139.310 +
 139.311 +			/* handle this item again */
 139.312 +			return TRUE;
 139.313 +		}
 139.314 +
 139.315 +		if (append_result (packet, file))
 139.316 +			reply->results++;
 139.317 +
 139.318 +		return FALSE;
 139.319 +	}
 139.320 +
 139.321 +	/* allocate a packet */
 139.322 +	if (!(packet = gt_packet_new (GT_MSG_QUERY_REPLY, reply->ttl, reply->guid)))
 139.323 +	{
 139.324 +		GIFT_ERROR (("mem failure?"));
 139.325 +		return FALSE;
 139.326 +	}
 139.327 +
 139.328 +	/* setup the search header */
 139.329 +	gt_packet_put_uint8  (packet, 0);
 139.330 +	gt_packet_put_port   (packet, GT_SELF->gt_port);
 139.331 +	gt_packet_put_ip     (packet, GT_NODE(c)->my_ip);
 139.332 +	gt_packet_put_uint32 (packet, 0); /* speed (kbits) */
 139.333 +
 139.334 +	if (gt_packet_error (packet))
 139.335 +	{
 139.336 +		GIFT_ERROR (("failed seting up search result packet"));
 139.337 +		gt_packet_free (packet);
 139.338 +		return FALSE;
 139.339 +	}
 139.340 +
 139.341 +	reply->packet = packet;
 139.342 +
 139.343 +	/* handle this item again */
 139.344 +	return TRUE;
 139.345 +}
 139.346 +
 139.347 +static BOOL query_request_result_free (TCPC *c, FileShare *file,
 139.348 +                                       gt_search_reply_t *reply)
 139.349 +{
 139.350 +	GtShare *share;
 139.351 +
 139.352 +	if (!file)
 139.353 +	{
 139.354 +		free (reply->guid);
 139.355 +		free (reply);
 139.356 +		return FALSE;
 139.357 +	}
 139.358 +
 139.359 +	/* just a sanity check */
 139.360 +	if (file && !(share = share_get_udata (file, GT->name)))
 139.361 +		return FALSE;
 139.362 +
 139.363 +	return FALSE;
 139.364 +}
 139.365 +
 139.366 +/* This emulates the old queue interface */
 139.367 +static BOOL send_result (FileShare *file, void **args)
 139.368 +{
 139.369 +	TCPC              *c     = args[0];
 139.370 +	gt_search_reply_t *reply = args[1];
 139.371 +
 139.372 +	while (query_request_result (c, file, reply))
 139.373 +		;
 139.374 +
 139.375 +	query_request_result_free (c, file, reply);
 139.376 +	return TRUE;
 139.377 +}
 139.378 +
 139.379 +static void send_results (TCPC *c, List *results, gt_search_reply_t *reply)
 139.380 +{
 139.381 +	void *args[2];
 139.382 +
 139.383 +	args[0] = c;
 139.384 +	args[1] = reply;
 139.385 +
 139.386 +	results = list_foreach_remove (results, (ListForeachFunc)send_result, args);
 139.387 +	assert (results == NULL);
 139.388 +
 139.389 +	query_request_result (c, NULL, reply);
 139.390 +	query_request_result_free (c, NULL, reply);
 139.391 +}
 139.392 +
 139.393 +static int flush_old (ds_data_t *key, ds_data_t *value, time_t *now)
 139.394 +{
 139.395 +	time_t *timestamp = value->data;
 139.396 +
 139.397 +	if (*now - *timestamp >= 10 * EMINUTES)
 139.398 +		return DS_CONTINUE | DS_REMOVE;
 139.399 +
 139.400 +	return DS_CONTINUE;
 139.401 +}
 139.402 +
 139.403 +static BOOL flush_qcache (Dataset *cache)
 139.404 +{
 139.405 +	time_t now = time (NULL);
 139.406 +
 139.407 +	assert (query_cache != NULL);
 139.408 +	dataset_foreach_ex (query_cache, DS_FOREACH_EX(flush_old), &now);
 139.409 +
 139.410 +	return TRUE;
 139.411 +}
 139.412 +
 139.413 +/* TODO: need to break up this file soon to isolate these things */
 139.414 +static BOOL query_cache_lookup (gt_guid_t *guid)
 139.415 +{
 139.416 +	time_t now;
 139.417 +
 139.418 +	if (dataset_lookup (query_cache, guid, GT_GUID_LEN))
 139.419 +		return TRUE;
 139.420 +
 139.421 +	/* limit the maximum length the query cache can grow */
 139.422 +	if (dataset_length (query_cache) >= 2000)
 139.423 +		return FALSE;
 139.424 +
 139.425 +	/* add the guid for catching duplicates next time */
 139.426 +	now = time (NULL);
 139.427 +	dataset_insert (&query_cache, guid, GT_GUID_LEN, &now, sizeof (now));
 139.428 +
 139.429 +	if (!flush_timer)
 139.430 +	{
 139.431 +		flush_timer = timer_add (5 * MINUTES, (TimerCallback)flush_qcache,
 139.432 +		                         NULL);
 139.433 +	}
 139.434 +
 139.435 +	return FALSE;
 139.436 +}
 139.437 +
 139.438 +GT_MSG_HANDLER(gt_msg_query)
 139.439 +{
 139.440 +	char              *query;
 139.441 +	char              *extended;
 139.442 +	gt_guid_t         *guid;
 139.443 +	gt_urn_t          *urn;
 139.444 +	List              *list;
 139.445 +	uint8_t            ttl;
 139.446 +	uint8_t            hops;
 139.447 +	unsigned char     *hash;
 139.448 +	gt_query_flags_t   flags;
 139.449 +	gt_search_type_t   type;
 139.450 +	gt_search_reply_t *reply;
 139.451 +
 139.452 +	flags     = gt_packet_get_uint16 (packet);
 139.453 +	query     = gt_packet_get_str    (packet);
 139.454 +	extended  = gt_packet_get_str    (packet);
 139.455 +
 139.456 +	guid = gt_packet_guid (packet);
 139.457 +
 139.458 +	/*
 139.459 +	 * TODO: node->share_state can be null here, if the node hasn't
 139.460 +	 * successfully handshaked yet.  Should fix this by storing messages until
 139.461 +	 * handshake is complete.
 139.462 +	 */
 139.463 +	if (node->share_state && node->share_state->hidden)
 139.464 +		return;
 139.465 +
 139.466 +	/* don't reply if the host is firewalled and we are too */
 139.467 +	if ((flags & QF_HAS_FLAGS) && (flags & QF_ONLY_NON_FW) &&
 139.468 +	    GT_SELF->firewalled)
 139.469 +	{
 139.470 +		return;
 139.471 +	}
 139.472 +
 139.473 +	/* don't reply if this is our own search -- TODO: substitute a
 139.474 +	 * full-fledged routing table */
 139.475 +	if (gt_search_find (guid))
 139.476 +	{
 139.477 +		if (MSG_DEBUG)
 139.478 +		{
 139.479 +			GT->dbg (GT, "not searching, own search (guid %s)",
 139.480 +			         gt_guid_str (guid));
 139.481 +		}
 139.482 +
 139.483 +		return;
 139.484 +	}
 139.485 +
 139.486 +	/* check if we've handled this search already */
 139.487 +	if (query_cache_lookup (guid))
 139.488 +	{
 139.489 +		if (MSG_DEBUG)
 139.490 +			GT->DBGSOCK (GT, c, "duplicate search (%s)", gt_guid_str (guid));
 139.491 +
 139.492 +		return;
 139.493 +	}
 139.494 +
 139.495 +	gt_parse_extended_data (extended, &urn, NULL);
 139.496 +
 139.497 +	/* WARNING: this assumes sha1 */
 139.498 +	hash = gt_urn_data (urn);
 139.499 +
 139.500 +	if (hash)
 139.501 +		type = GT_SEARCH_HASH;
 139.502 +	else
 139.503 +		type = GT_SEARCH_KEYWORD;
 139.504 +
 139.505 +#if 0
 139.506 +	GT->DBGFN (GT, "min_speed = %hu, query = '%s', extended data = '%s'",
 139.507 +	           min_speed, query, extended);
 139.508 +#endif
 139.509 +
 139.510 +	ttl  = gt_packet_ttl  (packet);
 139.511 +	hops = gt_packet_hops (packet);
 139.512 +
 139.513 +	list = gt_search_exec (query, type, urn, ttl, hops);
 139.514 +	free (urn);
 139.515 +
 139.516 +	if (!list)
 139.517 +		return;
 139.518 +
 139.519 +	if (!(reply = MALLOC (sizeof (gt_search_reply_t))))
 139.520 +	{
 139.521 +		list_free (list);
 139.522 +		return;
 139.523 +	}
 139.524 +
 139.525 +	/* set the ttl of the reply to be +1 the hops the request travelled */
 139.526 +	reply->ttl = gt_packet_hops (packet) + 1;
 139.527 +
 139.528 +	/* use the guid of the packet in replying to results */
 139.529 +	reply->guid = gt_guid_dup (guid);
 139.530 +
 139.531 +	send_results (c, list, reply);
 139.532 +}
   140.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   140.2 +++ b/src/message/query_reply.c	Sat Feb 20 21:18:28 2010 -0800
   140.3 @@ -0,0 +1,324 @@
   140.4 +/*
   140.5 + * $Id: query_reply.c,v 1.3 2004/03/24 06:35:10 hipnod Exp $
   140.6 + *
   140.7 + * Copyright (C) 2001-2003 giFT project (gift.sourceforge.net)
   140.8 + *
   140.9 + * This program is free software; you can redistribute it and/or modify it
  140.10 + * under the terms of the GNU General Public License as published by the
  140.11 + * Free Software Foundation; either version 2, or (at your option) any
  140.12 + * later version.
  140.13 + *
  140.14 + * This program is distributed in the hope that it will be useful, but
  140.15 + * WITHOUT ANY WARRANTY; without even the implied warranty of
  140.16 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
  140.17 + * General Public License for more details.
  140.18 + */
  140.19 +
  140.20 +#include "gt_gnutella.h"
  140.21 +#include "message/msg_handler.h"
  140.22 +
  140.23 +#include "sha1.h"
  140.24 +#include "xml.h"
  140.25 +
  140.26 +#include "gt_search.h"
  140.27 +
  140.28 +#include "gt_urn.h"
  140.29 +#include "gt_ban.h"
  140.30 +
  140.31 +#include "gt_share_file.h"
  140.32 +
  140.33 +#include <libgift/mime.h>
  140.34 +
  140.35 +/*****************************************************************************/
  140.36 +
  140.37 +/*
  140.38 + * Whether to attach the number of hops each result travelled as a metadata
  140.39 + * field "Hops". Interesting to see but probably not too useful for the
  140.40 + * average user, and so disabled by default.
  140.41 + */
  140.42 +#define HOPS_AS_META         gt_config_get_int("search/hops_as_meta=0")
  140.43 +
  140.44 +/*****************************************************************************/
  140.45 +
  140.46 +extern void gt_parse_extended_data (char *ext_block, gt_urn_t **r_urn,
  140.47 +                                    Dataset **r_meta); /* query.c */
  140.48 +
  140.49 +/*****************************************************************************/
  140.50 +
  140.51 +static void add_meta (ds_data_t *key, ds_data_t *value, FileShare *file)
  140.52 +{
  140.53 +	char *keystr   = key->data;
  140.54 +	char *valuestr = value->data;
  140.55 +
  140.56 +	share_set_meta (file, keystr, valuestr);
  140.57 +}
  140.58 +
  140.59 +/* parse XML data right before the client guid */
  140.60 +static void parse_xml_block (GtPacket *packet, size_t xml_bin_len,
  140.61 +                             Share **results, size_t hits)
  140.62 +{
  140.63 +	int      old_offset;
  140.64 +	char    *xml;
  140.65 +	uint8_t  savechr;
  140.66 +
  140.67 +	/* if the length is one there is only the null terminator */
  140.68 +	if (xml_bin_len < 1)
  140.69 +		return;
  140.70 +
  140.71 +	/*
  140.72 +	 * Look for the XML before the client guid. Subtract the length of the
  140.73 +	 * client guid and the size of the XML.
  140.74 +	 */
  140.75 +	old_offset = gt_packet_seek (packet, packet->len - 16 - xml_bin_len);
  140.76 +
  140.77 +	/* hopefully, if xml_bin_len is bogus this will fail */
  140.78 +	if (old_offset < 0)
  140.79 +		return;
  140.80 +
  140.81 +	xml = gt_packet_get_ustr (packet, xml_bin_len);
  140.82 +
  140.83 +	if (!xml)
  140.84 +		return;
  140.85 +
  140.86 +	/*
  140.87 +	 * Null terminate the packet even if the remote end didn't.  We know this
  140.88 +	 * is safe because the client GUID resides after the XML, and is 16 bytes
  140.89 +	 * long.
  140.90 +	 *
  140.91 +	 * Note that the null char should be at xml[xml_bin_len - 1], so we end up
  140.92 +	 * actually null-terminating twice if the XML is already terminated.
  140.93 +	 * gt_xml_parse_indexed must take this into account (and it does by
  140.94 +	 * largely ignoring xml_bin_len when the XML is plaintext).
  140.95 +	 */
  140.96 +	savechr = xml[xml_bin_len];
  140.97 +	xml[xml_bin_len] = 0;
  140.98 +
  140.99 +	if (XML_DEBUG)
 140.100 +		GT->dbg (GT, "xmldata=%s", xml);
 140.101 +
 140.102 +	/*
 140.103 +	 * The XML before the client guid that we are parsing has a special
 140.104 +	 * property "index" indicating which share the XML property corresponds
 140.105 +	 * to, and so needs to be handled differently from XML appearing in
 140.106 +	 * each individual hit.
 140.107 +	 */
 140.108 +	gt_xml_parse_indexed (xml, xml_bin_len, results, hits);
 140.109 +
 140.110 +	/* put the saved character back */
 140.111 +	xml[xml_bin_len] = savechr;
 140.112 +}
 140.113 +
 140.114 +/*
 140.115 + * Attach the travelled hops as a metadata field.
 140.116 + */
 140.117 +static void attach_hops (Share *share, int hops)
 140.118 +{
 140.119 +	char buf[12];
 140.120 +
 140.121 +	if (!HOPS_AS_META)
 140.122 +		return;
 140.123 +
 140.124 +	snprintf (buf, sizeof (buf) - 1, "%u", hops);
 140.125 +	share_set_meta (share, "Hops", buf);
 140.126 +}
 140.127 +
 140.128 +void gt_query_hits_parse (GtPacket *packet, GtSearch *search,
 140.129 +                          TCPC *c, gt_guid_t *client_guid)
 140.130 +{
 140.131 +	uint8_t      count;
 140.132 +	in_port_t    port;
 140.133 +	in_addr_t    host;
 140.134 +	uint32_t     speed;
 140.135 +	Share       *results[255];
 140.136 +	uint16_t     xml_len         = 0;
 140.137 +	int          i, availability = 1;
 140.138 +	BOOL         firewalled      = FALSE;
 140.139 +	int          total;
 140.140 +
 140.141 +	count = gt_packet_get_uint8  (packet);
 140.142 +	port  = gt_packet_get_port   (packet);
 140.143 +	host  = gt_packet_get_ip     (packet);
 140.144 +	speed = gt_packet_get_uint32 (packet);
 140.145 +
 140.146 +	/* check if this host is banned */
 140.147 +	if (gt_ban_ipv4_is_banned (host))
 140.148 +	{
 140.149 +		GT->dbg (GT, "discarding search results from %s [address banned]",
 140.150 +		         net_ip_str (host));
 140.151 +		return;
 140.152 +	}
 140.153 +
 140.154 +	for (i = 0; i < count; i++)
 140.155 +	{
 140.156 +		uint32_t       index;
 140.157 +		uint32_t       size;
 140.158 +		char          *fname, *data;
 140.159 +		gt_urn_t      *urn  = NULL;
 140.160 +		Dataset       *meta = NULL;
 140.161 +		Share         *file;
 140.162 +
 140.163 +		index = gt_packet_get_uint32 (packet);
 140.164 +		size  = gt_packet_get_uint32 (packet);
 140.165 +		fname = gt_packet_get_str    (packet);
 140.166 +		data  = gt_packet_get_str    (packet);
 140.167 +
 140.168 +		/* If there was an error parsing the packet (not enough results),
 140.169 +		 * stop parsing */
 140.170 +		if (gt_packet_error (packet))
 140.171 +			break;
 140.172 +
 140.173 +		if (!fname || string_isempty (fname))
 140.174 +		{
 140.175 +			results[i] = NULL;
 140.176 +			continue;
 140.177 +		}
 140.178 +
 140.179 +		gt_parse_extended_data (data, &urn, &meta);
 140.180 +
 140.181 +		/*
 140.182 +		 * WARNING: calling gt_urn_data here assumes sha1.
 140.183 +		 *
 140.184 +		 * TODO: this is a potential bug if gt_share_new() makes assumptions
 140.185 +		 * about the hash data's size and gt_urn_t changes to be multiple
 140.186 +		 * sizes later.
 140.187 +		 */
 140.188 +		if (!(file = gt_share_new (fname, index, size, gt_urn_data (urn))))
 140.189 +		{
 140.190 +			GIFT_ERROR (("error making fileshare, why?"));
 140.191 +
 140.192 +			dataset_clear (meta);
 140.193 +			free (urn);
 140.194 +
 140.195 +			/* make sure we find out about it if we're missing results ;) */
 140.196 +			assert (0);
 140.197 +
 140.198 +			results[i] = NULL;
 140.199 +			continue;
 140.200 +		}
 140.201 +
 140.202 +		/* HACK: set the mimetype from the file extension */
 140.203 +		share_set_mime (file, mime_type (fname));
 140.204 +
 140.205 +		dataset_foreach (meta, DS_FOREACH(add_meta), file);
 140.206 +
 140.207 +		/* Attach the hops the search travelled as a metadata field */
 140.208 +		attach_hops (file, gt_packet_hops (packet));
 140.209 +
 140.210 +		dataset_clear (meta);
 140.211 +		free (urn);
 140.212 +
 140.213 +		results[i] = file;
 140.214 +	}
 140.215 +
 140.216 +	total = i;
 140.217 +
 140.218 +	/* look for the query hit descriptor */
 140.219 +	if (!gt_packet_error (packet) &&
 140.220 +	    packet->len - packet->offset >= 16 + 7 /* min qhd len */)
 140.221 +	{
 140.222 +		unsigned char *vendor;
 140.223 +		uint8_t        eqhd_len;
 140.224 +		uint8_t        eqhd[2];
 140.225 +
 140.226 +		vendor   = gt_packet_get_ustr  (packet, 4);
 140.227 +		eqhd_len = gt_packet_get_uint8 (packet);
 140.228 +		eqhd[0]  = gt_packet_get_uint8 (packet);
 140.229 +		eqhd[1]  = gt_packet_get_uint8 (packet);
 140.230 +
 140.231 +		/* set availability to 0 or 1 depending on the busy flag */
 140.232 +		availability = ((eqhd[0] & EQHD1_HAS_BUSY) &&
 140.233 +		                !(eqhd[1] & EQHD2_BUSY_FLAG)) ? 1 : 0;
 140.234 +
 140.235 +		/* set firewalled status based on the PUSH flag */
 140.236 +		firewalled   = BOOL_EXPR ((eqhd[0] & EQHD1_PUSH_FLAG) &&
 140.237 +		                          (eqhd[1] & EQHD2_HAS_PUSH));
 140.238 +
 140.239 +		/*
 140.240 +		 * Check for an XML metadata block, that is usually present
 140.241 +		 * when the size of the "public area" is 4
 140.242 +		 */
 140.243 +		if (eqhd_len >= 4)
 140.244 +			xml_len = gt_packet_get_uint16 (packet);
 140.245 +
 140.246 +		if (xml_len > 0)
 140.247 +		{
 140.248 +			if (XML_DEBUG)
 140.249 +			{
 140.250 +				char str[5] = { 0 };
 140.251 +
 140.252 +				if (vendor)
 140.253 +					memcpy (str, vendor, 4);
 140.254 +
 140.255 +				GT->dbg (GT, "(%s) xml_len=%d", str, xml_len);
 140.256 +			}
 140.257 +
 140.258 +			parse_xml_block (packet, xml_len, results, total);
 140.259 +		}
 140.260 +
 140.261 +#if 0
 140.262 +		if (MSG_DEBUG)
 140.263 +		{
 140.264 +			GT->DBGFN (GT, "vendor = %s, qhd_len = %u, qhd_0 = %x, qhd_1 = %x,"
 140.265 +			           " availability = %i, firewalled = %i",
 140.266 +			           make_str (vendor, 4), qhd_len, qhd[0], qhd[1],
 140.267 +			           availability, firewalled);
 140.268 +		}
 140.269 +#endif
 140.270 +	}
 140.271 +
 140.272 +	/* send the results to the interface protocol */
 140.273 +	for (i = 0; i < total; i++)
 140.274 +	{
 140.275 +		if (results[i])
 140.276 +		{
 140.277 +			gt_search_reply (search, c, host, port, client_guid, availability,
 140.278 +			                 firewalled, results[i]);
 140.279 +
 140.280 +			gt_share_unref (results[i]);
 140.281 +		}
 140.282 +	}
 140.283 +}
 140.284 +
 140.285 +/* should split this up into two routines */
 140.286 +GT_MSG_HANDLER(gt_msg_query_reply)
 140.287 +{
 140.288 +	GtSearch   *search;
 140.289 +	int         save_offset;
 140.290 +	gt_guid_t  *client_guid;
 140.291 +
 140.292 +	/* Each client has a unique identifier at the end of the
 140.293 +	 * packet.  Grab that first. */
 140.294 +	if (packet->len < 16)
 140.295 +	{
 140.296 +		if (MSG_DEBUG)
 140.297 +			GT->DBGSOCK (GT, c, "illegal query response packet, < 16 bytes");
 140.298 +
 140.299 +		return;
 140.300 +	}
 140.301 +
 140.302 +	/* hack the offset in the packet */
 140.303 +	save_offset = packet->offset;
 140.304 +	packet->offset = packet->len - 16;
 140.305 +
 140.306 +	client_guid = gt_packet_get_ustr (packet, 16);
 140.307 +
 140.308 +	/* put the offset back */
 140.309 +	packet->offset = save_offset;
 140.310 +
 140.311 +	if (!(search = gt_search_find (gt_packet_guid (packet)))
 140.312 +		/*&& query_cache_lookup (packet->guid)*/)
 140.313 +	{
 140.314 +		/* TODO: support forwarding of query responses by
 140.315 +		 * looking up their destinations in the guid cache */
 140.316 +
 140.317 +		/*gt_route_forward_packet (packet, c);*/
 140.318 +
 140.319 +		/* add the client GUID to the push cache: in case of a
 140.320 +		 * push request we know where to send it */
 140.321 +		/*push_cache_add (client_guid, c);*/
 140.322 +
 140.323 +		return;
 140.324 +	}
 140.325 +
 140.326 +	gt_query_hits_parse (packet, search, c, client_guid);
 140.327 +}
   141.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   141.2 +++ b/src/message/query_route.c	Sat Feb 20 21:18:28 2010 -0800
   141.3 @@ -0,0 +1,82 @@
   141.4 +/*
   141.5 + * $Id: query_route.c,v 1.1 2004/01/04 03:57:53 hipnod Exp $
   141.6 + *
   141.7 + * Copyright (C) 2001-2003 giFT project (gift.sourceforge.net)
   141.8 + *
   141.9 + * This program is free software; you can redistribute it and/or modify it
  141.10 + * under the terms of the GNU General Public License as published by the
  141.11 + * Free Software Foundation; either version 2, or (at your option) any
  141.12 + * later version.
  141.13 + *
  141.14 + * This program is distributed in the hope that it will be useful, but
  141.15 + * WITHOUT ANY WARRANTY; without even the implied warranty of
  141.16 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
  141.17 + * General Public License for more details.
  141.18 + */
  141.19 +
  141.20 +#include "gt_gnutella.h"
  141.21 +#include "msg_handler.h"
  141.22 +
  141.23 +#include "gt_query_route.h"
  141.24 +
  141.25 +/*****************************************************************************/
  141.26 +
  141.27 +/* create a table for routing queries from a child node
  141.28 + * disabled for now because ultrapeer mode doesnt work yet */
  141.29 +GT_MSG_HANDLER(gt_msg_query_route)
  141.30 +{
  141.31 +#if 0
  141.32 +	uint8_t   type;
  141.33 +	uint32_t len;
  141.34 +	uint8_t   largest_val;
  141.35 +	uint8_t   seq_no;
  141.36 +	uint8_t   seq_size;
  141.37 +	uint8_t   compressed;
  141.38 +	uint8_t   bits;
  141.39 +	size_t    size;
  141.40 +
  141.41 +	GT->DBGFN (GT, "entered");
  141.42 +
  141.43 +	type = gt_packet_get_uint8 (packet);
  141.44 +
  141.45 +	/* TODO: rate-limit clients calling query_route; timeouts */
  141.46 +
  141.47 +	switch (type)
  141.48 +	{
  141.49 +	 case 0: /* reset table */
  141.50 +		len         = gt_packet_get_uint32 (packet);
  141.51 +		largest_val	= gt_packet_get_uint8  (packet);
  141.52 +
  141.53 +		if (GT_NODE(c)->query_router)
  141.54 +			query_router_free (GT_NODE(c)->query_router);
  141.55 +
  141.56 +		GT_NODE(c)->query_router = query_router_new (len, largest_val);
  141.57 +
  141.58 +		GT->DBGFN (GT, "reset table: len = %u, largest val = %u",
  141.59 +		           len, largest_val);
  141.60 +		break;
  141.61 +
  141.62 +	 case 1: /* patch table */
  141.63 +		seq_no     = gt_packet_get_uint8 (packet);
  141.64 +		seq_size   = gt_packet_get_uint8 (packet);
  141.65 +		compressed = gt_packet_get_uint8 (packet);
  141.66 +		bits       = gt_packet_get_uint8 (packet);
  141.67 +
  141.68 +		GT->DBGFN (GT, "patch table: seq_no=%i seq_size=%i compressed=%i bits=%i",
  141.69 +		           seq_no, seq_size, compressed, bits);
  141.70 +
  141.71 +		/* size of the patch is the packet length minus len of patch header */
  141.72 +		size = gt_packet_payload_len (packet) - 5;
  141.73 +
  141.74 +		GT->DBGFN (GT, "size = %u, packet->offset = %u", size, packet->offset);
  141.75 +		query_router_update (GT_NODE(c)->query_router, seq_no, seq_size,
  141.76 +		                     compressed, bits, &packet->data[packet->offset],
  141.77 +		                     size);
  141.78 +		break;
  141.79 +
  141.80 +	 default:
  141.81 +		GT->DBGFN (GT, "unknown query-route message type: %d", type);
  141.82 +		break;
  141.83 +	}
  141.84 +#endif
  141.85 +}
   142.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   142.2 +++ b/src/message/vendor.c	Sat Feb 20 21:18:28 2010 -0800
   142.3 @@ -0,0 +1,283 @@
   142.4 +/*
   142.5 + * $Id: vendor.c,v 1.6 2004/03/26 11:44:13 hipnod Exp $
   142.6 + *
   142.7 + * Copyright (C) 2001-2003 giFT project (gift.sourceforge.net)
   142.8 + *
   142.9 + * This program is free software; you can redistribute it and/or modify it
  142.10 + * under the terms of the GNU General Public License as published by the
  142.11 + * Free Software Foundation; either version 2, or (at your option) any
  142.12 + * later version.
  142.13 + *
  142.14 + * This program is distributed in the hope that it will be useful, but
  142.15 + * WITHOUT ANY WARRANTY; without even the implied warranty of
  142.16 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
  142.17 + * General Public License for more details.
  142.18 + */
  142.19 +
  142.20 +#include "gt_gnutella.h"
  142.21 +#include "message/msg_handler.h"
  142.22 +
  142.23 +#include "gt_connect.h"         /* gt_connect_test */
  142.24 +#include "gt_bind.h"
  142.25 +
  142.26 +#include "gt_utils.h"           /* make_str */
  142.27 +
  142.28 +#include "transfer/push_proxy.h"
  142.29 +
  142.30 +/*****************************************************************************/
  142.31 +
  142.32 +#define EMPTY_VENDOR { 0, 0, 0, 0 }
  142.33 +
  142.34 +#define vmsg_name(name) \
  142.35 +	name##_struct
  142.36 +
  142.37 +#define declare_vmsg(name,vendor,id) \
  142.38 +	const struct gt_vendor_msg vmsg_name(name) = { vendor, id }; \
  142.39 +	const struct gt_vendor_msg *name = &name##_struct;
  142.40 +
  142.41 +/* Globally visible vendor message structs */
  142.42 +declare_vmsg(GT_VMSG_MESSAGES_SUPP,    EMPTY_VENDOR, 0);
  142.43 +declare_vmsg(GT_VMSG_HOPS_FLOW,        "BEAR",       4);
  142.44 +declare_vmsg(GT_VMSG_TCP_CONNECT_BACK, "BEAR",       7);
  142.45 +declare_vmsg(GT_VMSG_PUSH_PROXY_REQ,   "LIME",      21);
  142.46 +declare_vmsg(GT_VMSG_PUSH_PROXY_ACK,   "LIME",      22);
  142.47 +
  142.48 +/*****************************************************************************/
  142.49 +
  142.50 +static GT_MSG_HANDLER(gt_msg_messages_supported);
  142.51 +static GT_MSG_HANDLER(gt_msg_hops_flow);
  142.52 +static GT_MSG_HANDLER(gt_msg_tcp_connect_back);
  142.53 +static GT_MSG_HANDLER(gt_msg_push_proxy_request);
  142.54 +static GT_MSG_HANDLER(gt_msg_push_proxy_acknowledgement);
  142.55 +
  142.56 +/*****************************************************************************/
  142.57 +
  142.58 +struct gt_vendor_table
  142.59 +{
  142.60 +	const struct gt_vendor_msg  *msg;
  142.61 +	GtMessageHandler             func;
  142.62 +	uint16_t                     version;
  142.63 +	BOOL                         in_msgs_supported; /* inside MessagesSupported */
  142.64 +};
  142.65 +
  142.66 +static struct gt_vendor_table vendor_table[] =
  142.67 +{
  142.68 +	{ &vmsg_name(GT_VMSG_MESSAGES_SUPP),    gt_msg_messages_supported,
  142.69 +	  1,                                    FALSE },
  142.70 +	{ &vmsg_name(GT_VMSG_HOPS_FLOW),        gt_msg_hops_flow,
  142.71 +	  1,                                    FALSE  /*TODO: support receving*/ },
  142.72 +	{ &vmsg_name(GT_VMSG_TCP_CONNECT_BACK), gt_msg_tcp_connect_back,
  142.73 +	  1,                                    TRUE  },
  142.74 +	{ &vmsg_name(GT_VMSG_PUSH_PROXY_REQ),   gt_msg_push_proxy_request,
  142.75 +	  2,                                    TRUE  },
  142.76 +	{ &vmsg_name(GT_VMSG_PUSH_PROXY_ACK),   gt_msg_push_proxy_acknowledgement,
  142.77 +	  2,                                    FALSE },
  142.78 +};
  142.79 +
  142.80 +static const size_t nr_vmsgs = sizeof(vendor_table) / sizeof(vendor_table[0]);
  142.81 +
  142.82 +/*****************************************************************************/
  142.83 +
  142.84 +static void vmsg_init (struct gt_vendor_msg *msg,
  142.85 +                       unsigned char *vendor_id, uint16_t id)
  142.86 +{
  142.87 +	/* initialize to zero because of potential structure alignment issues */
  142.88 +	memset (msg, 0, sizeof(struct gt_vendor_msg));
  142.89 +
  142.90 +	memcpy (&msg->vendor_id, vendor_id, 4);
  142.91 +	msg->id = id;
  142.92 +}
  142.93 +
  142.94 +static void append_vmsg (GtPacket *pkt, const struct gt_vendor_msg *msg,
  142.95 +                         uint16_t ver)
  142.96 +{
  142.97 +	gt_packet_put_ustr   (pkt, msg->vendor_id, 4);
  142.98 +	gt_packet_put_uint16 (pkt, msg->id);
  142.99 +	gt_packet_put_uint16 (pkt, ver);
 142.100 +}
 142.101 +
 142.102 +void gt_vmsg_send_supported (GtNode *node)
 142.103 +{
 142.104 +	GtPacket *pkt;
 142.105 +	int       i;
 142.106 +	uint16_t  vector_len = 0;
 142.107 +
 142.108 +	if (!dataset_lookupstr (node->hdr, "vendor-message"))
 142.109 +		return;
 142.110 +
 142.111 +	if (!(pkt = gt_packet_vendor (GT_VMSG_MESSAGES_SUPP)))
 142.112 +		return;
 142.113 +
 142.114 +	gt_packet_put_uint16 (pkt, 0);
 142.115 +
 142.116 +	for (i = 0; i < nr_vmsgs; i++)
 142.117 +	{
 142.118 +		if (vendor_table[i].in_msgs_supported)
 142.119 +		{
 142.120 +			vector_len++;
 142.121 +			append_vmsg (pkt, vendor_table[i].msg, vendor_table[i].version);
 142.122 +		}
 142.123 +	}
 142.124 +
 142.125 +	/* XXX: packet put_xxx functions don't work with gt_packet_seek :( */
 142.126 +	vector_len = htovl (vector_len);
 142.127 +	memcpy (&pkt->data[GNUTELLA_HDR_LEN + VMSG_HDR_LEN], &vector_len, 2);
 142.128 +
 142.129 +	if (gt_packet_error (pkt))
 142.130 +	{
 142.131 +		gt_packet_free (pkt);
 142.132 +		return;
 142.133 +	}
 142.134 +
 142.135 +	GT->DBGSOCK (GT, GT_CONN(node), "sending MessagesSupported");
 142.136 +
 142.137 +	gt_packet_send (GT_CONN(node), pkt);
 142.138 +	gt_packet_free (pkt);
 142.139 +}
 142.140 +
 142.141 +/*****************************************************************************/
 142.142 +
 142.143 +GT_MSG_HANDLER(gt_msg_vendor)
 142.144 +{
 142.145 +	struct gt_vendor_msg vmsg;
 142.146 +	unsigned char       *vendor;
 142.147 +	int                  i;
 142.148 +	uint16_t             id;
 142.149 +	uint16_t             version;
 142.150 +
 142.151 +	if (gt_packet_hops (packet) != 0 && gt_packet_ttl (packet) != 1)
 142.152 +		return;
 142.153 +
 142.154 +	vendor  = gt_packet_get_ustr   (packet, 4);
 142.155 +	id      = gt_packet_get_uint16 (packet);
 142.156 +	version = gt_packet_get_uint16 (packet);
 142.157 +
 142.158 +	/* initialize a copy for making a single call to memcmp */
 142.159 +	vmsg_init (&vmsg, vendor, id);
 142.160 +
 142.161 +	if (gt_packet_error (packet))
 142.162 +	{
 142.163 +		if (MSG_DEBUG)
 142.164 +			GT->DBGSOCK (GT, c, "Error parsing vendor message");
 142.165 +
 142.166 +		return;
 142.167 +	}
 142.168 +
 142.169 +	for (i = 0; i < nr_vmsgs; i++)
 142.170 +	{
 142.171 +		if (memcmp (vendor_table[i].msg, &vmsg, sizeof(vmsg)) == 0 &&
 142.172 +		    version <= vendor_table[i].version)
 142.173 +		{
 142.174 +			vendor_table[i].func (MSG_HANDLER_ARG_NAMES);
 142.175 +			return;
 142.176 +		}
 142.177 +	}
 142.178 +
 142.179 +	if (MSG_DEBUG)
 142.180 +	{
 142.181 +		GT->DBGSOCK (GT, c, "No handler for vendor message %s/%dv%d",
 142.182 +		             make_str (vendor, 4), id, version);
 142.183 +	}
 142.184 +}
 142.185 +
 142.186 +/*****************************************************************************/
 142.187 +
 142.188 +static struct gt_vendor_table *find_in_vmsg_table (gt_vendor_msg_t *vmsg)
 142.189 +{
 142.190 +	int i;
 142.191 +
 142.192 +	for (i = 0; i < nr_vmsgs; i++)
 142.193 +	{
 142.194 +		if (memcmp (vendor_table[i].msg, vmsg, sizeof(*vmsg)) == 0)
 142.195 +			return &vendor_table[i];
 142.196 +	}
 142.197 +
 142.198 +	return NULL;
 142.199 +}
 142.200 +
 142.201 +static GT_MSG_HANDLER(gt_msg_messages_supported)
 142.202 +{
 142.203 +	gt_vendor_msg_t vmsg;
 142.204 +	unsigned char  *vendor_id;
 142.205 +	int             i;
 142.206 +	uint16_t        id;
 142.207 +	uint16_t        version;
 142.208 +	uint16_t        vector_len;
 142.209 +
 142.210 +	vector_len = gt_packet_get_uint16 (packet);
 142.211 +
 142.212 +	if (gt_packet_error (packet))
 142.213 +		return;
 142.214 +
 142.215 +	/*
 142.216 +	 * Track the supported messages in a dataset on this node.
 142.217 +	 */
 142.218 +	for (i = 0; i < vector_len; i++)
 142.219 +	{
 142.220 +		struct gt_vendor_table *entry;
 142.221 +
 142.222 +		vendor_id  = gt_packet_get_ustr   (packet, 4);
 142.223 +		id         = gt_packet_get_uint16 (packet);
 142.224 +		version    = gt_packet_get_uint16 (packet);
 142.225 +
 142.226 +		if (gt_packet_error (packet))
 142.227 +			break;
 142.228 +
 142.229 +		vmsg_init (&vmsg, vendor_id, id);
 142.230 +
 142.231 +		if (!(entry = find_in_vmsg_table (&vmsg)))
 142.232 +		    continue;
 142.233 +
 142.234 +		/* only send the minimum supported by both ends to this node */
 142.235 +		version = MIN (version, entry->version);
 142.236 +
 142.237 +		/* track support for this vendor message */
 142.238 +		dataset_insert (&node->vmsgs_supported, &vmsg, sizeof(vmsg),
 142.239 +		                &version, sizeof(version));
 142.240 +	}
 142.241 +
 142.242 +	/* send our batch of vendor messages now */
 142.243 +	gt_bind_completed_connection (node);
 142.244 +}
 142.245 +
 142.246 +/*****************************************************************************/
 142.247 +
 142.248 +static GT_MSG_HANDLER(gt_msg_hops_flow)
 142.249 +{
 142.250 +}
 142.251 +
 142.252 +/*****************************************************************************/
 142.253 +
 142.254 +static GT_MSG_HANDLER(gt_msg_tcp_connect_back)
 142.255 +{
 142.256 +	in_port_t port;
 142.257 +
 142.258 +	port = gt_packet_get_port (packet);
 142.259 +
 142.260 +	if (!port)
 142.261 +		return;
 142.262 +
 142.263 +	gt_connect_test (node, port);
 142.264 +}
 142.265 +
 142.266 +/*****************************************************************************/
 142.267 +
 142.268 +static GT_MSG_HANDLER(gt_msg_push_proxy_request)
 142.269 +{
 142.270 +	return;
 142.271 +}
 142.272 +
 142.273 +static GT_MSG_HANDLER(gt_msg_push_proxy_acknowledgement)
 142.274 +{
 142.275 +	in_addr_t ip;
 142.276 +	in_port_t port;
 142.277 +
 142.278 +	ip   = gt_packet_get_ip   (packet);
 142.279 +	port = gt_packet_get_port (packet);
 142.280 +
 142.281 +	if (gt_packet_error (packet))
 142.282 +		return;
 142.283 +
 142.284 +	gt_push_proxy_del (node);
 142.285 +	gt_push_proxy_add (node, ip, port);
 142.286 +}
   143.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   143.2 +++ b/src/sha1.c	Sat Feb 20 21:18:28 2010 -0800
   143.3 @@ -0,0 +1,490 @@
   143.4 +/*
   143.5 + * $Id: sha1.c,v 1.18 2006/07/09 13:05:20 mkern Exp $
   143.6 + *
   143.7 + * (PD) 2001 The Bitzi Corporation
   143.8 + * Please see http://bitzi.com/publicdomain for more info.
   143.9 + *
  143.10 + * NIST Secure Hash Algorithm
  143.11 + * heavily modified by Uwe Hollerbach <uh@alumni.caltech edu>
  143.12 + * from Peter C. Gutmann's implementation as found in
  143.13 + * Applied Cryptography by Bruce Schneier
  143.14 + * Further modifications to include the "UNRAVEL" stuff, below
  143.15 + *
  143.16 + * New, faster sha1 code. The original code was from Bitzi corporation, and
  143.17 + * was in the public domain. [The original header is included.]
  143.18 + *
  143.19 + * This code is in the public domain.
  143.20 + */
  143.21 +
  143.22 +#include <string.h>
  143.23 +#include <stdio.h>
  143.24 +
  143.25 +#include "gt_gnutella.h"
  143.26 +
  143.27 +#include "sha1.h"
  143.28 +#include "encoding/base32.h"
  143.29 +
  143.30 +/*****************************************************************************/
  143.31 +
  143.32 +typedef struct sha1_state SHA_INFO;
  143.33 +
  143.34 +/* define the functions to names private to this plugin */
  143.35 +#define sha_init   gt_sha1_init
  143.36 +#define sha_update gt_sha1_append
  143.37 +#define sha_final  gt_sha1_finish
  143.38 +
  143.39 +/*****************************************************************************/
  143.40 +
  143.41 +void sha_init(SHA_INFO *);
  143.42 +void sha_update(SHA_INFO *, const void *, size_t);
  143.43 +void sha_final(SHA_INFO *, unsigned char [20]);
  143.44 +
  143.45 +/*****************************************************************************/
  143.46 +
  143.47 +/* SHA f()-functions */
  143.48 +
  143.49 +#define f1(x,y,z)		((x & y) | (~x & z))
  143.50 +#define f2(x,y,z)		(x ^ y ^ z)
  143.51 +#define f3(x,y,z)		((x & y) | (x & z) | (y & z))
  143.52 +#define f4(x,y,z)		(x ^ y ^ z)
  143.53 +
  143.54 +/* SHA constants */
  143.55 +
  143.56 +#define CONST1			0x5a827999L
  143.57 +#define CONST2			0x6ed9eba1L
  143.58 +#define CONST3			0x8f1bbcdcL
  143.59 +#define CONST4			0xca62c1d6L
  143.60 +
  143.61 +/* truncate to 32 bits -- should be a null op on 32-bit machines */
  143.62 +
  143.63 +#define T32(x)	((x) & 0xffffffffL)
  143.64 +
  143.65 +/* 32-bit rotate */
  143.66 +
  143.67 +#define R32(x,n)		T32(((x << n) | (x >> (32 - n))))
  143.68 +
  143.69 +/* the generic case, for when the overall rotation is not unraveled */
  143.70 +
  143.71 +#define FG(n)	\
  143.72 +	T = T32(R32(A,5) + f##n(B,C,D) + E + *WP++ + CONST##n);		\
  143.73 +	E = D; D = C; C = R32(B,30); B = A; A = T
  143.74 +
  143.75 +/* specific cases, for when the overall rotation is unraveled */
  143.76 +
  143.77 +#define FA(n)	\
  143.78 +	T = T32(R32(A,5) + f##n(B,C,D) + E + *WP++ + CONST##n); B = R32(B,30)
  143.79 +
  143.80 +#define FB(n)	\
  143.81 +	E = T32(R32(T,5) + f##n(A,B,C) + D + *WP++ + CONST##n); A = R32(A,30)
  143.82 +
  143.83 +#define FC(n)	\
  143.84 +	D = T32(R32(E,5) + f##n(T,A,B) + C + *WP++ + CONST##n); T = R32(T,30)
  143.85 +
  143.86 +#define FD(n)	\
  143.87 +	C = T32(R32(D,5) + f##n(E,T,A) + B + *WP++ + CONST##n); E = R32(E,30)
  143.88 +
  143.89 +#define FE(n)	\
  143.90 +	B = T32(R32(C,5) + f##n(D,E,T) + A + *WP++ + CONST##n); D = R32(D,30)
  143.91 +
  143.92 +#define FT(n)	\
  143.93 +	A = T32(R32(B,5) + f##n(C,D,E) + T + *WP++ + CONST##n); C = R32(C,30)
  143.94 +
  143.95 +/*****************************************************************************/
  143.96 +
  143.97 +#ifndef WIN32
  143.98 +
  143.99 +/* sigh */
 143.100 +#ifdef WORDS_BIGENDIAN
 143.101 +#  if SIZEOF_LONG == 4
 143.102 +#    define SHA_BYTE_ORDER  4321
 143.103 +#  elif SIZEOF_LONG == 8
 143.104 +#    define SHA_BYTE_ORDER  87654321
 143.105 +#  endif
 143.106 +#else
 143.107 +#  if SIZEOF_LONG == 4
 143.108 +#    define SHA_BYTE_ORDER  1234
 143.109 +#  elif SIZEOF_LONG == 8
 143.110 +#    define SHA_BYTE_ORDER  12345678
 143.111 +#  endif
 143.112 +#endif
 143.113 +
 143.114 +#else /* WIN32 */
 143.115 +
 143.116 +#define SHA_BYTE_ORDER 1234
 143.117 +
 143.118 +#endif /* !WIN32 */
 143.119 +
 143.120 +
 143.121 +/* do SHA transformation */
 143.122 +static void sha_transform(SHA_INFO *sha_info)
 143.123 +{
 143.124 +	int i;
 143.125 +	uint8_t *dp;
 143.126 +	unsigned long T, A, B, C, D, E, W[80], *WP;
 143.127 +
 143.128 +	dp = sha_info->data;
 143.129 +
 143.130 +/*
 143.131 +the following makes sure that at least one code block below is
 143.132 +traversed or an error is reported, without the necessity for nested
 143.133 +preprocessor if/else/endif blocks, which are a great pain in the
 143.134 +nether regions of the anatomy...
 143.135 +*/
 143.136 +#undef SWAP_DONE
 143.137 +
 143.138 +#if (SHA_BYTE_ORDER == 1234)
 143.139 +#define SWAP_DONE
 143.140 +	for (i = 0; i < 16; ++i) {
 143.141 +		T = *((unsigned long *) dp);
 143.142 +		dp += 4;
 143.143 +		W[i] =	((T << 24) & 0xff000000) | ((T <<  8) & 0x00ff0000) |
 143.144 +				((T >>	8) & 0x0000ff00) | ((T >> 24) & 0x000000ff);
 143.145 +	}
 143.146 +#endif /* SHA_BYTE_ORDER == 1234 */
 143.147 +
 143.148 +#if (SHA_BYTE_ORDER == 4321)
 143.149 +#define SWAP_DONE
 143.150 +	for (i = 0; i < 16; ++i) {
 143.151 +		T = *((unsigned long *) dp);
 143.152 +		dp += 4;
 143.153 +		W[i] = T32(T);
 143.154 +	}
 143.155 +#endif /* SHA_BYTE_ORDER == 4321 */
 143.156 +
 143.157 +#if (SHA_BYTE_ORDER == 12345678)
 143.158 +#define SWAP_DONE
 143.159 +	for (i = 0; i < 16; i += 2) {
 143.160 +		T = *((unsigned long *) dp);
 143.161 +		dp += 8;
 143.162 +		W[i] =	((T << 24) & 0xff000000) | ((T <<  8) & 0x00ff0000) |
 143.163 +				((T >>	8) & 0x0000ff00) | ((T >> 24) & 0x000000ff);
 143.164 +		T >>= 32;
 143.165 +		W[i+1] = ((T << 24) & 0xff000000) | ((T <<	8) & 0x00ff0000) |
 143.166 +				 ((T >>  8) & 0x0000ff00) | ((T >> 24) & 0x000000ff);
 143.167 +	}
 143.168 +#endif /* SHA_BYTE_ORDER == 12345678 */
 143.169 +
 143.170 +#if (SHA_BYTE_ORDER == 87654321)
 143.171 +#define SWAP_DONE
 143.172 +	for (i = 0; i < 16; i += 2) {
 143.173 +		T = *((unsigned long *) dp);
 143.174 +		dp += 8;
 143.175 +		W[i] = T32(T >> 32);
 143.176 +		W[i+1] = T32(T);
 143.177 +	}
 143.178 +#endif /* SHA_BYTE_ORDER == 87654321 */
 143.179 +
 143.180 +#ifndef SWAP_DONE
 143.181 +#error Unknown byte order -- you need to add code here
 143.182 +#endif /* SWAP_DONE */
 143.183 +
 143.184 +	for (i = 16; i < 80; ++i) {
 143.185 +		W[i] = W[i-3] ^ W[i-8] ^ W[i-14] ^ W[i-16];
 143.186 +		W[i] = R32(W[i], 1);
 143.187 +	}
 143.188 +
 143.189 +	A = sha_info->digest[0];
 143.190 +	B = sha_info->digest[1];
 143.191 +	C = sha_info->digest[2];
 143.192 +	D = sha_info->digest[3];
 143.193 +	E = sha_info->digest[4];
 143.194 +	WP = W;
 143.195 +
 143.196 +	FA(1); FB(1); FC(1); FD(1); FE(1); FT(1); FA(1); FB(1); FC(1); FD(1);
 143.197 +	FE(1); FT(1); FA(1); FB(1); FC(1); FD(1); FE(1); FT(1); FA(1); FB(1);
 143.198 +	FC(2); FD(2); FE(2); FT(2); FA(2); FB(2); FC(2); FD(2); FE(2); FT(2);
 143.199 +	FA(2); FB(2); FC(2); FD(2); FE(2); FT(2); FA(2); FB(2); FC(2); FD(2);
 143.200 +	FE(3); FT(3); FA(3); FB(3); FC(3); FD(3); FE(3); FT(3); FA(3); FB(3);
 143.201 +	FC(3); FD(3); FE(3); FT(3); FA(3); FB(3); FC(3); FD(3); FE(3); FT(3);
 143.202 +	FA(4); FB(4); FC(4); FD(4); FE(4); FT(4); FA(4); FB(4); FC(4); FD(4);
 143.203 +	FE(4); FT(4); FA(4); FB(4); FC(4); FD(4); FE(4); FT(4); FA(4); FB(4);
 143.204 +
 143.205 +	sha_info->digest[0] = T32(sha_info->digest[0] + E);
 143.206 +	sha_info->digest[1] = T32(sha_info->digest[1] + T);
 143.207 +	sha_info->digest[2] = T32(sha_info->digest[2] + A);
 143.208 +	sha_info->digest[3] = T32(sha_info->digest[3] + B);
 143.209 +	sha_info->digest[4] = T32(sha_info->digest[4] + C);
 143.210 +}
 143.211 +
 143.212 +/* initialize the SHA digest */
 143.213 +void sha_init(SHA_INFO *sha_info)
 143.214 +{
 143.215 +	sha_info->digest[0] = 0x67452301L;
 143.216 +	sha_info->digest[1] = 0xefcdab89L;
 143.217 +	sha_info->digest[2] = 0x98badcfeL;
 143.218 +	sha_info->digest[3] = 0x10325476L;
 143.219 +	sha_info->digest[4] = 0xc3d2e1f0L;
 143.220 +	sha_info->count_lo = 0L;
 143.221 +	sha_info->count_hi = 0L;
 143.222 +	sha_info->local = 0;
 143.223 +}
 143.224 +
 143.225 +/* update the SHA digest */
 143.226 +void sha_update(SHA_INFO *sha_info, const void *data, size_t count)
 143.227 +{
 143.228 +	int i;
 143.229 +	unsigned long clo;
 143.230 +	const uint8_t *buffer = data;
 143.231 +
 143.232 +	clo = T32(sha_info->count_lo + ((unsigned long) count << 3));
 143.233 +	if (clo < sha_info->count_lo) {
 143.234 +		++sha_info->count_hi;
 143.235 +	}
 143.236 +	sha_info->count_lo = clo;
 143.237 +	sha_info->count_hi += (unsigned long) count >> 29;
 143.238 +	if (sha_info->local) {
 143.239 +		i = SHA_BLOCKSIZE - sha_info->local;
 143.240 +		if (i > count) {
 143.241 +			i = count;
 143.242 +		}
 143.243 +		memcpy(sha_info->data + sha_info->local, buffer, i);
 143.244 +		count -= i;
 143.245 +		buffer += i;
 143.246 +		sha_info->local += i;
 143.247 +		if (sha_info->local == SHA_BLOCKSIZE) {
 143.248 +			sha_transform(sha_info);
 143.249 +		} else {
 143.250 +			return;
 143.251 +		}
 143.252 +	}
 143.253 +	while (count >= SHA_BLOCKSIZE) {
 143.254 +		memcpy(sha_info->data, buffer, SHA_BLOCKSIZE);
 143.255 +		buffer += SHA_BLOCKSIZE;
 143.256 +		count -= SHA_BLOCKSIZE;
 143.257 +		sha_transform(sha_info);
 143.258 +	}
 143.259 +	memcpy(sha_info->data, buffer, count);
 143.260 +	sha_info->local = count;
 143.261 +}
 143.262 +
 143.263 +/* finish computing the SHA digest */
 143.264 +void sha_final(SHA_INFO *sha_info, unsigned char *digest)
 143.265 +{
 143.266 +	int count;
 143.267 +	unsigned long lo_bit_count, hi_bit_count;
 143.268 +
 143.269 +	lo_bit_count = sha_info->count_lo;
 143.270 +	hi_bit_count = sha_info->count_hi;
 143.271 +	count = (int) ((lo_bit_count >> 3) & 0x3f);
 143.272 +	sha_info->data[count++] = 0x80;
 143.273 +	if (count > SHA_BLOCKSIZE - 8) {
 143.274 +		memset(sha_info->data + count, 0, SHA_BLOCKSIZE - count);
 143.275 +		sha_transform(sha_info);
 143.276 +		memset(sha_info->data, 0, SHA_BLOCKSIZE - 8);
 143.277 +	} else {
 143.278 +		memset(sha_info->data + count, 0,
 143.279 +			SHA_BLOCKSIZE - 8 - count);
 143.280 +	}
 143.281 +	sha_info->data[56] = (unsigned char) ((hi_bit_count >> 24) & 0xff);
 143.282 +	sha_info->data[57] = (unsigned char) ((hi_bit_count >> 16) & 0xff);
 143.283 +	sha_info->data[58] = (unsigned char) ((hi_bit_count >>	8) & 0xff);
 143.284 +	sha_info->data[59] = (unsigned char) ((hi_bit_count >>	0) & 0xff);
 143.285 +	sha_info->data[60] = (unsigned char) ((lo_bit_count >> 24) & 0xff);
 143.286 +	sha_info->data[61] = (unsigned char) ((lo_bit_count >> 16) & 0xff);
 143.287 +	sha_info->data[62] = (unsigned char) ((lo_bit_count >>	8) & 0xff);
 143.288 +	sha_info->data[63] = (unsigned char) ((lo_bit_count >>	0) & 0xff);
 143.289 +	sha_transform(sha_info);
 143.290 +	digest[ 0] = (unsigned char) ((sha_info->digest[0] >> 24) & 0xff);
 143.291 +	digest[ 1] = (unsigned char) ((sha_info->digest[0] >> 16) & 0xff);
 143.292 +	digest[ 2] = (unsigned char) ((sha_info->digest[0] >>  8) & 0xff);
 143.293 +	digest[ 3] = (unsigned char) ((sha_info->digest[0]		) & 0xff);
 143.294 +	digest[ 4] = (unsigned char) ((sha_info->digest[1] >> 24) & 0xff);
 143.295 +	digest[ 5] = (unsigned char) ((sha_info->digest[1] >> 16) & 0xff);
 143.296 +	digest[ 6] = (unsigned char) ((sha_info->digest[1] >>  8) & 0xff);
 143.297 +	digest[ 7] = (unsigned char) ((sha_info->digest[1]		) & 0xff);
 143.298 +	digest[ 8] = (unsigned char) ((sha_info->digest[2] >> 24) & 0xff);
 143.299 +	digest[ 9] = (unsigned char) ((sha_info->digest[2] >> 16) & 0xff);
 143.300 +	digest[10] = (unsigned char) ((sha_info->digest[2] >>  8) & 0xff);
 143.301 +	digest[11] = (unsigned char) ((sha_info->digest[2]		) & 0xff);
 143.302 +	digest[12] = (unsigned char) ((sha_info->digest[3] >> 24) & 0xff);
 143.303 +	digest[13] = (unsigned char) ((sha_info->digest[3] >> 16) & 0xff);
 143.304 +	digest[14] = (unsigned char) ((sha_info->digest[3] >>  8) & 0xff);
 143.305 +	digest[15] = (unsigned char) ((sha_info->digest[3]		) & 0xff);
 143.306 +	digest[16] = (unsigned char) ((sha_info->digest[4] >> 24) & 0xff);
 143.307 +	digest[17] = (unsigned char) ((sha_info->digest[4] >> 16) & 0xff);
 143.308 +	digest[18] = (unsigned char) ((sha_info->digest[4] >>  8) & 0xff);
 143.309 +	digest[19] = (unsigned char) ((sha_info->digest[4]		) & 0xff);
 143.310 +}
 143.311 +
 143.312 +/*****************************************************************************/
 143.313 +
 143.314 +#define BLOCK_SIZE		8192
 143.315 +
 143.316 +#if 0
 143.317 +/* compute the SHA digest of a FILE stream */
 143.318 +static void sha_stream(unsigned char digest[20], SHA_INFO *sha_info, FILE *fin)
 143.319 +{
 143.320 +	int i;
 143.321 +	uint8_t data[BLOCK_SIZE];
 143.322 +
 143.323 +	sha_init(sha_info);
 143.324 +	while ((i = fread(data, 1, BLOCK_SIZE, fin)) > 0) {
 143.325 +		sha_update(sha_info, data, i);
 143.326 +	}
 143.327 +	sha_final(sha_info, digest);
 143.328 +}
 143.329 +
 143.330 +/* print a SHA digest */
 143.331 +static void sha_print(unsigned char digest[20])
 143.332 +{
 143.333 +	int i, j;
 143.334 +
 143.335 +	for (j = 0; j < 5; ++j) {
 143.336 +		for (i = 0; i < 4; ++i) {
 143.337 +			printf("%02x", *digest++);
 143.338 +		}
 143.339 +		printf("%c", (j < 4) ? ' ' : '\n');
 143.340 +	}
 143.341 +}
 143.342 +#endif
 143.343 +
 143.344 +/*****************************************************************************/
 143.345 +
 143.346 +/*
 143.347 + * Hash a file with the sha1 algorithm using fread.  Hash the whole file if
 143.348 + * size == 0.
 143.349 + */
 143.350 +static unsigned char *sha1_hash_fread (const char *file, off_t size)
 143.351 +{
 143.352 +	FILE          *f;
 143.353 +	unsigned char *hash;
 143.354 +	sha1_state_t   state;
 143.355 +	off_t          len;
 143.356 +	ssize_t        n;
 143.357 +	struct stat    st;
 143.358 +	char           buf[BLOCK_SIZE];
 143.359 +
 143.360 +	if (!(f = fopen (file, "rb")))
 143.361 +		return NULL;
 143.362 +
 143.363 +	sha_init (&state);
 143.364 +
 143.365 +	if (stat (file, &st) == -1)
 143.366 +	{
 143.367 +		fclose (f);
 143.368 +		return NULL;
 143.369 +	}
 143.370 +
 143.371 +	if (size == 0)
 143.372 +		size = st.st_size;
 143.373 +
 143.374 +	while (size > 0)
 143.375 +	{
 143.376 +		len = MIN (sizeof (buf), size);
 143.377 +
 143.378 +		n = fread (buf, 1, len, f);
 143.379 +
 143.380 +		if (n == 0 || n != len)
 143.381 +			break;
 143.382 +
 143.383 +		sha_update (&state, (unsigned char *) buf, len);
 143.384 +		size -= len;
 143.385 +	}
 143.386 +
 143.387 +	fclose (f);
 143.388 +
 143.389 +	if (size != 0)
 143.390 +		return NULL;
 143.391 +
 143.392 +	if ((hash = malloc (SHA1_BINSIZE)))
 143.393 +		sha_final (&state, hash);
 143.394 +
 143.395 +	return hash;
 143.396 +}
 143.397 +
 143.398 +/*****************************************************************************/
 143.399 +
 143.400 +/* return a base32 representation of a sha1 hash */
 143.401 +char *sha1_string (const unsigned char *sha1)
 143.402 +{
 143.403 +	char *base32;
 143.404 +
 143.405 +	base32 = malloc (SHA1_STRLEN + 1);
 143.406 +
 143.407 +	if (!base32)
 143.408 +		return NULL;
 143.409 +
 143.410 +	gt_base32_encode (sha1, SHA1_BINSIZE, base32, SHA1_STRLEN);
 143.411 +	base32[32] = 0;
 143.412 +
 143.413 +	return base32;
 143.414 +}
 143.415 +
 143.416 +/*****************************************************************************/
 143.417 +
 143.418 +unsigned char *sha1_bin (const char *ascii)
 143.419 +{
 143.420 +	unsigned char *bin;
 143.421 +	size_t         len;
 143.422 +
 143.423 +	/* TODO: maybe this should copy the string and pad up to the min length if
 143.424 +	 * it's less than 32? */
 143.425 +	len = strlen (ascii);
 143.426 +	assert (len >= SHA1_STRLEN);
 143.427 +
 143.428 +	if (!gt_base32_valid (ascii, SHA1_STRLEN))
 143.429 +		return NULL;
 143.430 +
 143.431 +	if (!(bin = malloc (SHA1_BINSIZE)))
 143.432 +		return NULL;
 143.433 +
 143.434 +	gt_base32_decode (ascii, SHA1_STRLEN, bin, SHA1_BINSIZE);
 143.435 +	return bin;
 143.436 +}
 143.437 +
 143.438 +/*****************************************************************************/
 143.439 +
 143.440 +unsigned char *sha1_digest (const char *file, off_t size)
 143.441 +{
 143.442 +	unsigned char *hash;
 143.443 +
 143.444 +	if (!file)
 143.445 +		return NULL;
 143.446 +
 143.447 +	hash = sha1_hash_fread (file, size);
 143.448 +
 143.449 +	return hash;
 143.450 +}
 143.451 +
 143.452 +unsigned char *sha1_dup (const unsigned char *sha1)
 143.453 +{
 143.454 +	unsigned char *new_sha1;
 143.455 +
 143.456 +	if (!(new_sha1 = malloc (SHA1_BINSIZE)))
 143.457 +		return NULL;
 143.458 +
 143.459 +	memcpy (new_sha1, sha1, SHA1_BINSIZE);
 143.460 +
 143.461 +	return new_sha1;
 143.462 +}
 143.463 +
 143.464 +/*****************************************************************************/
 143.465 +
 143.466 +#if 0
 143.467 +#include <libgen.h>
 143.468 +
 143.469 +int main (int argc, char **argv)
 143.470 +{
 143.471 +	int i;
 143.472 +
 143.473 +	for (i = 1; i < argc; i++)
 143.474 +	{
 143.475 +		unsigned char *bin;
 143.476 +		char          *str;
 143.477 +
 143.478 +		if (!(bin = sha1_digest (argv[i], 0)))
 143.479 +		{
 143.480 +			perror ("sha1_digest");
 143.481 +			continue;
 143.482 +		}
 143.483 +
 143.484 +		if ((str = sha1_string (bin)))
 143.485 +			printf ("%s\t%s\n", basename (argv[i]), str);
 143.486 +
 143.487 +		free (str);
 143.488 +		free (bin);
 143.489 +	}
 143.490 +
 143.491 +	return 0;
 143.492 +}
 143.493 +#endif
   144.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   144.2 +++ b/src/sha1.h	Sat Feb 20 21:18:28 2010 -0800
   144.3 @@ -0,0 +1,57 @@
   144.4 +/*
   144.5 + * $Id: sha1.h,v 1.10 2004/03/05 17:47:29 hipnod Exp $
   144.6 + *
   144.7 + * Copyright (C) 2001-2004 giFT project (gift.sourceforge.net)
   144.8 + *
   144.9 + * This program is free software; you can redistribute it and/or modify it
  144.10 + * under the terms of the GNU General Public License as published by the
  144.11 + * Free Software Foundation; either version 2, or (at your option) any
  144.12 + * later version.
  144.13 + *
  144.14 + * This program is distributed in the hope that it will be useful, but
  144.15 + * WITHOUT ANY WARRANTY; without even the implied warranty of
  144.16 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
  144.17 + * General Public License for more details.
  144.18 + */
  144.19 +
  144.20 +#ifndef GIFT_GT_SHA1_H_
  144.21 +#define GIFT_GT_SHA1_H_
  144.22 +
  144.23 +/*****************************************************************************/
  144.24 +
  144.25 +#define SHA_BLOCKSIZE		64
  144.26 +#define SHA_DIGESTSIZE		20
  144.27 +
  144.28 +#define SHA1_BINSIZE        20
  144.29 +#define SHA1_STRLEN         32
  144.30 +
  144.31 +/*****************************************************************************/
  144.32 +
  144.33 +struct sha1_state
  144.34 +{
  144.35 +	unsigned long  digest[5];           /* message digest */
  144.36 +	unsigned long  count_lo, count_hi;  /* 64-bit bit count */
  144.37 +	uint8_t        data[SHA_BLOCKSIZE]; /* SHA data buffer */
  144.38 +	int            local;               /* unprocessed amount in data */
  144.39 +};
  144.40 +
  144.41 +typedef struct sha1_state sha1_state_t;
  144.42 +
  144.43 +/*****************************************************************************/
  144.44 +
  144.45 +/* TODO: prefix these suckers */
  144.46 +char          *sha1_string (const unsigned char *sha1);
  144.47 +unsigned char *sha1_digest (const char *file, off_t size);
  144.48 +unsigned char *sha1_bin    (const char *ascii);
  144.49 +unsigned char *sha1_dup    (const unsigned char *sha1);
  144.50 +
  144.51 +/*****************************************************************************/
  144.52 +
  144.53 +void        gt_sha1_init   (sha1_state_t *state);
  144.54 +void        gt_sha1_append (sha1_state_t *state, const void *data,
  144.55 +                            size_t len);
  144.56 +void        gt_sha1_finish (sha1_state_t *state, unsigned char *hash);
  144.57 +
  144.58 +/*****************************************************************************/
  144.59 +
  144.60 +#endif /* GIFT_GT_SHA1_H_ */
   145.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   145.2 +++ b/src/transfer/Makefile.am	Sat Feb 20 21:18:28 2010 -0800
   145.3 @@ -0,0 +1,13 @@
   145.4 +AM_CFLAGS = \
   145.5 +	$(GNUTELLA_CFLAGS)
   145.6 +
   145.7 +INCLUDES = \
   145.8 +	-I$(top_srcdir)/src
   145.9 +
  145.10 +noinst_LTLIBRARIES = \
  145.11 +	libgt_transfer.la
  145.12 +
  145.13 +libgt_transfer_la_SOURCES = \
  145.14 +	download.c      download.h \
  145.15 +	push_proxy.c    push_proxy.h \
  145.16 +	source.c        source.h
   146.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   146.2 +++ b/src/transfer/Makefile.in	Sat Feb 20 21:18:28 2010 -0800
   146.3 @@ -0,0 +1,438 @@
   146.4 +# Makefile.in generated by automake 1.7.9 from Makefile.am.
   146.5 +# @configure_input@
   146.6 +
   146.7 +# Copyright 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003
   146.8 +# Free Software Foundation, Inc.
   146.9 +# This Makefile.in is free software; the Free Software Foundation
  146.10 +# gives unlimited permission to copy and/or distribute it,
  146.11 +# with or without modifications, as long as this notice is preserved.
  146.12 +
  146.13 +# This program is distributed in the hope that it will be useful,
  146.14 +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
  146.15 +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
  146.16 +# PARTICULAR PURPOSE.
  146.17 +
  146.18 +@SET_MAKE@
  146.19 +
  146.20 +srcdir = @srcdir@
  146.21 +top_srcdir = @top_srcdir@
  146.22 +VPATH = @srcdir@
  146.23 +pkgdatadir = $(datadir)/@PACKAGE@
  146.24 +pkglibdir = $(libdir)/@PACKAGE@
  146.25 +pkgincludedir = $(includedir)/@PACKAGE@
  146.26 +top_builddir = ../..
  146.27 +
  146.28 +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
  146.29 +INSTALL = @INSTALL@
  146.30 +install_sh_DATA = $(install_sh) -c -m 644
  146.31 +install_sh_PROGRAM = $(install_sh) -c
  146.32 +install_sh_SCRIPT = $(install_sh) -c
  146.33 +INSTALL_HEADER = $(INSTALL_DATA)
  146.34 +transform = $(program_transform_name)
  146.35 +NORMAL_INSTALL = :
  146.36 +PRE_INSTALL = :
  146.37 +POST_INSTALL = :
  146.38 +NORMAL_UNINSTALL = :
  146.39 +PRE_UNINSTALL = :
  146.40 +POST_UNINSTALL = :
  146.41 +host_triplet = @host@
  146.42 +ACLOCAL = @ACLOCAL@
  146.43 +AMDEP_FALSE = @AMDEP_FALSE@
  146.44 +AMDEP_TRUE = @AMDEP_TRUE@
  146.45 +AMTAR = @AMTAR@
  146.46 +AR = @AR@
  146.47 +AUTOCONF = @AUTOCONF@
  146.48 +AUTOHEADER = @AUTOHEADER@
  146.49 +AUTOMAKE = @AUTOMAKE@
  146.50 +AWK = @AWK@
  146.51 +CC = @CC@
  146.52 +CCDEPMODE = @CCDEPMODE@
  146.53 +CFLAGS = @CFLAGS@
  146.54 +CPP = @CPP@
  146.55 +CPPFLAGS = @CPPFLAGS@
  146.56 +CXX = @CXX@
  146.57 +CXXCPP = @CXXCPP@
  146.58 +CXXDEPMODE = @CXXDEPMODE@
  146.59 +CXXFLAGS = @CXXFLAGS@
  146.60 +CYGPATH_W = @CYGPATH_W@
  146.61 +DEFS = @DEFS@
  146.62 +DEPDIR = @DEPDIR@
  146.63 +ECHO = @ECHO@
  146.64 +ECHO_C = @ECHO_C@
  146.65 +ECHO_N = @ECHO_N@
  146.66 +ECHO_T = @ECHO_T@
  146.67 +EGREP = @EGREP@
  146.68 +EXEEXT = @EXEEXT@
  146.69 +F77 = @F77@
  146.70 +FFLAGS = @FFLAGS@
  146.71 +GNUTELLA_CFLAGS = @GNUTELLA_CFLAGS@
  146.72 +GNUTELLA_LIBS = @GNUTELLA_LIBS@
  146.73 +INSTALL_DATA = @INSTALL_DATA@
  146.74 +INSTALL_PROGRAM = @INSTALL_PROGRAM@
  146.75 +INSTALL_SCRIPT = @INSTALL_SCRIPT@
  146.76 +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
  146.77 +LDFLAGS = @LDFLAGS@
  146.78 +LIBOBJS = @LIBOBJS@
  146.79 +LIBS = @LIBS@
  146.80 +LIBTOOL = @LIBTOOL@
  146.81 +LIBXML2_CFLAGS = @LIBXML2_CFLAGS@
  146.82 +LIBXML2_LIBS = @LIBXML2_LIBS@
  146.83 +LN_S = @LN_S@
  146.84 +LTLIBOBJS = @LTLIBOBJS@
  146.85 +MAINT = @MAINT@
  146.86 +MAINTAINER_MODE_FALSE = @MAINTAINER_MODE_FALSE@
  146.87 +MAINTAINER_MODE_TRUE = @MAINTAINER_MODE_TRUE@
  146.88 +MAKEINFO = @MAKEINFO@
  146.89 +OBJEXT = @OBJEXT@
  146.90 +PACKAGE = @PACKAGE@
  146.91 +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
  146.92 +PACKAGE_NAME = @PACKAGE_NAME@
  146.93 +PACKAGE_STRING = @PACKAGE_STRING@
  146.94 +PACKAGE_TARNAME = @PACKAGE_TARNAME@
  146.95 +PACKAGE_VERSION = @PACKAGE_VERSION@
  146.96 +PATH_SEPARATOR = @PATH_SEPARATOR@
  146.97 +PKG_CONFIG = @PKG_CONFIG@
  146.98 +PLUGIN_LDFLAGS = @PLUGIN_LDFLAGS@
  146.99 +RANLIB = @RANLIB@
 146.100 +SET_MAKE = @SET_MAKE@
 146.101 +SHELL = @SHELL@
 146.102 +STRIP = @STRIP@
 146.103 +USE_ZLIB = @USE_ZLIB@
 146.104 +VERSION = @VERSION@
 146.105 +XML2_CONFIG = @XML2_CONFIG@
 146.106 +ac_ct_AR = @ac_ct_AR@
 146.107 +ac_ct_CC = @ac_ct_CC@
 146.108 +ac_ct_CXX = @ac_ct_CXX@
 146.109 +ac_ct_F77 = @ac_ct_F77@
 146.110 +ac_ct_RANLIB = @ac_ct_RANLIB@
 146.111 +ac_ct_STRIP = @ac_ct_STRIP@
 146.112 +am__fastdepCC_FALSE = @am__fastdepCC_FALSE@
 146.113 +am__fastdepCC_TRUE = @am__fastdepCC_TRUE@
 146.114 +am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@
 146.115 +am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@
 146.116 +am__include = @am__include@
 146.117 +am__leading_dot = @am__leading_dot@
 146.118 +am__quote = @am__quote@
 146.119 +bindir = @bindir@
 146.120 +build = @build@
 146.121 +build_alias = @build_alias@
 146.122 +build_cpu = @build_cpu@
 146.123 +build_os = @build_os@
 146.124 +build_vendor = @build_vendor@
 146.125 +datadir = @datadir@
 146.126 +exec_prefix = @exec_prefix@
 146.127 +host = @host@
 146.128 +host_alias = @host_alias@
 146.129 +host_cpu = @host_cpu@
 146.130 +host_os = @host_os@
 146.131 +host_vendor = @host_vendor@
 146.132 +includedir = @includedir@
 146.133 +infodir = @infodir@
 146.134 +install_sh = @install_sh@
 146.135 +libdir = @libdir@
 146.136 +libexecdir = @libexecdir@
 146.137 +localstatedir = @localstatedir@
 146.138 +mandir = @mandir@
 146.139 +oldincludedir = @oldincludedir@
 146.140 +prefix = @prefix@
 146.141 +program_transform_name = @program_transform_name@
 146.142 +sbindir = @sbindir@
 146.143 +sharedstatedir = @sharedstatedir@
 146.144 +sysconfdir = @sysconfdir@
 146.145 +target_alias = @target_alias@
 146.146 +AM_CFLAGS = \
 146.147 +	$(GNUTELLA_CFLAGS)
 146.148 +
 146.149 +
 146.150 +INCLUDES = \
 146.151 +	-I$(top_srcdir)/src
 146.152 +
 146.153 +
 146.154 +noinst_LTLIBRARIES = \
 146.155 +	libgt_transfer.la
 146.156 +
 146.157 +
 146.158 +libgt_transfer_la_SOURCES = \
 146.159 +	download.c      download.h \
 146.160 +	push_proxy.c    push_proxy.h \
 146.161 +	source.c        source.h
 146.162 +
 146.163 +subdir = src/transfer
 146.164 +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
 146.165 +mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
 146.166 +CONFIG_HEADER = $(top_builddir)/config.h
 146.167 +CONFIG_CLEAN_FILES =
 146.168 +LTLIBRARIES = $(noinst_LTLIBRARIES)
 146.169 +
 146.170 +libgt_transfer_la_LDFLAGS =
 146.171 +libgt_transfer_la_LIBADD =
 146.172 +am_libgt_transfer_la_OBJECTS = download.lo push_proxy.lo source.lo
 146.173 +libgt_transfer_la_OBJECTS = $(am_libgt_transfer_la_OBJECTS)
 146.174 +
 146.175 +DEFAULT_INCLUDES =  -I. -I$(srcdir) -I$(top_builddir)
 146.176 +depcomp = $(SHELL) $(top_srcdir)/depcomp
 146.177 +am__depfiles_maybe = depfiles
 146.178 +@AMDEP_TRUE@DEP_FILES = ./$(DEPDIR)/download.Plo \
 146.179 +@AMDEP_TRUE@	./$(DEPDIR)/push_proxy.Plo ./$(DEPDIR)/source.Plo
 146.180 +COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
 146.181 +	$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
 146.182 +LTCOMPILE = $(LIBTOOL) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) \
 146.183 +	$(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
 146.184 +CCLD = $(CC)
 146.185 +LINK = $(LIBTOOL) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
 146.186 +	$(AM_LDFLAGS) $(LDFLAGS) -o $@
 146.187 +DIST_SOURCES = $(libgt_transfer_la_SOURCES)
 146.188 +DIST_COMMON = $(srcdir)/Makefile.in Makefile.am
 146.189 +SOURCES = $(libgt_transfer_la_SOURCES)
 146.190 +
 146.191 +all: all-am
 146.192 +
 146.193 +.SUFFIXES:
 146.194 +.SUFFIXES: .c .lo .o .obj
 146.195 +$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ Makefile.am  $(top_srcdir)/configure.ac $(ACLOCAL_M4)
 146.196 +	cd $(top_srcdir) && \
 146.197 +	  $(AUTOMAKE) --gnu  src/transfer/Makefile
 146.198 +Makefile: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.in  $(top_builddir)/config.status
 146.199 +	cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)
 146.200 +
 146.201 +clean-noinstLTLIBRARIES:
 146.202 +	-test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES)
 146.203 +	@list='$(noinst_LTLIBRARIES)'; for p in $$list; do \
 146.204 +	  dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \
 146.205 +	  test "$$dir" = "$$p" && dir=.; \
 146.206 +	  echo "rm -f \"$${dir}/so_locations\""; \
 146.207 +	  rm -f "$${dir}/so_locations"; \
 146.208 +	done
 146.209 +libgt_transfer.la: $(libgt_transfer_la_OBJECTS) $(libgt_transfer_la_DEPENDENCIES) 
 146.210 +	$(LINK)  $(libgt_transfer_la_LDFLAGS) $(libgt_transfer_la_OBJECTS) $(libgt_transfer_la_LIBADD) $(LIBS)
 146.211 +
 146.212 +mostlyclean-compile:
 146.213 +	-rm -f *.$(OBJEXT) core *.core
 146.214 +
 146.215 +distclean-compile:
 146.216 +	-rm -f *.tab.c
 146.217 +
 146.218 +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/download.Plo@am__quote@
 146.219 +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/push_proxy.Plo@am__quote@
 146.220 +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/source.Plo@am__quote@
 146.221 +
 146.222 +.c.o:
 146.223 +@am__fastdepCC_TRUE@	if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" \
 146.224 +@am__fastdepCC_TRUE@	  -c -o $@ `test -f '$<' || echo '$(srcdir)/'`$<; \
 146.225 +@am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; \
 146.226 +@am__fastdepCC_TRUE@	else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; \
 146.227 +@am__fastdepCC_TRUE@	fi
 146.228 +@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
 146.229 +@AMDEP_TRUE@@am__fastdepCC_FALSE@	depfile='$(DEPDIR)/$*.Po' tmpdepfile='$(DEPDIR)/$*.TPo' @AMDEPBACKSLASH@
 146.230 +@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 146.231 +@am__fastdepCC_FALSE@	$(COMPILE) -c `test -f '$<' || echo '$(srcdir)/'`$<
 146.232 +
 146.233 +.c.obj:
 146.234 +@am__fastdepCC_TRUE@	if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" \
 146.235 +@am__fastdepCC_TRUE@	  -c -o $@ `if test -f '$<'; then $(CYGPATH_W) '$<'; else $(CYGPATH_W) '$(srcdir)/$<'; fi`; \
 146.236 +@am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; \
 146.237 +@am__fastdepCC_TRUE@	else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; \
 146.238 +@am__fastdepCC_TRUE@	fi
 146.239 +@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
 146.240 +@AMDEP_TRUE@@am__fastdepCC_FALSE@	depfile='$(DEPDIR)/$*.Po' tmpdepfile='$(DEPDIR)/$*.TPo' @AMDEPBACKSLASH@
 146.241 +@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 146.242 +@am__fastdepCC_FALSE@	$(COMPILE) -c `if test -f '$<'; then $(CYGPATH_W) '$<'; else $(CYGPATH_W) '$(srcdir)/$<'; fi`
 146.243 +
 146.244 +.c.lo:
 146.245 +@am__fastdepCC_TRUE@	if $(LTCOMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" \
 146.246 +@am__fastdepCC_TRUE@	  -c -o $@ `test -f '$<' || echo '$(srcdir)/'`$<; \
 146.247 +@am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Plo"; \
 146.248 +@am__fastdepCC_TRUE@	else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; \
 146.249 +@am__fastdepCC_TRUE@	fi
 146.250 +@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
 146.251 +@AMDEP_TRUE@@am__fastdepCC_FALSE@	depfile='$(DEPDIR)/$*.Plo' tmpdepfile='$(DEPDIR)/$*.TPlo' @AMDEPBACKSLASH@
 146.252 +@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 146.253 +@am__fastdepCC_FALSE@	$(LTCOMPILE) -c -o $@ `test -f '$<' || echo '$(srcdir)/'`$<
 146.254 +
 146.255 +mostlyclean-libtool:
 146.256 +	-rm -f *.lo
 146.257 +
 146.258 +clean-libtool:
 146.259 +	-rm -rf .libs _libs
 146.260 +
 146.261 +distclean-libtool:
 146.262 +	-rm -f libtool
 146.263 +uninstall-info-am:
 146.264 +
 146.265 +ETAGS = etags
 146.266 +ETAGSFLAGS =
 146.267 +
 146.268 +CTAGS = ctags
 146.269 +CTAGSFLAGS =
 146.270 +
 146.271 +tags: TAGS
 146.272 +
 146.273 +ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
 146.274 +	list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
 146.275 +	unique=`for i in $$list; do \
 146.276 +	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
 146.277 +	  done | \
 146.278 +	  $(AWK) '    { files[$$0] = 1; } \
 146.279 +	       END { for (i in files) print i; }'`; \
 146.280 +	mkid -fID $$unique
 146.281 +
 146.282 +TAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
 146.283 +		$(TAGS_FILES) $(LISP)
 146.284 +	tags=; \
 146.285 +	here=`pwd`; \
 146.286 +	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
 146.287 +	unique=`for i in $$list; do \
 146.288 +	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
 146.289 +	  done | \
 146.290 +	  $(AWK) '    { files[$$0] = 1; } \
 146.291 +	       END { for (i in files) print i; }'`; \
 146.292 +	test -z "$(ETAGS_ARGS)$$tags$$unique" \
 146.293 +	  || $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
 146.294 +	     $$tags $$unique
 146.295 +
 146.296 +ctags: CTAGS
 146.297 +CTAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
 146.298 +		$(TAGS_FILES) $(LISP)
 146.299 +	tags=; \
 146.300 +	here=`pwd`; \
 146.301 +	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
 146.302 +	unique=`for i in $$list; do \
 146.303 +	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
 146.304 +	  done | \
 146.305 +	  $(AWK) '    { files[$$0] = 1; } \
 146.306 +	       END { for (i in files) print i; }'`; \
 146.307 +	test -z "$(CTAGS_ARGS)$$tags$$unique" \
 146.308 +	  || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
 146.309 +	     $$tags $$unique
 146.310 +
 146.311 +GTAGS:
 146.312 +	here=`$(am__cd) $(top_builddir) && pwd` \
 146.313 +	  && cd $(top_srcdir) \
 146.314 +	  && gtags -i $(GTAGS_ARGS) $$here
 146.315 +
 146.316 +distclean-tags:
 146.317 +	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
 146.318 +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
 146.319 +
 146.320 +top_distdir = ../..
 146.321 +distdir = $(top_distdir)/$(PACKAGE)-$(VERSION)
 146.322 +
 146.323 +distdir: $(DISTFILES)
 146.324 +	@srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \
 146.325 +	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \
 146.326 +	list='$(DISTFILES)'; for file in $$list; do \
 146.327 +	  case $$file in \
 146.328 +	    $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \
 146.329 +	    $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \
 146.330 +	  esac; \
 146.331 +	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
 146.332 +	  dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \
 146.333 +	  if test "$$dir" != "$$file" && test "$$dir" != "."; then \
 146.334 +	    dir="/$$dir"; \
 146.335 +	    $(mkinstalldirs) "$(distdir)$$dir"; \
 146.336 +	  else \
 146.337 +	    dir=''; \
 146.338 +	  fi; \
 146.339 +	  if test -d $$d/$$file; then \
 146.340 +	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
 146.341 +	      cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
 146.342 +	    fi; \
 146.343 +	    cp -pR $$d/$$file $(distdir)$$dir || exit 1; \
 146.344 +	  else \
 146.345 +	    test -f $(distdir)/$$file \
 146.346 +	    || cp -p $$d/$$file $(distdir)/$$file \
 146.347 +	    || exit 1; \
 146.348 +	  fi; \
 146.349 +	done
 146.350 +check-am: all-am
 146.351 +check: check-am
 146.352 +all-am: Makefile $(LTLIBRARIES)
 146.353 +
 146.354 +installdirs:
 146.355 +install: install-am
 146.356 +install-exec: install-exec-am
 146.357 +install-data: install-data-am
 146.358 +uninstall: uninstall-am
 146.359 +
 146.360 +install-am: all-am
 146.361 +	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
 146.362 +
 146.363 +installcheck: installcheck-am
 146.364 +install-strip:
 146.365 +	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
 146.366 +	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
 146.367 +	  `test -z '$(STRIP)' || \
 146.368 +	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
 146.369 +mostlyclean-generic:
 146.370 +
 146.371 +clean-generic:
 146.372 +
 146.373 +distclean-generic:
 146.374 +	-rm -f $(CONFIG_CLEAN_FILES)
 146.375 +
 146.376 +maintainer-clean-generic:
 146.377 +	@echo "This command is intended for maintainers to use"
 146.378 +	@echo "it deletes files that may require special tools to rebuild."
 146.379 +clean: clean-am
 146.380 +
 146.381 +clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \
 146.382 +	mostlyclean-am
 146.383 +
 146.384 +distclean: distclean-am
 146.385 +	-rm -rf ./$(DEPDIR)
 146.386 +	-rm -f Makefile
 146.387 +distclean-am: clean-am distclean-compile distclean-generic \
 146.388 +	distclean-libtool distclean-tags
 146.389 +
 146.390 +dvi: dvi-am
 146.391 +
 146.392 +dvi-am:
 146.393 +
 146.394 +info: info-am
 146.395 +
 146.396 +info-am:
 146.397 +
 146.398 +install-data-am:
 146.399 +
 146.400 +install-exec-am:
 146.401 +
 146.402 +install-info: install-info-am
 146.403 +
 146.404 +install-man:
 146.405 +
 146.406 +installcheck-am:
 146.407 +
 146.408 +maintainer-clean: maintainer-clean-am
 146.409 +	-rm -rf ./$(DEPDIR)
 146.410 +	-rm -f Makefile
 146.411 +maintainer-clean-am: distclean-am maintainer-clean-generic
 146.412 +
 146.413 +mostlyclean: mostlyclean-am
 146.414 +
 146.415 +mostlyclean-am: mostlyclean-compile mostlyclean-generic \
 146.416 +	mostlyclean-libtool
 146.417 +
 146.418 +pdf: pdf-am
 146.419 +
 146.420 +pdf-am:
 146.421 +
 146.422 +ps: ps-am
 146.423 +
 146.424 +ps-am:
 146.425 +
 146.426 +uninstall-am: uninstall-info-am
 146.427 +
 146.428 +.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
 146.429 +	clean-libtool clean-noinstLTLIBRARIES ctags distclean \
 146.430 +	distclean-compile distclean-generic distclean-libtool \
 146.431 +	distclean-tags distdir dvi dvi-am info info-am install \
 146.432 +	install-am install-data install-data-am install-exec \
 146.433 +	install-exec-am install-info install-info-am install-man \
 146.434 +	install-strip installcheck installcheck-am installdirs \
 146.435 +	maintainer-clean maintainer-clean-generic mostlyclean \
 146.436 +	mostlyclean-compile mostlyclean-generic mostlyclean-libtool pdf \
 146.437 +	pdf-am ps ps-am tags uninstall uninstall-am uninstall-info-am
 146.438 +
 146.439 +# Tell versions [3.59,3.63) of GNU make to not export all variables.
 146.440 +# Otherwise a system limit (for SysV at least) may be exceeded.
 146.441 +.NOEXPORT:
   147.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   147.2 +++ b/src/transfer/download.c	Sat Feb 20 21:18:28 2010 -0800
   147.3 @@ -0,0 +1,104 @@
   147.4 +/*
   147.5 + * $Id: download.c,v 1.2 2004/04/17 06:06:46 hipnod Exp $
   147.6 + *
   147.7 + * Copyright (C) 2004 giFT project (gift.sourceforge.net)
   147.8 + *
   147.9 + * This program is free software; you can redistribute it and/or modify it
  147.10 + * under the terms of the GNU General Public License as published by the
  147.11 + * Free Software Foundation; either version 2, or (at your option) any
  147.12 + * later version.
  147.13 + *
  147.14 + * This program is distributed in the hope that it will be useful, but
  147.15 + * WITHOUT ANY WARRANTY; without even the implied warranty of
  147.16 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
  147.17 + * General Public License for more details.
  147.18 + */
  147.19 +
  147.20 +#include "gt_gnutella.h"
  147.21 +#include "transfer/download.h"
  147.22 +
  147.23 +/*****************************************************************************/
  147.24 +
  147.25 +static Dataset *gt_downloads;
  147.26 +
  147.27 +/*****************************************************************************/
  147.28 +
  147.29 +void gt_download_add (Transfer *transfer, Source *source)
  147.30 +{
  147.31 +	Dataset *d;
  147.32 +
  147.33 +	d = dataset_lookup (gt_downloads, &transfer, sizeof(transfer));
  147.34 +	dataset_insert (&d, &source, sizeof(source), source, 0);
  147.35 +
  147.36 +	dataset_insert (&gt_downloads, &transfer, sizeof(transfer), d, 0);
  147.37 +}
  147.38 +
  147.39 +void gt_download_remove (Transfer *transfer, Source *source)
  147.40 +{
  147.41 +	Dataset *d;
  147.42 +
  147.43 +	d = dataset_lookup (gt_downloads, &transfer, sizeof(transfer));
  147.44 +	dataset_remove (d, &source, sizeof(source));
  147.45 +
  147.46 +	if (dataset_length (d) == 0)
  147.47 +	{
  147.48 +		dataset_clear (d);
  147.49 +		dataset_remove (gt_downloads, &transfer, sizeof(transfer));
  147.50 +	}
  147.51 +
  147.52 +	if (dataset_length (gt_downloads) == 0)
  147.53 +	{
  147.54 +		dataset_clear (gt_downloads);
  147.55 +		gt_downloads = NULL;
  147.56 +	}
  147.57 +}
  147.58 +
  147.59 +/*****************************************************************************/
  147.60 +
  147.61 +static int ds_find_hash (ds_data_t *key, ds_data_t *value, void *udata)
  147.62 +{
  147.63 +	Array      *a    = udata;
  147.64 +	char       *sha1;
  147.65 +	Source    **ret;
  147.66 +	Source     *src  = value->data;
  147.67 +	int         n;
  147.68 +
  147.69 +	n = array_list (&a, &sha1, &ret, NULL);
  147.70 +	assert (n == 2);
  147.71 +
  147.72 +	if (!src->hash)
  147.73 +		return DS_CONTINUE;
  147.74 +
  147.75 +	/* NOTE: the hash is prefixed with giftd's hash here */
  147.76 +	if (strcmp (src->hash, sha1) == 0)
  147.77 +	{
  147.78 +		*ret = src;
  147.79 +		return DS_BREAK;
  147.80 +	}
  147.81 +
  147.82 +	return DS_CONTINUE;
  147.83 +}
  147.84 +
  147.85 +static int ds_traverse_transfer (ds_data_t *key, ds_data_t *value, void *udata)
  147.86 +{
  147.87 +	Dataset *d = value->data;
  147.88 +
  147.89 +	dataset_foreach_ex (d, ds_find_hash, udata);
  147.90 +	return DS_CONTINUE;
  147.91 +}
  147.92 +
  147.93 +Source *gt_download_lookup (const char *sha1)
  147.94 +{
  147.95 +	Array  *a;
  147.96 +	Source *ret = NULL;
  147.97 +
  147.98 +	a = array_new ((void *)sha1, &ret, NULL);
  147.99 +
 147.100 +	if (!a)
 147.101 +		return NULL;
 147.102 +
 147.103 +	dataset_foreach_ex (gt_downloads, ds_traverse_transfer, a);
 147.104 +	array_unset (&a);
 147.105 +
 147.106 +	return ret;
 147.107 +}
   148.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   148.2 +++ b/src/transfer/download.h	Sat Feb 20 21:18:28 2010 -0800
   148.3 @@ -0,0 +1,29 @@
   148.4 +/*
   148.5 + * $Id: download.h,v 1.1 2004/01/18 05:42:55 hipnod Exp $
   148.6 + *
   148.7 + * Copyright (C) 2004 giFT project (gift.sourceforge.net)
   148.8 + *
   148.9 + * This program is free software; you can redistribute it and/or modify it
  148.10 + * under the terms of the GNU General Public License as published by the
  148.11 + * Free Software Foundation; either version 2, or (at your option) any
  148.12 + * later version.
  148.13 + *
  148.14 + * This program is distributed in the hope that it will be useful, but
  148.15 + * WITHOUT ANY WARRANTY; without even the implied warranty of
  148.16 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
  148.17 + * General Public License for more details.
  148.18 + */
  148.19 +
  148.20 +#ifndef GIFT_GT_DOWNLOAD_H_
  148.21 +#define GIFT_GT_DOWNLOAD_H_
  148.22 +
  148.23 +/*****************************************************************************/
  148.24 +
  148.25 +void       gt_download_add      (Transfer *transfer, Source *source);
  148.26 +void       gt_download_remove   (Transfer *transfer, Source *source);
  148.27 +
  148.28 +Source    *gt_download_lookup   (const char *sha1);
  148.29 +
  148.30 +/*****************************************************************************/
  148.31 +
  148.32 +#endif /* GIFT_GT_DOWNLOAD_H_ */
   149.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   149.2 +++ b/src/transfer/push_proxy.c	Sat Feb 20 21:18:28 2010 -0800
   149.3 @@ -0,0 +1,292 @@
   149.4 +/*
   149.5 + * $Id: push_proxy.c,v 1.2 2004/06/02 07:13:02 hipnod Exp $
   149.6 + *
   149.7 + * Copyright (C) 2004 giFT project (gift.sourceforge.net)
   149.8 + *
   149.9 + * This program is free software; you can redistribute it and/or modify it
  149.10 + * under the terms of the GNU General Public License as published by the
  149.11 + * Free Software Foundation; either version 2, or (at your option) any
  149.12 + * later version.
  149.13 + *
  149.14 + * This program is distributed in the hope that it will be useful, but
  149.15 + * WITHOUT ANY WARRANTY; without even the implied warranty of
  149.16 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
  149.17 + * General Public License for more details.
  149.18 + */
  149.19 +
  149.20 +#include "gt_gnutella.h"
  149.21 +
  149.22 +#include "gt_node.h"
  149.23 +#include "gt_packet.h"     /* htovs() */
  149.24 +
  149.25 +#include "transfer/push_proxy.h"
  149.26 +
  149.27 +/*****************************************************************************/
  149.28 +
  149.29 +/*
  149.30 + * All this GGEP stuff will move somewhere else soon.  Just haven't decided
  149.31 + * where to put it.
  149.32 + */
  149.33 +
  149.34 +/*****************************************************************************/
  149.35 +
  149.36 +#define PROXY_DEBUG          gt_config_get_int("push_proxy/debug=0")
  149.37 +
  149.38 +/*****************************************************************************/
  149.39 +
  149.40 +#define GGEP_HDR_LEN         (1)    /* 0xc3 */
  149.41 +#define GGEP_EXT_MAX_LEN     (63)   /* use only a single len chunk for now */
  149.42 +
  149.43 +enum ggep_length_flags
  149.44 +{
  149.45 +	GGEP_LEN_NOT_LAST      = 0x80,  /* not the last chunk */
  149.46 +	GGEP_LEN_LAST          = 0x40,  /* last length chunk flag */
  149.47 +};
  149.48 +
  149.49 +enum ggep_extension_flags
  149.50 +{
  149.51 +	GGEP_EXTF_LAST         = 0x80,  /* last extension */
  149.52 +	GGEP_EXTF_COBS_ENCODED = 0x40,  /* encoded with COBS-encoding */
  149.53 +	GGEP_EXTF_COMPRESSED   = 0x20,  /* compressed */
  149.54 +	GGEP_EXTF_RESERVED     = 0x10,  /* reserved */
  149.55 +
  149.56 +	/* lower 4 bits is identifier length */
  149.57 +};
  149.58 +
  149.59 +/*****************************************************************************/
  149.60 +
  149.61 +struct proxy_addr
  149.62 +{
  149.63 +	in_addr_t  ipv4;
  149.64 +	in_port_t  port;
  149.65 +};
  149.66 +
  149.67 +typedef struct ggep
  149.68 +{
  149.69 +	uint8_t   *block;
  149.70 +	size_t     block_len;
  149.71 +	size_t     offset;
  149.72 +	size_t     last_ext_offset;
  149.73 +	BOOL       error;
  149.74 +} ggep_t;
  149.75 +
  149.76 +/*****************************************************************************/
  149.77 +
  149.78 +static ggep_t     proxy_block;
  149.79 +static Dataset   *proxies;
  149.80 +
  149.81 +/*****************************************************************************/
  149.82 +
  149.83 +static BOOL ggep_grow (ggep_t *ggep, size_t sz)
  149.84 +{
  149.85 +	uint8_t *new_block;
  149.86 +	size_t   new_size;
  149.87 +
  149.88 +	new_size = ggep->block_len + sz;
  149.89 +	if (!(new_block = realloc (ggep->block, new_size)))
  149.90 +		return FALSE;
  149.91 +
  149.92 +	ggep->block     = new_block;
  149.93 +	ggep->block_len = new_size;
  149.94 +
  149.95 +	return TRUE;
  149.96 +}
  149.97 +
  149.98 +static BOOL ggep_init (ggep_t *ggep)
  149.99 +{
 149.100 +	ggep->block_len       = 1;
 149.101 +	ggep->offset          = 1;
 149.102 +	ggep->last_ext_offset = 0;
 149.103 +	ggep->error           = FALSE;
 149.104 +
 149.105 +	if (!(ggep->block = malloc (1)))
 149.106 +		return FALSE;
 149.107 +
 149.108 +	/* append magic byte */
 149.109 +	ggep->block[0] = 0xc3;
 149.110 +
 149.111 +	return TRUE;
 149.112 +}
 149.113 +
 149.114 +static void ggep_append (ggep_t *ggep, const void *data, size_t data_size)
 149.115 +{
 149.116 +	if (ggep_grow (ggep, data_size) == FALSE)
 149.117 +	{
 149.118 +		ggep->error = TRUE;
 149.119 +		return;
 149.120 +	}
 149.121 +
 149.122 +	assert (ggep->offset + data_size <= ggep->block_len);
 149.123 +	memcpy (&ggep->block[ggep->offset], data, data_size);
 149.124 +	ggep->offset += data_size;
 149.125 +}
 149.126 +
 149.127 +/* TODO: this should use a writev()-like interface */
 149.128 +static BOOL ggep_append_extension (ggep_t *ggep, const char *id,
 149.129 +                                   const uint8_t *data, size_t data_len)
 149.130 +{
 149.131 +	uint8_t id_len;
 149.132 +	uint8_t ext_flags;
 149.133 +	uint8_t ext_data_len;
 149.134 +
 149.135 +	id_len = strlen (id) & 0x0f;
 149.136 +
 149.137 +	/* disable Encoding, Compression, LastExtension bits, len in low 4 bits */
 149.138 +	ext_flags = id_len;
 149.139 +
 149.140 +	/* track position of last extension for setting LastExtension bit */
 149.141 +	ggep->last_ext_offset = ggep->offset;
 149.142 +
 149.143 +	/* extension flag header */
 149.144 +	ggep_append (ggep, &ext_flags, 1);
 149.145 +
 149.146 +	/* extension identifier */
 149.147 +	ggep_append (ggep, id, id_len);
 149.148 +
 149.149 +	assert (data_len <= GGEP_EXT_MAX_LEN);
 149.150 +	ext_data_len = data_len | GGEP_LEN_LAST; /* add last length chunk flag */
 149.151 +
 149.152 +	/* the extension length */
 149.153 +	ggep_append (ggep, &ext_data_len, 1);
 149.154 +
 149.155 +	/* the extension data */
 149.156 +	ggep_append (ggep, data, data_len);
 149.157 +
 149.158 +	if (ggep->error)
 149.159 +		return FALSE;
 149.160 +
 149.161 +	return TRUE;
 149.162 +}
 149.163 +
 149.164 +static BOOL ggep_seal (ggep_t *ggep)
 149.165 +{
 149.166 +	if (ggep->last_ext_offset == 0)
 149.167 +		return FALSE;
 149.168 +
 149.169 +	/* set the LastExtension bit on the last extension */
 149.170 +	ggep->block[ggep->last_ext_offset] |= GGEP_EXTF_LAST;
 149.171 +	return TRUE;
 149.172 +}
 149.173 +
 149.174 +static void ggep_finish (ggep_t *ggep)
 149.175 +{
 149.176 +	free (ggep->block);
 149.177 +}
 149.178 +
 149.179 +/*****************************************************************************/
 149.180 +
 149.181 +static void ds_add_proxy (ds_data_t *key, ds_data_t *value, void **cmp)
 149.182 +{
 149.183 +	uint8_t           *push_ext     = cmp[0];
 149.184 +	size_t            *push_ext_len = cmp[1];
 149.185 +	in_port_t          port;
 149.186 +	struct proxy_addr *proxy = value->data;
 149.187 +
 149.188 +	port = htovs (proxy->port);
 149.189 +
 149.190 +	if (*push_ext_len + 6 >= GGEP_EXT_MAX_LEN)
 149.191 +		return;
 149.192 +
 149.193 +	/* build the PUSH extension */
 149.194 +	memcpy (&push_ext[*push_ext_len], &proxy->ipv4, 4); *push_ext_len += 4;
 149.195 +	memcpy (&push_ext[*push_ext_len], &port, 2);        *push_ext_len += 2;
 149.196 +}
 149.197 +
 149.198 +static void update_block (ggep_t *ggep)
 149.199 +{
 149.200 +	uint8_t push_ext[GGEP_EXT_MAX_LEN]; /* ugh */
 149.201 +	size_t  push_ext_len;               /* double ugh */
 149.202 +	void   *cmp[2];
 149.203 +
 149.204 +	ggep_finish (ggep);
 149.205 +
 149.206 +	if (ggep_init (ggep) == FALSE)
 149.207 +		return;
 149.208 +
 149.209 +	cmp[0] = push_ext;
 149.210 +	cmp[1] = &push_ext_len;
 149.211 +
 149.212 +	push_ext_len = 0;
 149.213 +	dataset_foreach (proxies, DS_FOREACH(ds_add_proxy), cmp);
 149.214 +	assert (push_ext_len <= GGEP_EXT_MAX_LEN);
 149.215 +
 149.216 +	if (ggep_append_extension (ggep, "PUSH", push_ext, push_ext_len) == FALSE)
 149.217 +		return;
 149.218 +
 149.219 +	ggep_seal (ggep);
 149.220 +}
 149.221 +
 149.222 +/*****************************************************************************/
 149.223 +
 149.224 +static void push_proxy_change (GtNode *node, in_addr_t ipv4,
 149.225 +                               in_port_t port, BOOL add)
 149.226 +{
 149.227 +	struct proxy_addr  addr;
 149.228 +	struct proxy_addr *stored;
 149.229 +
 149.230 +	addr.ipv4 = ipv4;
 149.231 +	addr.port = port;
 149.232 +
 149.233 +	stored = dataset_lookup (proxies, &node, sizeof(node));
 149.234 +	if (PROXY_DEBUG)
 149.235 +	{
 149.236 +		if (add && !stored)
 149.237 +			GT->DBGFN (GT, "adding push proxy %s:%hu", net_ip_str (ipv4), port);
 149.238 +		else if (!add && stored)
 149.239 +			GT->DBGFN (GT, "rming push proxy %s:%hu", net_ip_str (ipv4), port);
 149.240 +	}
 149.241 +
 149.242 +	if (add)
 149.243 +		dataset_insert (&proxies, &node, sizeof(node), &addr, sizeof(addr));
 149.244 +	else
 149.245 +		dataset_remove (proxies, &node, sizeof(node));
 149.246 +
 149.247 +	update_block (&proxy_block);
 149.248 +}
 149.249 +
 149.250 +void gt_push_proxy_add (GtNode *node, in_addr_t ipv4, in_port_t port)
 149.251 +{
 149.252 +	assert (node->push_proxy_ip == 0);
 149.253 +	assert (node->push_proxy_port == 0);
 149.254 +
 149.255 +	push_proxy_change (node, ipv4, port, TRUE);
 149.256 +	node->push_proxy_ip   = ipv4;
 149.257 +	node->push_proxy_port = port;
 149.258 +}
 149.259 +
 149.260 +/*
 149.261 + * This must be called if the port changes, or if the proxy disconnects.
 149.262 + */
 149.263 +void gt_push_proxy_del (GtNode *node)
 149.264 +{
 149.265 +	push_proxy_change (node, node->push_proxy_ip,
 149.266 +	                   node->push_proxy_port, FALSE);
 149.267 +	node->push_proxy_ip   = 0;
 149.268 +	node->push_proxy_port = 0;
 149.269 +}
 149.270 +
 149.271 +BOOL gt_push_proxy_get_ggep_block (uint8_t **block, size_t *block_len)
 149.272 +{
 149.273 +	if (dataset_length (proxies) == 0)
 149.274 +		return FALSE;
 149.275 +
 149.276 +	*block     = proxy_block.block;
 149.277 +	*block_len = proxy_block.block_len;
 149.278 +
 149.279 +	return TRUE;
 149.280 +}
 149.281 +
 149.282 +/*****************************************************************************/
 149.283 +
 149.284 +void gt_push_proxy_init (void)
 149.285 +{
 149.286 +	ggep_init (&proxy_block);
 149.287 +}
 149.288 +
 149.289 +void gt_push_proxy_cleanup (void)
 149.290 +{
 149.291 +	dataset_clear (proxies);
 149.292 +	proxies = NULL;
 149.293 +
 149.294 +	ggep_finish (&proxy_block);
 149.295 +}
   150.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   150.2 +++ b/src/transfer/push_proxy.h	Sat Feb 20 21:18:28 2010 -0800
   150.3 @@ -0,0 +1,34 @@
   150.4 +/*
   150.5 + * $Id: push_proxy.h,v 1.1 2004/03/24 06:33:09 hipnod Exp $
   150.6 + *
   150.7 + * Copyright (C) 2004 giFT project (gift.sourceforge.net)
   150.8 + *
   150.9 + * This program is free software; you can redistribute it and/or modify it
  150.10 + * under the terms of the GNU General Public License as published by the
  150.11 + * Free Software Foundation; either version 2, or (at your option) any
  150.12 + * later version.
  150.13 + *
  150.14 + * This program is distributed in the hope that it will be useful, but
  150.15 + * WITHOUT ANY WARRANTY; without even the implied warranty of
  150.16 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
  150.17 + * General Public License for more details.
  150.18 + */
  150.19 +
  150.20 +#ifndef GIFT_GT_PUSH_PROXY_H_
  150.21 +#define GIFT_GT_PUSH_PROXY_H_
  150.22 +
  150.23 +/*****************************************************************************/
  150.24 +
  150.25 +void      gt_push_proxy_add             (GtNode *node, in_addr_t ipv4,
  150.26 +                                         in_port_t port);
  150.27 +void      gt_push_proxy_del             (GtNode *node);
  150.28 +BOOL      gt_push_proxy_get_ggep_block  (uint8_t **block, size_t *block_len);
  150.29 +
  150.30 +/*****************************************************************************/
  150.31 +
  150.32 +void      gt_push_proxy_init            (void);
  150.33 +void      gt_push_proxy_cleanup         (void);
  150.34 +
  150.35 +/*****************************************************************************/
  150.36 +
  150.37 +#endif /* GIFT_GT_PUSH_PROXY_H_ */
   151.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   151.2 +++ b/src/transfer/source.c	Sat Feb 20 21:18:28 2010 -0800
   151.3 @@ -0,0 +1,754 @@
   151.4 +/*
   151.5 + * $Id: source.c,v 1.12 2005/01/04 14:31:44 mkern Exp $
   151.6 + *
   151.7 + * Copyright (C) 2002-2003 giFT project (gift.sourceforge.net)
   151.8 + *
   151.9 + * This program is free software; you can redistribute it and/or modify it
  151.10 + * under the terms of the GNU General Public License as published by the
  151.11 + * Free Software Foundation; either version 2, or (at your option) any
  151.12 + * later version.
  151.13 + *
  151.14 + * This program is distributed in the hope that it will be useful, but
  151.15 + * WITHOUT ANY WARRANTY; without even the implied warranty of
  151.16 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
  151.17 + * General Public License for more details.
  151.18 + */
  151.19 +
  151.20 +#include "gt_gnutella.h"
  151.21 +#include "gt_share_file.h"
  151.22 +
  151.23 +#include "encoding/url.h"
  151.24 +
  151.25 +#include "transfer/source.h"
  151.26 +#include "transfer/download.h"
  151.27 +
  151.28 +/*****************************************************************************/
  151.29 +
  151.30 +/*
  151.31 + * Most of the goop in this file is for specifying each parameter for the giFT
  151.32 + * source URL.  The source URL is supposed to encode all the information
  151.33 + * necessary for contacting a source.
  151.34 + */
  151.35 +
  151.36 +/*****************************************************************************/
  151.37 +
  151.38 +typedef BOOL (*UnserializeFunc) (GtSource *gt, const char *key,
  151.39 +                                 const char *value);
  151.40 +typedef BOOL (*SerializeFunc)   (GtSource *gt, String *s);
  151.41 +
  151.42 +#define URL_OPT_SERIALIZE(name) \
  151.43 +    BOOL gt_src_spew_##name (GtSource *gt, String *s)
  151.44 +
  151.45 +#define URL_OPT_UNSERIALIZE(name) \
  151.46 +	BOOL gt_src_parse_##name (GtSource *gt, const char *key, const char *value)
  151.47 +
  151.48 +#define DECLARE_URL_OPT(name) \
  151.49 +    static URL_OPT_SERIALIZE(name); \
  151.50 +    static URL_OPT_UNSERIALIZE(name)
  151.51 +
  151.52 +/*****************************************************************************/
  151.53 +
  151.54 +DECLARE_URL_OPT(ip);
  151.55 +DECLARE_URL_OPT(port);
  151.56 +DECLARE_URL_OPT(server_ip);
  151.57 +DECLARE_URL_OPT(server_port);
  151.58 +DECLARE_URL_OPT(guid);
  151.59 +DECLARE_URL_OPT(fw);
  151.60 +DECLARE_URL_OPT(index);
  151.61 +DECLARE_URL_OPT(name);
  151.62 +
  151.63 +/*
  151.64 + * Options that can go in our source URL format.
  151.65 + */
  151.66 +static struct url_option
  151.67 +{
  151.68 +	const char          *key;         /* key in url (i.e. "port" in "port=6346") */
  151.69 +	SerializeFunc        serialize;
  151.70 +	UnserializeFunc      unserialize;
  151.71 +} gt_source_url_options[] =
  151.72 +{
  151.73 +	{ "ip",    gt_src_spew_ip,          gt_src_parse_ip           },
  151.74 +	{ "port",  gt_src_spew_port,        gt_src_parse_port         },
  151.75 +	{ "sip",   gt_src_spew_server_ip,   gt_src_parse_server_ip    },
  151.76 +	{ "sport", gt_src_spew_server_port, gt_src_parse_server_port  },
  151.77 +	{ "fw",    gt_src_spew_fw,          gt_src_parse_fw           },
  151.78 +	{ "guid",  gt_src_spew_guid,        gt_src_parse_guid         },
  151.79 +	{ "index", gt_src_spew_index,       gt_src_parse_index        },
  151.80 +	{ "name",  gt_src_spew_name,        gt_src_parse_name         },
  151.81 +	{ NULL, NULL, NULL }
  151.82 +};
  151.83 +
  151.84 +/*****************************************************************************/
  151.85 +
  151.86 +/*
  151.87 + * These functions return TRUE if they produced some output.
  151.88 + */
  151.89 +
  151.90 +static URL_OPT_SERIALIZE(ip)
  151.91 +{
  151.92 +	if (!gt->user_ip)
  151.93 +		return FALSE;
  151.94 +
  151.95 +	string_appendf (s, "ip=%s", net_ip_str (gt->user_ip));
  151.96 +	return TRUE;
  151.97 +}
  151.98 +
  151.99 +static URL_OPT_SERIALIZE(port)
 151.100 +{
 151.101 +	if (gt->user_port == 6346)
 151.102 +		return FALSE;
 151.103 +
 151.104 +	string_appendf (s, "port=%hu", gt->user_port);
 151.105 +	return TRUE;
 151.106 +}
 151.107 +
 151.108 +static URL_OPT_SERIALIZE(name)
 151.109 +{
 151.110 +	if (!gt->filename)
 151.111 +		return FALSE;
 151.112 +
 151.113 +	string_appendf (s, "name=%s", gt->filename);
 151.114 +	return TRUE;
 151.115 +}
 151.116 +
 151.117 +static URL_OPT_SERIALIZE(guid)
 151.118 +{
 151.119 +	if (gt_guid_is_empty (gt->guid))
 151.120 +		return FALSE;
 151.121 +
 151.122 +	string_appendf (s, "guid=%s", gt_guid_str (gt->guid));
 151.123 +	return TRUE;
 151.124 +}
 151.125 +
 151.126 +static URL_OPT_SERIALIZE(server_ip)
 151.127 +{
 151.128 +	if (!gt->server_ip)
 151.129 +		return FALSE;
 151.130 +
 151.131 +	string_appendf (s, "sip=%s", net_ip_str (gt->server_ip));
 151.132 +	return TRUE;
 151.133 +}
 151.134 +
 151.135 +static URL_OPT_SERIALIZE(server_port)
 151.136 +{
 151.137 +	if (gt->server_port == 6346)
 151.138 +		return FALSE;
 151.139 +
 151.140 +	string_appendf (s, "sport=%hu", gt->server_port);
 151.141 +	return TRUE;
 151.142 +}
 151.143 +
 151.144 +static URL_OPT_SERIALIZE(fw)
 151.145 +{
 151.146 +	if (!gt->firewalled)
 151.147 +		return FALSE;
 151.148 +
 151.149 +	string_append (s, "fw=1");
 151.150 +	return TRUE;
 151.151 +}
 151.152 +
 151.153 +static URL_OPT_SERIALIZE(index)
 151.154 +{
 151.155 +	if (!gt->index)
 151.156 +		return FALSE;
 151.157 +
 151.158 +	string_appendf (s, "index=%u", gt->index);
 151.159 +	return TRUE;
 151.160 +}
 151.161 +
 151.162 +/*****************************************************************************/
 151.163 +
 151.164 +/*
 151.165 + * These functions return TRUE if they were successful.
 151.166 + */
 151.167 +
 151.168 +static URL_OPT_UNSERIALIZE(ip)
 151.169 +{
 151.170 +	in_addr_t ip;
 151.171 +
 151.172 +	ip = net_ip (value);
 151.173 +
 151.174 +	if (ip == 0 || ip == INADDR_NONE)
 151.175 +		return FALSE;
 151.176 +
 151.177 +	gt->user_ip = ip;
 151.178 +	return TRUE;
 151.179 +}
 151.180 +
 151.181 +static URL_OPT_UNSERIALIZE(port)
 151.182 +{
 151.183 +	unsigned long port;
 151.184 +
 151.185 +	port = gift_strtoul (value);
 151.186 +
 151.187 +	if (port == ULONG_MAX || port >= 65536)
 151.188 +		return FALSE;
 151.189 +
 151.190 +	gt->user_port = port;
 151.191 +	return TRUE;
 151.192 +}
 151.193 +
 151.194 +static URL_OPT_UNSERIALIZE(name)
 151.195 +{
 151.196 +	char *name;
 151.197 +
 151.198 +	if (!(name = STRDUP (value)))
 151.199 +		return FALSE;
 151.200 +
 151.201 +	gt->filename = name;
 151.202 +	return TRUE;
 151.203 +}
 151.204 +
 151.205 +static URL_OPT_UNSERIALIZE(guid)
 151.206 +{
 151.207 +	gt_guid_t *guid;
 151.208 +
 151.209 +	if (!(guid = gt_guid_bin (value)))
 151.210 +		return FALSE;
 151.211 +
 151.212 +	free (gt->guid);
 151.213 +	gt->guid = guid;
 151.214 +
 151.215 +	return TRUE;
 151.216 +}
 151.217 +
 151.218 +static URL_OPT_UNSERIALIZE(server_ip)
 151.219 +{
 151.220 +	in_addr_t ip;
 151.221 +
 151.222 +	ip = net_ip (value);
 151.223 +
 151.224 +	if (ip == 0 || ip == INADDR_NONE)
 151.225 +		return FALSE;
 151.226 +
 151.227 +	gt->server_ip = ip;
 151.228 +	return TRUE;
 151.229 +}
 151.230 +
 151.231 +static URL_OPT_UNSERIALIZE(server_port)
 151.232 +{
 151.233 +	unsigned long port;
 151.234 +
 151.235 +	port = gift_strtoul (value);
 151.236 +
 151.237 +	if (port == ULONG_MAX || port >= 65536)
 151.238 +		return FALSE;
 151.239 +
 151.240 +	gt->server_port = port;
 151.241 +	return TRUE;
 151.242 +}
 151.243 +
 151.244 +static URL_OPT_UNSERIALIZE(fw)
 151.245 +{
 151.246 +	unsigned long fw;
 151.247 +
 151.248 +	fw = gift_strtoul (value);
 151.249 +
 151.250 +	if (fw != 0 && fw != 1)
 151.251 +		return FALSE;
 151.252 +
 151.253 +	if (fw)
 151.254 +		gt->firewalled = TRUE;
 151.255 +	else
 151.256 +		gt->firewalled = FALSE;
 151.257 +
 151.258 +	return TRUE;
 151.259 +}
 151.260 +
 151.261 +static URL_OPT_UNSERIALIZE(index)
 151.262 +{
 151.263 +	unsigned long index;
 151.264 +
 151.265 +	index = gift_strtoul (value);
 151.266 +
 151.267 +	if (index == ULONG_MAX)
 151.268 +		return FALSE;
 151.269 +
 151.270 +	gt->index = (uint32_t)index;
 151.271 +	return TRUE;
 151.272 +}
 151.273 +
 151.274 +/*****************************************************************************/
 151.275 +
 151.276 +/*
 151.277 + * Old Gnutella URL format:
 151.278 + *
 151.279 + * Gnutella://<u-ip>:<u-port>@<s-ip>:<s-port>[[FW]]:<client-guid>/<index>/<name>
 151.280 + *
 151.281 + * server_port is the server's gnutella port. This should probably pass
 151.282 + * back both the gnutella port instead and the peer's connecting port, to
 151.283 + * help in disambiguating different users behind the same firewall.
 151.284 + */
 151.285 +static BOOL parse_old_url (char *url,
 151.286 +                           uint32_t *r_user_ip, uint16_t *r_user_port,
 151.287 +                           uint32_t *r_server_ip, uint16_t *r_server_port,
 151.288 +                           BOOL *firewalled, char **r_pushid,
 151.289 +                           uint32_t *r_index, char **r_fname)
 151.290 +{
 151.291 +	char *port_and_flags;
 151.292 +	char *flag;
 151.293 +
 151.294 +	string_sep (&url, "://");
 151.295 +
 151.296 +	/* TODO: check for more errors */
 151.297 +
 151.298 +	*r_user_ip     = net_ip       (string_sep (&url, ":"));
 151.299 +	*r_user_port   = gift_strtoul (string_sep (&url, "@"));
 151.300 +	*r_server_ip   = net_ip       (string_sep (&url, ":"));
 151.301 +
 151.302 +	/* handle bracketed flags after port. ugh, this is so ugly */
 151.303 +	port_and_flags = string_sep (&url, ":");
 151.304 +	*r_server_port = gift_strtoul (string_sep (&port_and_flags, "["));
 151.305 +
 151.306 +	if (!string_isempty (port_and_flags))
 151.307 +	{
 151.308 +		/* grab any flags inside the brackets */
 151.309 +		while ((flag = string_sep_set (&port_and_flags, ",]")))
 151.310 +		{
 151.311 +			if (!STRCMP (flag, "FW"))
 151.312 +				*firewalled = TRUE;
 151.313 +		}
 151.314 +	}
 151.315 +
 151.316 +	*r_pushid      =               string_sep (&url, "/");
 151.317 +	*r_index       = gift_strtoul (string_sep (&url, "/"));
 151.318 +	*r_fname       = url;
 151.319 +
 151.320 +	return TRUE;
 151.321 +}
 151.322 +
 151.323 +static struct url_option *lookup_url_option (const char *key)
 151.324 +{
 151.325 +	struct url_option *url_opt;
 151.326 +
 151.327 +	url_opt = &gt_source_url_options[0];
 151.328 +
 151.329 +	while (url_opt->key != NULL)
 151.330 +	{
 151.331 +		if (strcmp (url_opt->key, key) == 0)
 151.332 +			return url_opt;
 151.333 +
 151.334 +		url_opt++;
 151.335 +	}
 151.336 +
 151.337 +	return NULL;
 151.338 +}
 151.339 +
 151.340 +/*
 151.341 + * New parameter-based URL format:
 151.342 + *
 151.343 + * Gnutella:?ip=<u-ip>&port=<u-port>&sip=<s-ip>&sport=<s-port>[&fw=<FW>]...
 151.344 + *
 151.345 + * Parameters we don't understand are placed in gt_src->extra Dataset, so we
 151.346 + * should be forwards and backwards compatible when adding new parameters.
 151.347 + */
 151.348 +static BOOL parse_new_url (char *url, GtSource *gt)
 151.349 +{
 151.350 +	char *option;
 151.351 +	char *key;
 151.352 +	char *value;
 151.353 +
 151.354 +	/* skip prefix */
 151.355 +	string_sep (&url, ":?");
 151.356 +
 151.357 +	while ((option = string_sep (&url, "&")))
 151.358 +	{
 151.359 +		struct url_option *url_opt;
 151.360 +
 151.361 +		value = option;
 151.362 +		key = string_sep (&value, "=");
 151.363 +
 151.364 +		if (string_isempty (key) || string_isempty (value))
 151.365 +			continue;
 151.366 +
 151.367 +		/* look up the key in our list of possible options */
 151.368 +		if ((url_opt = lookup_url_option (key)))
 151.369 +		{
 151.370 +			/* unserialize the specified key */
 151.371 +			if (url_opt->unserialize (gt, key, value))
 151.372 +				continue;
 151.373 +
 151.374 +			/* fail through on failure to store failed keys */
 151.375 +		}
 151.376 +
 151.377 +		/* store the unfound keys in the extra parameter dataset */
 151.378 +		dataset_insertstr (&gt->extra, key, value);
 151.379 +	}
 151.380 +
 151.381 +	return TRUE;
 151.382 +}
 151.383 +
 151.384 +/*****************************************************************************/
 151.385 +
 151.386 +static GtSource *handle_old_url (char *url)
 151.387 +{
 151.388 +	GtSource  *gt;
 151.389 +	char      *fname      = NULL;
 151.390 +	char      *guid_ascii = NULL;
 151.391 +
 151.392 +	if (!(gt = gt_source_new ()))
 151.393 +		return NULL;
 151.394 +
 151.395 +	if (!parse_old_url (url, &gt->user_ip, &gt->user_port,
 151.396 +	                    &gt->server_ip, &gt->server_port,
 151.397 +	                    &gt->firewalled, &guid_ascii, &gt->index, &fname))
 151.398 +	{
 151.399 +		gt_source_free (gt);
 151.400 +		return NULL;
 151.401 +	}
 151.402 +
 151.403 +	gt->filename = NULL;
 151.404 +	if (!string_isempty (fname))
 151.405 +		gt->filename = STRDUP (fname);
 151.406 +
 151.407 +	gt->guid = NULL;
 151.408 +	if (!string_isempty (guid_ascii))
 151.409 +		gt->guid = gt_guid_bin (guid_ascii);
 151.410 +
 151.411 +	return gt;
 151.412 +}
 151.413 +
 151.414 +static GtSource *handle_new_url (char *url)
 151.415 +{
 151.416 +	GtSource *gt;
 151.417 +
 151.418 +	if (!(gt = gt_source_new ()))
 151.419 +		return NULL;
 151.420 +
 151.421 +	if (!parse_new_url (url, gt))
 151.422 +	{
 151.423 +		gt_source_free (gt);
 151.424 +		return NULL;
 151.425 +	}
 151.426 +
 151.427 +	return gt;
 151.428 +}
 151.429 +
 151.430 +GtSource *gt_source_unserialize (const char *url)
 151.431 +{
 151.432 +	char     *t_url;
 151.433 +	GtSource *src   = NULL;
 151.434 +
 151.435 +	if (!url)
 151.436 +		return NULL;
 151.437 +
 151.438 +	if (!(t_url = STRDUP (url)))
 151.439 +		return NULL;
 151.440 +
 151.441 +	/*
 151.442 +	 * Determine whether this is the new format URL (beginning with
 151.443 +	 * "Gnutella:?") or the old-style (starts with "Gnutella://")
 151.444 +	 */
 151.445 +	if (strncmp (t_url, "Gnutella://", sizeof ("Gnutella://") - 1) == 0)
 151.446 +	{
 151.447 +		src = handle_old_url (t_url);
 151.448 +	}
 151.449 +	else if (strncmp (t_url, "Gnutella:?", sizeof ("Gnutella:?") - 1) == 0)
 151.450 +	{
 151.451 +		src = handle_new_url (t_url);
 151.452 +	}
 151.453 +	else
 151.454 +	{
 151.455 +		/* do nothing */
 151.456 +	}
 151.457 +
 151.458 +	FREE (t_url);
 151.459 +
 151.460 +	return src;
 151.461 +}
 151.462 +
 151.463 +/* use the old format serialization for now */
 151.464 +#if 0
 151.465 +static void unknown_opt (ds_data_t *key, ds_data_t *value, void *udata)
 151.466 +{
 151.467 +	String *str = udata;
 151.468 +	string_appendf (str, "%s=%s&", key->data, value->data);
 151.469 +}
 151.470 +
 151.471 +char *gt_source_serialize (GtSource *gt)
 151.472 +{
 151.473 +	struct url_option *opt;
 151.474 +	char              *url;
 151.475 +	size_t             len;
 151.476 +	String             str;
 151.477 +
 151.478 +	string_init (&str);
 151.479 +	string_appendf (&str, "%s:?", GT->name);
 151.480 +
 151.481 +	for (opt = gt_source_url_options; opt->key != NULL; opt++)
 151.482 +	{
 151.483 +		if (opt->serialize (gt, &str))
 151.484 +		{
 151.485 +			/* append separator for next argument */
 151.486 +			string_appendc (&str, '&');
 151.487 +		}
 151.488 +	}
 151.489 +
 151.490 +	/* copy unknown options to the URL */
 151.491 +	dataset_foreach (gt->extra, unknown_opt, &str);
 151.492 +
 151.493 +	len = str.len;
 151.494 +	assert (len > 0);
 151.495 +
 151.496 +	url = string_finish_keep (&str);
 151.497 +
 151.498 +	/* remove trailing separator (may not be there if source is empty) */
 151.499 +	if (url[len - 1] == '&')
 151.500 +		url[len - 1] = 0;
 151.501 +
 151.502 +	return url;
 151.503 +}
 151.504 +#endif
 151.505 +
 151.506 +/* serialize to the old format for now */
 151.507 +char *gt_source_serialize (GtSource *gt)
 151.508 +{
 151.509 +	String *str;
 151.510 +
 151.511 +	if (!(str = string_new (NULL, 0, 0, TRUE)))
 151.512 +		return FALSE;
 151.513 +
 151.514 +	string_appendf (str, "Gnutella://%s:%hu", net_ip_str (gt->user_ip),
 151.515 +	                gt->user_port);
 151.516 +
 151.517 +	string_appendf (str, "@%s:%hu", net_ip_str (gt->server_ip),
 151.518 +	                gt->server_port);
 151.519 +
 151.520 +	string_appendc (str, '[');
 151.521 +
 151.522 +	if (gt->firewalled)
 151.523 +		string_append (str, "FW");
 151.524 +
 151.525 +	string_appendc (str, ']');
 151.526 +
 151.527 +	string_appendf (str, ":%s/%lu",
 151.528 +	                STRING_NOTNULL (gt_guid_str (gt->guid)), (long)gt->index);
 151.529 +	string_appendf (str, "/%s",
 151.530 +	                STRING_NOTNULL (gt->filename)); /* already encoded */
 151.531 +
 151.532 +	return string_free_keep (str);
 151.533 +}
 151.534 +
 151.535 +/*****************************************************************************/
 151.536 +
 151.537 +/*
 151.538 + * This is called by the search result code in order to produce
 151.539 + * source URLs.
 151.540 + *
 151.541 + * TODO: This is just wrong -- interface is not very extensible.  The search
 151.542 + * result code should probably use GtSource and call gt_source_serialize().
 151.543 + */
 151.544 +char *gt_source_url_new (const char *filename, uint32_t index,
 151.545 +                         in_addr_t user_ip, uint16_t user_port,
 151.546 +                         in_addr_t server_ip, uint16_t server_port,
 151.547 +                         BOOL firewalled, const gt_guid_t *client_id)
 151.548 +{
 151.549 +	GtSource *src;
 151.550 +	char     *url;
 151.551 +
 151.552 +	if (!(src = gt_source_new ()))
 151.553 +		return NULL;
 151.554 +
 151.555 +	gt_source_set_ip          (src, user_ip);
 151.556 +	gt_source_set_port        (src, user_port);
 151.557 +	gt_source_set_index       (src, index);
 151.558 +	gt_source_set_server_ip   (src, server_ip);
 151.559 +	gt_source_set_server_port (src, server_port);
 151.560 +	gt_source_set_firewalled  (src, firewalled);
 151.561 +
 151.562 +	if (!gt_source_set_guid (src, client_id) ||
 151.563 +	    !gt_source_set_filename (src, filename))
 151.564 +	{
 151.565 +		gt_source_free (src);
 151.566 +		return NULL;
 151.567 +	}
 151.568 +
 151.569 +	url = gt_source_serialize (src);
 151.570 +	gt_source_free (src);
 151.571 +
 151.572 +	return url;
 151.573 +}
 151.574 +
 151.575 +/*****************************************************************************/
 151.576 +
 151.577 +GtSource *gt_source_new (void)
 151.578 +{
 151.579 +	GtSource *src;
 151.580 +
 151.581 +	if (!(src = NEW (GtSource)))
 151.582 +		return NULL;
 151.583 +
 151.584 +	/* special case: port is 6346 if not specified */
 151.585 +	src->user_port   = 6346;
 151.586 +	src->server_port = 6346;
 151.587 +
 151.588 +	return src;
 151.589 +}
 151.590 +
 151.591 +void gt_source_free (GtSource *gt)
 151.592 +{
 151.593 +	if (!gt)
 151.594 +		return;
 151.595 +
 151.596 +	free (gt->guid);
 151.597 +	free (gt->filename);
 151.598 +	free (gt->status_txt);
 151.599 +
 151.600 +	FREE (gt);
 151.601 +}
 151.602 +
 151.603 +/*****************************************************************************/
 151.604 +
 151.605 +void gt_source_set_ip (GtSource *src, in_addr_t ip)
 151.606 +{
 151.607 +	src->user_ip = ip;
 151.608 +}
 151.609 +
 151.610 +void gt_source_set_port (GtSource *src, in_port_t port)
 151.611 +{
 151.612 +	src->user_port = port;
 151.613 +}
 151.614 +
 151.615 +void gt_source_set_index (GtSource *src, uint32_t index)
 151.616 +{
 151.617 +	src->index = index;
 151.618 +}
 151.619 +
 151.620 +void gt_source_set_server_ip (GtSource *src, in_addr_t server_ip)
 151.621 +{
 151.622 +	src->server_ip = server_ip;
 151.623 +}
 151.624 +
 151.625 +void gt_source_set_server_port (GtSource *src, in_port_t server_port)
 151.626 +{
 151.627 +	src->server_port = server_port;
 151.628 +}
 151.629 +
 151.630 +void gt_source_set_firewalled (GtSource *src, BOOL fw)
 151.631 +{
 151.632 +	src->firewalled = fw;
 151.633 +}
 151.634 +
 151.635 +BOOL gt_source_set_filename (GtSource *src, const char *filename)
 151.636 +{
 151.637 +	char *encoded;
 151.638 +
 151.639 +	/* special case for no filename */
 151.640 +	if (!filename)
 151.641 +	{
 151.642 +		free (src->filename);
 151.643 +		src->filename = NULL;
 151.644 +		return TRUE;
 151.645 +	}
 151.646 +
 151.647 +	if (!(encoded = gt_url_encode (filename)))
 151.648 +		return FALSE;
 151.649 +
 151.650 +	src->filename = encoded;
 151.651 +	return TRUE;
 151.652 +}
 151.653 +
 151.654 +BOOL gt_source_set_guid (GtSource *src, const gt_guid_t *guid)
 151.655 +{
 151.656 +	gt_guid_t *dup;
 151.657 +
 151.658 +	if (!(dup = gt_guid_dup (guid)))
 151.659 +		return FALSE;
 151.660 +
 151.661 +	src->guid = dup;
 151.662 +	return TRUE;
 151.663 +}
 151.664 +
 151.665 +/*****************************************************************************/
 151.666 +
 151.667 +int gnutella_source_cmp (Protocol *p, Source *a, Source *b)
 151.668 +{
 151.669 +	GtSource *gt_a = NULL;
 151.670 +	GtSource *gt_b = NULL;
 151.671 +	int       ret  = 0;
 151.672 +
 151.673 +	if (!(gt_a = gt_source_unserialize (a->url)) ||
 151.674 +	    !(gt_b = gt_source_unserialize (b->url)))
 151.675 +	{
 151.676 +		gt_source_free (gt_a);
 151.677 +		gt_source_free (gt_b);
 151.678 +		return -1;
 151.679 +	}
 151.680 +
 151.681 +	if (gt_a->user_ip > gt_b->user_ip)
 151.682 +		ret =  1;
 151.683 +	else if (gt_a->user_ip < gt_b->user_ip)
 151.684 +		ret = -1;
 151.685 +
 151.686 +	/*
 151.687 +	 * Having two sources with the same IP on the same transfer can trigger a
 151.688 +	 * bug in most versions of giftd.  At least as of giftd < 0.11.9, this
 151.689 +	 * causes sources to be reactivated after download completion due to a bug
 151.690 +	 * in handle_next_queued called from download_complete.  To avoid that, we
 151.691 +	 * pretend that multiple sources with the same hash from the same user_ip
 151.692 +	 * are the same here, by ignoring the port.  If the sources compare
 151.693 +	 * equally, then one will replace the other when added, and there won't be
 151.694 +	 * any dead sources with the same IP available to reactivate when the
 151.695 +	 * download completes.
 151.696 +	 *
 151.697 +	 * It's ok for the client guid to be different, even if the IPs are the
 151.698 +	 * same, since in that case the guid gets reflected in the user string, so
 151.699 +	 * the bug in handle_next_queue() won't trigger.
 151.700 +	 *
 151.701 +	 * Also, Transfers that don't have hashes are ok since they can only ever
 151.702 +	 * have one user.  So, if either source doesn't have a hash the bug won't
 151.703 +	 * trigger.
 151.704 +	 */
 151.705 +#if 0
 151.706 +	if (gt_a->user_port > gt_b->user_port)
 151.707 +		ret =  1;
 151.708 +	else if (gt_a->user_port < gt_b->user_port)
 151.709 +		ret = -1;
 151.710 +#endif
 151.711 +
 151.712 +	/* if both IPs are private match by the guid */
 151.713 +	if (gt_is_local_ip (gt_a->user_ip, gt_a->server_ip) &&
 151.714 +	    gt_is_local_ip (gt_b->user_ip, gt_b->server_ip))
 151.715 +	{
 151.716 +		ret = gt_guid_cmp (gt_a->guid, gt_b->guid);
 151.717 +	}
 151.718 +
 151.719 +	if (ret == 0)
 151.720 +	{
 151.721 +		/* if the hashes match consider them equal */
 151.722 +		if (a->hash || b->hash)
 151.723 +			ret = gift_strcmp (a->hash, b->hash);
 151.724 +		else
 151.725 +			ret = gift_strcmp (gt_a->filename, gt_b->filename);
 151.726 +	}
 151.727 +
 151.728 +	gt_source_free (gt_a);
 151.729 +	gt_source_free (gt_b);
 151.730 +
 151.731 +	return ret;
 151.732 +}
 151.733 +
 151.734 +int gnutella_source_add (Protocol *p, Transfer *transfer, Source *source)
 151.735 +{
 151.736 +	GtSource *src;
 151.737 +
 151.738 +	assert (source->udata == NULL);
 151.739 +
 151.740 +	if (!(src = gt_source_unserialize (source->url)))
 151.741 +		return FALSE;
 151.742 +
 151.743 +	source->udata = src;
 151.744 +
 151.745 +	/* track this download */
 151.746 +	gt_download_add (transfer, source);
 151.747 +
 151.748 +	return TRUE;
 151.749 +}
 151.750 +
 151.751 +void gnutella_source_remove (Protocol *p, Transfer *transfer, Source *source)
 151.752 +{
 151.753 +	gt_download_remove (transfer, source);
 151.754 +
 151.755 +	assert (source->udata != NULL);
 151.756 +	gt_source_free (source->udata);
 151.757 +}
   152.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   152.2 +++ b/src/transfer/source.h	Sat Feb 20 21:18:28 2010 -0800
   152.3 @@ -0,0 +1,90 @@
   152.4 +/*
   152.5 + * $Id: source.h,v 1.4 2003/12/22 02:46:34 hipnod Exp $
   152.6 + *
   152.7 + * Copyright (C) 2002-2003 giFT project (gift.sourceforge.net)
   152.8 + *
   152.9 + * This program is free software; you can redistribute it and/or modify it
  152.10 + * under the terms of the GNU General Public License as published by the
  152.11 + * Free Software Foundation; either version 2, or (at your option) any
  152.12 + * later version.
  152.13 + *
  152.14 + * This program is distributed in the hope that it will be useful, but
  152.15 + * WITHOUT ANY WARRANTY; without even the implied warranty of
  152.16 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
  152.17 + * General Public License for more details.
  152.18 + */
  152.19 +
  152.20 +#ifndef GIFT_GT_TRANSFER_SOURCE_H_
  152.21 +#define GIFT_GT_TRANSFER_SOURCE_H_
  152.22 +
  152.23 +/*****************************************************************************/
  152.24 +
  152.25 +struct transfer;
  152.26 +struct source;
  152.27 +
  152.28 +typedef struct gt_source
  152.29 +{
  152.30 +	uint32_t        user_ip;
  152.31 +	uint16_t        user_port;
  152.32 +	uint32_t        server_ip;
  152.33 +	uint16_t        server_port;
  152.34 +	BOOL            firewalled;
  152.35 +	gt_guid_t      *guid;
  152.36 +	uint32_t        index;
  152.37 +	char           *filename;
  152.38 +
  152.39 +	/*
  152.40 +	 * Parameters we don't understand, but were in the source URL.
  152.41 +	 * Parsed for forwards compatibility reasons, so newer versions
  152.42 +	 * can play with the same state files as older versions).
  152.43 +	 */
  152.44 +	Dataset        *extra;
  152.45 +
  152.46 +	/*
  152.47 +	 * Fields that get set depending on what happens to this source.
  152.48 +	 * This should be in a shared per-server structure, actually.
  152.49 +	 */
  152.50 +	time_t          retry_time;       /* used for Retry-After; pollMin */
  152.51 +	char           *status_txt;       /* previous status text message */
  152.52 +	BOOL            uri_res_failed;   /* uri-res request failed */
  152.53 +	BOOL            connect_failed;   /* last connection attempt failed */
  152.54 +} GtSource;
  152.55 +
  152.56 +/*****************************************************************************/
  152.57 +
  152.58 +GtSource     *gt_source_new             (void);
  152.59 +void          gt_source_free            (GtSource *gt);
  152.60 +
  152.61 +char         *gt_source_serialize       (GtSource *src);
  152.62 +GtSource     *gt_source_unserialize     (const char *url);
  152.63 +
  152.64 +void          gt_source_set_ip          (GtSource *src, in_addr_t port);
  152.65 +void          gt_source_set_port        (GtSource *src, in_port_t port);
  152.66 +void          gt_source_set_index       (GtSource *src, uint32_t index);
  152.67 +void          gt_source_set_server_ip   (GtSource *src, in_addr_t server_ip);
  152.68 +void          gt_source_set_server_port (GtSource *src, in_port_t server_port);
  152.69 +void          gt_source_set_firewalled  (GtSource *src, BOOL fw);
  152.70 +
  152.71 +BOOL          gt_source_set_filename    (GtSource *src, const char *filename);
  152.72 +BOOL          gt_source_set_guid        (GtSource *src, const gt_guid_t *guid);
  152.73 +
  152.74 +/*****************************************************************************/
  152.75 +
  152.76 +/* deprecated */
  152.77 +char         *gt_source_url_new    (const char *filename, uint32_t index,
  152.78 +                                    in_addr_t user_ip, uint16_t user_port,
  152.79 +                                    in_addr_t server_ip, uint16_t server_port,
  152.80 +                                    BOOL firewalled,
  152.81 +                                    const gt_guid_t *client_id);
  152.82 +
  152.83 +/*****************************************************************************/
  152.84 +
  152.85 +int  gnutella_source_cmp    (Protocol *p, struct source *a, struct source *b);
  152.86 +BOOL gnutella_source_add    (Protocol *p, struct transfer *transfer,
  152.87 +                             struct source *source);
  152.88 +void gnutella_source_remove (Protocol *p, struct transfer *transfer,
  152.89 +                             struct source *source);
  152.90 +
  152.91 +/*****************************************************************************/
  152.92 +
  152.93 +#endif /* GIFT_GT_TRANSFER_SOURCE_H_ */
   153.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   153.2 +++ b/src/trie.c	Sat Feb 20 21:18:28 2010 -0800
   153.3 @@ -0,0 +1,375 @@
   153.4 +/*
   153.5 + * $Id: trie.c,v 1.6 2005/01/04 14:58:42 mkern Exp $
   153.6 + *
   153.7 + * Copyright (C) 2001-2003 giFT project (gift.sourceforge.net)
   153.8 + *
   153.9 + * This program is free software; you can redistribute it and/or modify it
  153.10 + * under the terms of the GNU General Public License as published by the
  153.11 + * Free Software Foundation; either version 2, or (at your option) any
  153.12 + * later version.
  153.13 + *
  153.14 + * This program is distributed in the hope that it will be useful, but
  153.15 + * WITHOUT ANY WARRANTY; without even the implied warranty of
  153.16 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
  153.17 + * General Public License for more details.
  153.18 + */
  153.19 +
  153.20 +#ifdef STANDALONE
  153.21 +#include <libgift/libgift.h>
  153.22 +#else
  153.23 +#include "gt_gnutella.h"
  153.24 +#endif /* STANDALONE */
  153.25 +
  153.26 +#include "trie.h"
  153.27 +
  153.28 +/*****************************************************************************/
  153.29 +
  153.30 +static Trie *trie_alloc (char c)
  153.31 +{
  153.32 +	Trie *trie;
  153.33 +
  153.34 +	if (!(trie = MALLOC (sizeof (Trie))))
  153.35 +		return NULL;
  153.36 +
  153.37 +	trie->c = c;
  153.38 +
  153.39 +	return trie;
  153.40 +}
  153.41 +
  153.42 +Trie *trie_new (void)
  153.43 +{
  153.44 +	/*
  153.45 +	 * Null won't match any character in the trie, so use 
  153.46 +	 * that as a sentinel in the root node.
  153.47 +	 */
  153.48 +	return trie_alloc (0);
  153.49 +}
  153.50 +
  153.51 +static int free_children (Trie *trie, void *udata)
  153.52 +{
  153.53 +	trie_free (trie);
  153.54 +	return TRUE;
  153.55 +}
  153.56 +		
  153.57 +void trie_free (Trie *trie)
  153.58 +{
  153.59 +	List *children;
  153.60 +
  153.61 +	if (!trie)
  153.62 +		return;
  153.63 +
  153.64 +	children = trie->children;
  153.65 +
  153.66 +	if (trie->terminal_node)
  153.67 +	{
  153.68 +		/* the first data item is the data item for this node */
  153.69 +		children = list_remove_link (children, children);
  153.70 +	}
  153.71 +
  153.72 +	list_foreach_remove (children, (ListForeachFunc)free_children, NULL);
  153.73 +	free (trie);
  153.74 +}
  153.75 +
  153.76 +static Trie *find_node (Trie *trie, char c)
  153.77 +{
  153.78 +	List   *children;
  153.79 +	List   *ptr;
  153.80 +
  153.81 +	children = trie->children;
  153.82 +
  153.83 +	/*
  153.84 +	 * If this is a terminal node, skip the data list
  153.85 +	 * that is in the first position.
  153.86 +	 */
  153.87 +	if (trie->terminal_node)
  153.88 +		children = children->next;
  153.89 +
  153.90 +	/*
  153.91 +	 * Could use list_find_custom here, but we want
  153.92 +	 * this to be as fast as possible.
  153.93 +	 *
  153.94 +	 * Should probably use a realloc'd array for the 
  153.95 +	 * child list instead.
  153.96 +	 */
  153.97 +	for (ptr = children; ptr; ptr = ptr->next)
  153.98 +	{
  153.99 +		Trie *node = ptr->data;
 153.100 +
 153.101 +		if (node->c == c)
 153.102 +			break;
 153.103 +	}
 153.104 +
 153.105 +#undef TEST_MOVE
 153.106 +#ifdef TEST_MOVE
 153.107 +	if (ptr)
 153.108 +	{
 153.109 +		void *data = ptr->data;
 153.110 +		int   index;
 153.111 +
 153.112 +		/* remove from the old position */
 153.113 +		trie->children = list_remove_link (trie->children, ptr);
 153.114 +
 153.115 +		/* insert at the beginning of the list, taking into account data
 153.116 +		 * list at the head if this is a terminal node */
 153.117 +		index = trie->terminal_node;
 153.118 +		trie->children = list_insert (trie->children, index, data);
 153.119 +
 153.120 +		return data;
 153.121 +	}
 153.122 +
 153.123 +	return NULL;
 153.124 +#else
 153.125 +	/* we directly access result->data here for efficiency */
 153.126 +	return ptr ? ptr->data : NULL;
 153.127 +#endif
 153.128 +}
 153.129 +
 153.130 +/*
 153.131 + * Find a node in the Trie. 
 153.132 + *
 153.133 + * @param trie  The Trie to look in
 153.134 + * @param s     The string to search for
 153.135 + * @param alloc Whether to allocate space for non-existent nodes during
 153.136 + *              lookup
 153.137 + */
 153.138 +static Trie *t_node_lookup (Trie *trie, char *s, int alloc)
 153.139 +{
 153.140 +	Trie   *result;
 153.141 +	char    c;
 153.142 +
 153.143 +	while ((c = *s++))
 153.144 +	{
 153.145 +		if (!trie)
 153.146 +			break;
 153.147 +
 153.148 +		result = find_node (trie, c);
 153.149 +
 153.150 +		if (!result && alloc)
 153.151 +		{
 153.152 +			if (!(result = trie_alloc (c)))
 153.153 +				return NULL;
 153.154 +
 153.155 +			trie->children = list_append (trie->children, result);
 153.156 +		}
 153.157 +
 153.158 +		trie = result;
 153.159 +	}
 153.160 +
 153.161 +	return trie;
 153.162 +}
 153.163 +
 153.164 +void *trie_lookup (Trie *trie, char *s)
 153.165 +{
 153.166 +	Trie *node;
 153.167 +
 153.168 +	node = t_node_lookup (trie, s, FALSE);
 153.169 +
 153.170 +	if (!node)
 153.171 +		return NULL;
 153.172 +
 153.173 +	if (node->terminal_node)
 153.174 +		return list_nth_data (node->children, 0);
 153.175 +
 153.176 +	return NULL;
 153.177 +}
 153.178 +
 153.179 +void trie_insert (Trie *trie, char *s, void *value)
 153.180 +{
 153.181 +	Trie   *node;
 153.182 +	void   *data;
 153.183 +	List   *head;
 153.184 +
 153.185 +	node = t_node_lookup (trie, s, TRUE);
 153.186 +
 153.187 +	if (!node)
 153.188 +	{
 153.189 +		/* must be memory allocation error */
 153.190 +		assert (0);
 153.191 +		return;
 153.192 +	}
 153.193 +
 153.194 +	if (!node->terminal_node)
 153.195 +	{
 153.196 +		/* could be a mem allocation error here... */
 153.197 +		node->children = list_prepend (node->children, value);
 153.198 +
 153.199 +		/* convert this node to a terminal node, with the data list
 153.200 +		 * in the first position of ->children */
 153.201 +		node->terminal_node = TRUE;
 153.202 +		return;
 153.203 +	}
 153.204 +	
 153.205 +	/* 
 153.206 +	 * This should not happen unless the user didn't call 
 153.207 +	 * remove first. That may leak memory, so assert here temporarily.
 153.208 +	 */
 153.209 +	assert (0);
 153.210 +
 153.211 +	head = list_nth (node->children, 0);
 153.212 +	data = list_nth_data (node->children, 0);
 153.213 +
 153.214 +	/* 
 153.215 +	 * Remove the first item, then insert a new list.
 153.216 +	 */
 153.217 +	node->children = list_remove_link (node->children, head);
 153.218 +
 153.219 +	/* insert the new data list back */
 153.220 +	node->children = list_prepend (node->children, value);
 153.221 +}
 153.222 +
 153.223 +int trie_is_empty (Trie *trie)
 153.224 +{
 153.225 +	if (trie->children == NULL)
 153.226 +		return TRUE;
 153.227 +
 153.228 +	return FALSE;
 153.229 +}
 153.230 +
 153.231 +static void remove_if_empty (Trie *root, Trie *child)
 153.232 +{
 153.233 +	if (!trie_is_empty (child))
 153.234 +		return;
 153.235 +
 153.236 +	root->children = list_remove (root->children, child);
 153.237 +	trie_free (child);
 153.238 +}
 153.239 +
 153.240 +static void t_remove_node (Trie *trie)
 153.241 +{
 153.242 +	void   *value;
 153.243 +	List   *value_ptr;
 153.244 +
 153.245 +	if (!trie->terminal_node)
 153.246 +		return;
 153.247 +
 153.248 +#if 0
 153.249 +	/* this assertion is broken due to duplicates */
 153.250 +	assert (trie->terminal_node == TRUE);
 153.251 +#endif
 153.252 +	
 153.253 +	value_ptr = list_nth (trie->children, 0);
 153.254 +	value     = list_nth_data (trie->children, 0);
 153.255 +
 153.256 +#if 0
 153.257 +	/* these will falsely trigger for files that have the same
 153.258 +	 * token in them twice, and end up getting removed twice */
 153.259 +	assert (list_length (data_list) > 0);
 153.260 +	assert (list_find (data_list, value) != NULL);
 153.261 +#endif
 153.262 +
 153.263 +	/* remove the old data list */
 153.264 +	trie->children      = list_remove_link (trie->children, value_ptr);
 153.265 +	trie->terminal_node = FALSE;
 153.266 +}
 153.267 +
 153.268 +void trie_remove (Trie *trie, char *s)
 153.269 +{
 153.270 +	Trie *child;
 153.271 +
 153.272 +	/* remove the node if we found it */
 153.273 +	if (string_isempty (s))
 153.274 +	{
 153.275 +		t_remove_node (trie);
 153.276 +		return;
 153.277 +	}
 153.278 +
 153.279 +	child = find_node (trie, *s);
 153.280 +	s++;
 153.281 +
 153.282 +	if (!child)
 153.283 +		return;
 153.284 +#if 0
 153.285 +	assert (child != NULL);
 153.286 +#endif
 153.287 +
 153.288 +	/* recursively remove all nodes */
 153.289 +	trie_remove (child, s);
 153.290 +
 153.291 +	/* remove this node if it has no children anymore */
 153.292 +	remove_if_empty (trie, child);
 153.293 +}
 153.294 +
 153.295 +static void print_children (List *children)
 153.296 +{
 153.297 +	List   *ptr;
 153.298 +	int     printed_open = FALSE;
 153.299 +	Trie   *trie;
 153.300 +
 153.301 +	for (ptr = children; ptr; ptr = list_next (ptr))
 153.302 +	{
 153.303 +		if (!printed_open)
 153.304 +		{
 153.305 +			printf ("{ ");
 153.306 +			printed_open = TRUE;
 153.307 +		}
 153.308 +
 153.309 +		trie = list_nth_data (ptr, 0);
 153.310 +		trie_print (trie);
 153.311 +
 153.312 +		if (list_next (ptr))
 153.313 +			printf(",");
 153.314 +	}
 153.315 +
 153.316 +	if (children)
 153.317 +		printf (" }");
 153.318 +}
 153.319 +
 153.320 +void trie_print (Trie *trie)
 153.321 +{
 153.322 +	List *children;
 153.323 +
 153.324 +	if (trie->c)
 153.325 +		printf ("%c", trie->c);
 153.326 +
 153.327 +	children = trie->children;
 153.328 +
 153.329 +	if (trie->terminal_node)
 153.330 +	{
 153.331 +		printf ("*");
 153.332 +		children = list_next (children);
 153.333 +	}
 153.334 +
 153.335 +	print_children (children);
 153.336 +}
 153.337 +
 153.338 +#ifdef STANDALONE
 153.339 +int main(int argc, char **argv)
 153.340 +{
 153.341 +	List *args = NULL;
 153.342 +	List *ptr;
 153.343 +	Trie *trie;
 153.344 +	int   i;
 153.345 +
 153.346 +	trie = trie_new ();
 153.347 +
 153.348 +	for (i = 1; i < argc; i++)
 153.349 +	{
 153.350 +		trie_insert (trie, argv[i], argv[i]);
 153.351 +		args = list_prepend (args, argv[i]);
 153.352 +	}
 153.353 +
 153.354 +	trie_print (trie);
 153.355 +	printf ("\n");
 153.356 +
 153.357 +	while ((ptr = args))
 153.358 +	{
 153.359 +		trie_remove (trie, ptr->data);
 153.360 +		args = list_remove_link (args, ptr);
 153.361 +	}
 153.362 +
 153.363 +	trie_insert (trie, "book", "book");
 153.364 +	trie_insert (trie, "boo", "boo");
 153.365 +	trie_print (trie);
 153.366 +	printf ("\n");
 153.367 +	trie_remove (trie, "book");
 153.368 +	trie_remove (trie, "boo");
 153.369 +
 153.370 +	trie_print (trie);
 153.371 +	printf ("\n");
 153.372 +#if 0
 153.373 +	trie_free (trie);
 153.374 +#endif
 153.375 +
 153.376 +	return 0;
 153.377 +}
 153.378 +#endif /* STANDALONE */
   154.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   154.2 +++ b/src/trie.h	Sat Feb 20 21:18:28 2010 -0800
   154.3 @@ -0,0 +1,43 @@
   154.4 +/*
   154.5 + * $Id: trie.h,v 1.2 2003/07/09 09:31:52 hipnod Exp $
   154.6 + *
   154.7 + * Copyright (C) 2001-2003 giFT project (gift.sourceforge.net)
   154.8 + *
   154.9 + * This program is free software; you can redistribute it and/or modify it
  154.10 + * under the terms of the GNU General Public License as published by the
  154.11 + * Free Software Foundation; either version 2, or (at your option) any
  154.12 + * later version.
  154.13 + *
  154.14 + * This program is distributed in the hope that it will be useful, but
  154.15 + * WITHOUT ANY WARRANTY; without even the implied warranty of
  154.16 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
  154.17 + * General Public License for more details.
  154.18 + */
  154.19 +
  154.20 +#ifndef __GT_TRIE_H__
  154.21 +#define __GT_TRIE_H__
  154.22 +
  154.23 +/*****************************************************************************/
  154.24 +
  154.25 +typedef struct trie
  154.26 +{
  154.27 +	List           *children;               /* List of children.
  154.28 +	                                           The zeroth item is the data list
  154.29 +	                                           if this is a terminal node */
  154.30 +	unsigned char   terminal_node : 1;      /* TRUE if is a terminal node */
  154.31 +	char            c;                      /* Character of this node */
  154.32 +
  154.33 +} Trie;
  154.34 +
  154.35 +/*****************************************************************************/
  154.36 +
  154.37 +Trie       *trie_new      (void);
  154.38 +void        trie_free     (Trie *trie);
  154.39 +void       *trie_lookup   (Trie *trie, char *s);
  154.40 +void        trie_insert   (Trie *trie, char *s, void *value);
  154.41 +void        trie_remove   (Trie *trie, char *s);
  154.42 +void        trie_print    (Trie *trie);
  154.43 +
  154.44 +/*****************************************************************************/
  154.45 +
  154.46 +#endif /* __GT_TRIE_H__ */
   155.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   155.2 +++ b/src/xml.c	Sat Feb 20 21:18:28 2010 -0800
   155.3 @@ -0,0 +1,384 @@
   155.4 +/*
   155.5 + * $Id: xml.c,v 1.10 2004/04/13 07:25:18 hipnod Exp $
   155.6 + *
   155.7 + * Copyright (C) 2001-2003 giFT project (gift.sourceforge.net)
   155.8 + *
   155.9 + * This program is free software; you can redistribute it and/or modify it
  155.10 + * under the terms of the GNU General Public License as published by the
  155.11 + * Free Software Foundation; either version 2, or (at your option) any
  155.12 + * later version.
  155.13 + *
  155.14 + * This program is distributed in the hope that it will be useful, but
  155.15 + * WITHOUT ANY WARRANTY; without even the implied warranty of
  155.16 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
  155.17 + * General Public License for more details.
  155.18 + */
  155.19 +
  155.20 +#include "gt_gnutella.h"
  155.21 +
  155.22 +#include <zlib.h>
  155.23 +
  155.24 +#ifdef USE_LIBXML2
  155.25 +#include <libxml/parser.h>         /* xmlParseMemory() */
  155.26 +#include <libxml/xmlerror.h>       /* xmlSetGenericErrorFunc() */
  155.27 +#endif /* USE_LIBXML2 */
  155.28 +
  155.29 +#include "xml.h"
  155.30 +
  155.31 +/*****************************************************************************/
  155.32 +
  155.33 +#ifndef USE_LIBXML2
  155.34 +BOOL gt_xml_parse (const char *xml, Dataset **ret)
  155.35 +{
  155.36 +	return FALSE;
  155.37 +}
  155.38 +
  155.39 +BOOL gt_xml_parse_indexed (const char *xml, size_t bin_len, Share **shares,
  155.40 +                           size_t shares_len)
  155.41 +{
  155.42 +	return FALSE;
  155.43 +}
  155.44 +#endif /* !USE_LIBXML2 */
  155.45 +
  155.46 +/*****************************************************************************/
  155.47 +
  155.48 +/* the rest of this file is conditional on using libxml */
  155.49 +#ifdef USE_LIBXML2
  155.50 +
  155.51 +/*****************************************************************************/
  155.52 +
  155.53 +#define MAX_XML_BUFSIZE  65536
  155.54 +
  155.55 +static char      *xml_buf;     /* for decompressing xml */
  155.56 +static size_t     xml_buf_size;
  155.57 +static z_stream   zxml;
  155.58 +
  155.59 +/*****************************************************************************/
  155.60 +
  155.61 +static void print_nodes (xmlNodePtr node, Dataset **ret)
  155.62 +{
  155.63 +	while (node != NULL)
  155.64 +	{
  155.65 +		/*
  155.66 +		 * If this node has no children, it is a leaf node,
  155.67 +		 * so set the metadata from it.
  155.68 +		 */
  155.69 +		if (node->xmlChildrenNode)
  155.70 +			print_nodes (node->xmlChildrenNode, ret);
  155.71 +		else
  155.72 +			GT->DBGFN (GT, "name=%s", node->name);
  155.73 +
  155.74 +		node = node->next;
  155.75 +	}
  155.76 +}
  155.77 +
  155.78 +BOOL gt_xml_parse (const char *xml, Dataset **ret)
  155.79 +{
  155.80 +	xmlDocPtr doc;
  155.81 +
  155.82 +	/* disable for now because it doesn't work anyway: need to share
  155.83 +	 * code with parse_indexed */
  155.84 +	if (!XML_DEBUG)
  155.85 +		return FALSE;
  155.86 +
  155.87 +	/* only parse documents starting with '<' */
  155.88 +	if (!xml || xml[0] != '<')
  155.89 +		return FALSE;
  155.90 +
  155.91 +	if (!(doc = xmlParseMemory (xml, strlen (xml))))
  155.92 +		return FALSE;
  155.93 +
  155.94 +	print_nodes (doc->xmlChildrenNode, ret);
  155.95 +
  155.96 +	xmlFreeDoc (doc);
  155.97 +
  155.98 +	return TRUE;
  155.99 +}
 155.100 +
 155.101 +static void add_child (Dataset **children, const char *key, const char *value)
 155.102 +{
 155.103 +	char *dup = NULL;
 155.104 +
 155.105 +	if (!key || !value)
 155.106 +		return;
 155.107 +
 155.108 +	/*
 155.109 +	 * Hack to map some of the attributes from XML documents found
 155.110 +	 * on Gnutella to ones peddled by giFT.
 155.111 +	 */
 155.112 +	if (!strcasecmp (key, "bitrate"))
 155.113 +	{
 155.114 +		dup = stringf_dup ("%s000", value);
 155.115 +		value = dup;
 155.116 +	}
 155.117 +	else if (!strcasecmp (key, "seconds"))
 155.118 +	{
 155.119 +		key = "duration";
 155.120 +	}
 155.121 +
 155.122 +	dataset_insertstr (children, key, value);
 155.123 +	free (dup);
 155.124 +}
 155.125 +
 155.126 +static Dataset *collect_attributes (xmlNode *node)
 155.127 +{
 155.128 +	const xmlAttr *attr;
 155.129 +	Dataset       *children = NULL;
 155.130 +	BOOL           do_log   = XML_DEBUG;
 155.131 +
 155.132 +	for (attr = node->properties; attr != NULL; attr = attr->next)
 155.133 +	{
 155.134 +		xmlChar *str;
 155.135 +
 155.136 +		/* is there an easier way to get attribute content? */
 155.137 +		str = xmlGetProp (node, attr->name);
 155.138 +
 155.139 +		if (do_log)
 155.140 +		{
 155.141 +			GT->dbg (GT, "name=%s content=%s",
 155.142 +			         (const char *)attr->name, (const char *)str);
 155.143 +		}
 155.144 +
 155.145 +		/* add the key->value pair to the dataset */
 155.146 +		add_child (&children, (const char *)attr->name,
 155.147 +		           (const char *)str);
 155.148 +
 155.149 +		/* xmlGetProp() allocates memory */
 155.150 +		free (str);
 155.151 +	}
 155.152 +
 155.153 +	return children;
 155.154 +}
 155.155 +
 155.156 +static void set_meta_foreach (ds_data_t *key, ds_data_t *value, Share *share)
 155.157 +{
 155.158 +	char *meta_key = key->data;
 155.159 +	char *meta_val = value->data;
 155.160 +
 155.161 +	share_set_meta (share, meta_key, meta_val);
 155.162 +}
 155.163 +
 155.164 +static void set_share_meta (Share **shares, size_t shares_len,
 155.165 +                            Dataset *children)
 155.166 +{
 155.167 +	char      *index_str;
 155.168 +	size_t     index;
 155.169 +
 155.170 +	/*
 155.171 +	 * Lookup the "index" attribute, and use that to determine
 155.172 +	 * which Share the XML applies to.
 155.173 +	 */
 155.174 +	if (!(index_str = dataset_lookupstr (children, "index")))
 155.175 +		return;
 155.176 +
 155.177 +	index = gift_strtoul (index_str);
 155.178 +
 155.179 +	if (index >= shares_len)
 155.180 +		return;
 155.181 +
 155.182 +	if (!shares[index])
 155.183 +		return;
 155.184 +
 155.185 +	/* skip the index attribute */
 155.186 +	dataset_removestr (children, "index");
 155.187 +
 155.188 +	dataset_foreach (children, DS_FOREACH(set_meta_foreach), shares[index]);
 155.189 +}
 155.190 +
 155.191 +static void set_metadata_from_indexed_xml (Share **shares, size_t shares_len,
 155.192 +                                           xmlDoc *doc)
 155.193 +{
 155.194 +	xmlNode *node;
 155.195 +
 155.196 +	if (!(node = xmlDocGetRootElement (doc)))
 155.197 +		return;
 155.198 +
 155.199 +	for (node = node->xmlChildrenNode; node != NULL; node = node->next)
 155.200 +	{
 155.201 +		Dataset *children;
 155.202 +
 155.203 +		children = collect_attributes (node);
 155.204 +
 155.205 +		set_share_meta (shares, shares_len, children);
 155.206 +		dataset_clear (children);
 155.207 +	}
 155.208 +}
 155.209 +
 155.210 +static int try_inflate_xml (const char *xml, size_t bin_len)
 155.211 +{
 155.212 +	int ret;
 155.213 +
 155.214 +	/* set zlib allocation data */
 155.215 +	zxml.zalloc    = Z_NULL;
 155.216 +	zxml.zfree     = Z_NULL;
 155.217 +	zxml.opaque    = Z_NULL;
 155.218 +
 155.219 +	/* set the input parameters */
 155.220 +	zxml.next_in   = (char *)xml;
 155.221 +	zxml.avail_in  = bin_len;
 155.222 +
 155.223 +	/* set the output parameters */
 155.224 +	zxml.next_out  = xml_buf;
 155.225 +	zxml.avail_out = xml_buf_size - 1;
 155.226 +
 155.227 +	if ((ret = inflateInit (&zxml)) != Z_OK)
 155.228 +		return ret;
 155.229 +
 155.230 +	ret = inflate (&zxml, Z_FINISH);
 155.231 +	inflateEnd (&zxml);
 155.232 +
 155.233 +	return ret;
 155.234 +}
 155.235 +
 155.236 +static const char *inflate_xml (const char *xml, size_t bin_len)
 155.237 +{
 155.238 +	size_t xml_len;
 155.239 +	int    ret;
 155.240 +
 155.241 +	ret = try_inflate_xml (xml, bin_len);
 155.242 +
 155.243 +	if (ret == Z_BUF_ERROR && xml_buf_size < MAX_XML_BUFSIZE)
 155.244 +	{
 155.245 +		size_t newsize = xml_buf_size * 2;
 155.246 +		char  *newbuf;
 155.247 +
 155.248 +		if (!(newbuf = realloc (xml_buf, newsize)))
 155.249 +			return NULL;
 155.250 +
 155.251 +		xml_buf      = newbuf;
 155.252 +		xml_buf_size = newsize;
 155.253 +
 155.254 +		/* retry with bigger buffer */
 155.255 +		return inflate_xml (xml, bin_len);
 155.256 +	}
 155.257 +
 155.258 +	if (ret != Z_STREAM_END)
 155.259 +		return NULL;
 155.260 +
 155.261 +	/* null terminate (the now hopefully plaintext) XML */
 155.262 +	xml_len = (xml_buf_size - 1) - zxml.avail_out;
 155.263 +	xml_buf[xml_len] = 0;
 155.264 +
 155.265 +	if (XML_DEBUG)
 155.266 +		GT->dbg (GT, "inflated xml: %s", xml_buf);
 155.267 +
 155.268 +	return xml_buf;
 155.269 +}
 155.270 +
 155.271 +BOOL gt_xml_parse_indexed (const char *xml, size_t bin_len, Share **shares,
 155.272 +                           size_t shares_len)
 155.273 +{
 155.274 +	xmlDoc     *doc;
 155.275 +	size_t      xml_len;
 155.276 +	const char *next;
 155.277 +	const char *ptr;
 155.278 +
 155.279 +	if (!xml || bin_len <= 4)
 155.280 +		return FALSE;
 155.281 +
 155.282 +	/*
 155.283 +	 * Look for the encoding type, currently possible
 155.284 +	 * encoding values are: "{}" meaning plain text, "{plaintext}",
 155.285 +	 * and "{deflate}".
 155.286 +	 */
 155.287 +
 155.288 +	if (!strncmp (xml, "{}", 2))
 155.289 +	{
 155.290 +		xml += 2;
 155.291 +	}
 155.292 +	else if (bin_len >= sizeof("{plaintext}") - 1 &&
 155.293 +	         !strncasecmp (xml, "{plaintext}", sizeof("{plaintext}") - 1))
 155.294 +	{
 155.295 +		xml += sizeof("{plaintext}") - 1;
 155.296 +	}
 155.297 +	else if (bin_len >= sizeof("{deflate}") - 1 &&
 155.298 +	         !strncasecmp (xml, "{deflate}", sizeof("{deflate}") - 1))
 155.299 +	{
 155.300 +		/* the len passed here should be bin_len - 1, but some servents (MRPH)
 155.301 +		 * don't terminate the XML */
 155.302 +		xml = inflate_xml (xml + sizeof("{deflate}") - 1, bin_len);
 155.303 +
 155.304 +		if (XML_DEBUG)
 155.305 +			assert (xml != NULL);    /* assume valid input */
 155.306 +
 155.307 +		if (!xml)
 155.308 +			return FALSE;
 155.309 +	}
 155.310 +
 155.311 +	xml_len = strlen (xml);
 155.312 +
 155.313 +	/*
 155.314 +	 * The XML block is a sequence of XML documents, separated by the <?xml
 155.315 +	 * version="1.0"> document prefix.  Parse each one separately.
 155.316 +	 */
 155.317 +	for (ptr = xml; ptr != NULL; ptr = next)
 155.318 +	{
 155.319 +		size_t chunk_len;
 155.320 +
 155.321 +		if (ptr[0] != '<')
 155.322 +			return FALSE;
 155.323 +
 155.324 +		next = strstr (ptr + 1, "<?xml");
 155.325 +
 155.326 +		chunk_len = xml_len;
 155.327 +		if (next)
 155.328 +			chunk_len = next - ptr;
 155.329 +
 155.330 +		if (!(doc = xmlParseMemory (ptr, chunk_len)))
 155.331 +			return FALSE;
 155.332 +
 155.333 +		xml_len -= chunk_len;
 155.334 +
 155.335 +		set_metadata_from_indexed_xml (shares, shares_len, doc);
 155.336 +		xmlFreeDoc (doc);
 155.337 +	}
 155.338 +
 155.339 +	return TRUE;
 155.340 +}
 155.341 +
 155.342 +/* gets called when there are parsing errors */
 155.343 +static void error_handler_func (void *udata, const char *msg, ...)
 155.344 +{
 155.345 +	char     buf[1024];
 155.346 +	va_list  args;
 155.347 +
 155.348 +	/* this is here until i figure out why i get a message about
 155.349 +	 * namespace errors (but it still seems to work...) */
 155.350 +	if (!XML_DEBUG)
 155.351 +		return;
 155.352 +
 155.353 +	va_start (args, msg);
 155.354 +	vsnprintf (buf, sizeof (buf) - 1, msg, args);
 155.355 +	va_end (args);
 155.356 +
 155.357 +	GT->DBGFN (GT, "xml parse error: %s", buf);
 155.358 +}
 155.359 +
 155.360 +/*****************************************************************************/
 155.361 +
 155.362 +#endif /* USE_LIBXML2 */
 155.363 +
 155.364 +/*****************************************************************************/
 155.365 +
 155.366 +void gt_xml_init (void)
 155.367 +{
 155.368 +#ifdef USE_LIBXML2
 155.369 +	/* so libxml doesn't print messages on stderr */
 155.370 +	xmlSetGenericErrorFunc (NULL, error_handler_func);
 155.371 +
 155.372 +	xml_buf = malloc (32);
 155.373 +	assert (xml_buf != NULL);
 155.374 +	xml_buf_size = 32;
 155.375 +
 155.376 +	memset (&zxml, 0, sizeof (zxml));
 155.377 +#endif /* USE_LIBXML2 */
 155.378 +}
 155.379 +
 155.380 +void gt_xml_cleanup (void)
 155.381 +{
 155.382 +#ifdef USE_LIBXML2
 155.383 +	free (xml_buf);
 155.384 +	xml_buf      = NULL;
 155.385 +	xml_buf_size = 0;
 155.386 +#endif /* USE_LIBXML2 */
 155.387 +}
   156.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
   156.2 +++ b/src/xml.h	Sat Feb 20 21:18:28 2010 -0800
   156.3 @@ -0,0 +1,35 @@
   156.4 +/*
   156.5 + * $Id: xml.h,v 1.2 2003/11/08 12:29:55 hipnod Exp $
   156.6 + *
   156.7 + * Copyright (C) 2001-2003 giFT project (gift.sourceforge.net)
   156.8 + *
   156.9 + * This program is free software; you can redistribute it and/or modify it
  156.10 + * under the terms of the GNU General Public License as published by the
  156.11 + * Free Software Foundation; either version 2, or (at your option) any
  156.12 + * later version.
  156.13 + *
  156.14 + * This program is distributed in the hope that it will be useful, but
  156.15 + * WITHOUT ANY WARRANTY; without even the implied warranty of
  156.16 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
  156.17 + * General Public License for more details.
  156.18 + */
  156.19 +
  156.20 +#ifndef GIFT_GT_XML_H_
  156.21 +#define GIFT_GT_XML_H_
  156.22 +
  156.23 +/*****************************************************************************/
  156.24 +
  156.25 +#define XML_DEBUG               gt_config_get_int("xml/debug=0")
  156.26 +
  156.27 +/*****************************************************************************/
  156.28 +
  156.29 +BOOL      gt_xml_parse          (const char *xml, Dataset **ret);
  156.30 +BOOL      gt_xml_parse_indexed  (const char *xml, size_t bin_len,
  156.31 +                                 Share **shares, size_t shares_len);
  156.32 +
  156.33 +void      gt_xml_init           (void);
  156.34 +void      gt_xml_cleanup        (void);
  156.35 +
  156.36 +/*****************************************************************************/
  156.37 +
  156.38 +#endif /* GIFT_GT_XML_H_ */