Mercurial > hg > index.fcgi > gift-gnutella > gift-gnutella-0.0.11-1pba
changeset 0:d39e1d0d75b6 tip
initial add
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), >_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 (>->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 (>_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", >_rx_link_ops }, 120.56 + { "rx_inflate", >_rx_inflate_ops }, 120.57 + { "rx_packet", >_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", >_tx_link_ops, }, 128.42 + { "tx_deflate", >_tx_deflate_ops }, 128.43 + { "tx_packet", >_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 (>_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 = >_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 (>->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, >->user_ip, >->user_port, 151.396 + >->server_ip, >->server_port, 151.397 + >->firewalled, &guid_ascii, >->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_ */